Node.js SDK
The official SDKs work unchanged: you give them Kloria’s address and your key. Claude models accept both formats, GPT models the OpenAI format.
npm install openai @anthropic-ai/sdkThe examples read the key from KLORIA_API_KEY (see Quickstart) and use ES modules ("type": "module" in package.json, or .mjs files).
Simple request
Section titled “Simple request”import OpenAI from 'openai';
const client = new OpenAI({ baseURL: 'https://api.kloria.dev/v1', apiKey: process.env.KLORIA_API_KEY,});
const response = await client.chat.completions.create({ model: 'claude-sonnet-5', messages: [ { role: 'system', content: 'Answer briefly.' }, { role: 'user', content: 'Explain what a webhook is.' }, ],});
console.log(response.choices[0].message.content);console.log(response.usage);import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic({ baseURL: 'https://api.kloria.dev', // no /v1 apiKey: process.env.KLORIA_API_KEY,});
const message = await client.messages.create({ model: 'claude-sonnet-5', max_tokens: 1024, system: 'Answer briefly.', messages: [{ role: 'user', content: 'Explain what a webhook is.' }],});
console.log(message.content[0].text);console.log(message.usage);Streaming
Section titled “Streaming”const stream = await client.chat.completions.create({ model: 'gpt-6.1-sol', messages: [{ role: 'user', content: 'Write a haiku about Git.' }], stream: true,});
for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? '');}const stream = client.messages.stream({ model: 'claude-sonnet-5', max_tokens: 1024, messages: [{ role: 'user', content: 'Write a haiku about Git.' }],});
stream.on('text', (text) => process.stdout.write(text));await stream.finalMessage();Handling errors
Section titled “Handling errors”import OpenAI from 'openai';
try { await client.chat.completions.create({ model: 'claude-sonnet-5', messages });} catch (err) { if (err instanceof OpenAI.APIError) { // 401 invalid key · 403 balance or quota used up, model not allowed · 429 too many requests console.error(err.status, err.message); } else { throw err; }}Each error status is detailed in the API reference.
© 2026 Kloria — private beta