SoxAIDocs
Quickstart

Node.js Quickstart

Use the OpenAI Node.js SDK with SoxAI

Node.js Quickstart

Installation

npm install openai
# or
bun add openai

Basic 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" },
  });
}