Quickstart
Node.js Quickstart
Use the OpenAI Node.js SDK with SoxAI
Node.js Quickstart
Installation
npm install openai
# or
bun add openaiBasic Chat Completion
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sox-your-token-here",
baseURL: "https://api.soxai.io/v1",
});
const response = await client.chat.completions.create({
model: "gpt-5.4-mini",
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "What is the capital of France?" },
],
});
console.log(response.choices[0].message.content);Streaming
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.SOXAI_API_KEY!,
baseURL: "https://api.soxai.io/v1",
});
const stream = await client.chat.completions.create({
model: "gpt-5.4-mini",
messages: [{ role: "user", content: "Count from 1 to 10 slowly." }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) {
process.stdout.write(content);
}
}
console.log();Embeddings
const response = await client.embeddings.create({
model: "text-embedding-3-small",
input: "Hello world",
});
const vector = response.data[0].embedding;
console.log(`Vector length: ${vector.length}`);Image Generation
const response = await client.images.generate({
model: "dall-e-3",
prompt: "A futuristic city skyline at sunset, digital art",
n: 1,
size: "1024x1024",
});
console.log(response.data[0].url);Error Handling
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.SOXAI_API_KEY!,
baseURL: "https://api.soxai.io/v1",
});
try {
const response = await client.chat.completions.create({
model: "gpt-5.4-mini",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(response.choices[0].message.content);
} catch (err) {
if (err instanceof OpenAI.APIError) {
console.error(`Status: ${err.status}`);
console.error(`Message: ${err.message}`);
// err.status === 429 means quota exceeded or rate limited
// err.status === 401 means invalid API key
// err.status === 503 means all upstream providers unavailable
}
}Next.js App Router
// app/api/chat/route.ts
import OpenAI from "openai";
import { NextResponse } from "next/server";
const client = new OpenAI({
apiKey: process.env.SOXAI_API_KEY!,
baseURL: "https://api.soxai.io/v1",
});
export async function POST(req: Request) {
const { messages } = await req.json();
const stream = await client.chat.completions.create({
model: "gpt-5.4-mini",
messages,
stream: true,
});
const encoder = new TextEncoder();
const readable = new ReadableStream({
async start(controller) {
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content ?? "";
if (content) {
controller.enqueue(encoder.encode(content));
}
}
controller.close();
},
});
return new Response(readable, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
});
}