We gebruiken cookies. Cookies en browseropslag houden je ingelogd en onthouden je voorkeuren. Met je toestemming meten we ook hoe de site wordt gebruikt. Je kunt je wanneer je wilt. Zie ons cookiebeleid.

Node.js

SDK-gidsen

Node.js

Gebruik het officiële npm-pakket openai met api14: client instellen, chat, streaming, tool calling, Zod-schema's, embeddings en foutafhandeling.

Gebruik het officiële npm-pakket openai met api14. Verder verandert er niets: alleen baseURL en apiKey wijzen naar api14, en elk model-id werkt als model.

Installeren

npm install openai

Bewaar je key in een omgevingsvariabele:

export API14_API_KEY="sk-api14-..."

Configureren

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

Zonder opties leest de SDK OPENAI_BASE_URL en OPENAI_API_KEY. Door die twee variabelen in te stellen schakel je een bestaande app zonder codewijzigingen over op api14:

export OPENAI_BASE_URL="https://api14.com/api/v1"
export OPENAI_API_KEY="sk-api14-..."
const client = new OpenAI(); // pakt beide variabelen op

Chat

const result = await client.chat.completions.create({
  model: "openai/gpt-5-mini",
  messages: [{ role: "user", content: "Explain vector databases in two sentences." }],
});

console.log(result.choices[0].message.content);

Streaming

const stream = await client.chat.completions.create({
  model: "anthropic/claude-sonnet-4.5",
  messages: [{ role: "user", content: "Write a haiku about APIs." }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Zie Streaming voor het eventformaat.

Tool calling

Stuur tools mee, voer de aanroepen uit waar het model om vraagt, voeg de resultaten toe en roep opnieuw aan totdat het met tekst antwoordt:

const tools = [{
  type: "function",
  function: {
    name: "get_weather",
    description: "Current weather for a city",
    parameters: {
      type: "object",
      properties: { city: { type: "string" } },
      required: ["city"],
    },
  },
}];

const messages = [{ role: "user", content: "What's the weather in Istanbul?" }];
let res = await client.chat.completions.create({ model: "openai/gpt-5-mini", messages, tools });

while (res.choices[0].finish_reason === "tool_calls") {
  const msg = res.choices[0].message;
  messages.push(msg);
  for (const call of msg.tool_calls) {
    const args = JSON.parse(call.function.arguments);
    const result = await getWeather(args.city); // je eigen functie
    messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify(result) });
  }
  res = await client.chat.completions.create({ model: "openai/gpt-5-mini", messages, tools });
}

console.log(res.choices[0].message.content);

Zie Tool calling.

Gestructureerde uitvoer

De helper parse zet een Zod-schema om in een responseformaat json_schema en parset het antwoord (npm install zod):

import { z } from "zod";
import { zodResponseFormat } from "openai/helpers/zod";

const Person = z.object({ name: z.string(), born: z.number().int(), city: z.string() });

const res = await client.chat.completions.parse({
  model: "openai/gpt-5-mini",
  messages: [{ role: "user", content: "Extract: Ada Lovelace, born 1815 in London." }],
  response_format: zodResponseFormat(Person, "person"),
});

console.log(res.choices[0].message.parsed); // { name: "Ada Lovelace", born: 1815, city: "London" }

Zie Structured outputs.

Afbeeldingen als invoer

Geef content mee als array van delen. Gebruik een openbare URL of een base64-data-URL:

import { readFileSync } from "node:fs";

const image = readFileSync("photo.png").toString("base64");

const res = await client.chat.completions.create({
  model: "google/gemini-2.5-flash",
  messages: [{
    role: "user",
    content: [
      { type: "text", text: "What is in this picture?" },
      { type: "image_url", image_url: { url: `data:image/png;base64,${image}` } },
    ],
  }],
});

Zie Beeld en bestanden voor pdf's, audio en video.

Embeddings

const result = await client.embeddings.create({
  model: "openai/text-embedding-3-small",
  input: ["The quick brown fox", "Lorem ipsum"],
});

console.log(result.data.map((d) => d.embedding.length));

Endpoints zonder SDK-methode

Videotaken en rerank maken geen deel uit van het oppervlak van de OpenAI-SDK. Gebruik de generieke helpers post / get van de client; ze hergebruiken de base URL, key en nieuwe pogingen:

const ranked = await client.post("/rerank", {
  body: {
    model: "cohere/rerank-v3.5",
    query: "What is the capital of France?",
    documents: ["Paris is the capital of France.", "Berlin is in Germany."],
    top_n: 1,
  },
});
console.log(ranked.results);

Fouten

Fouten komen in het OpenAI-formaat binnen en worden gegooid als OpenAI.APIError. Vertak op status en code:

try {
  await client.chat.completions.create({ model: "openai/gpt-5-mini", messages: [{ role: "user", content: "Hi" }] });
} catch (err) {
  if (err instanceof OpenAI.APIError) {
    if (err.status === 402) console.error("Balance too low, add funds:", err.code); // insufficient_balance
    else if (err.status === 429) console.error("Retry after", err.headers?.["retry-after"], "s:", err.code); // rate_limited
    else throw err;
  }
}

Zie Fouten voor elke code.

Timeouts en nieuwe pogingen

De SDK probeert verbindingsfouten en responses 408, 409, 429 en 5xx standaard twee keer opnieuw, met exponentiële backoff die Retry-After respecteert. De standaardtimeout is 10 minuten per poging. Stel beide in op de client, of overschrijf ze per request:

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
  timeout: 60_000, // ms per poging
  maxRetries: 4,
});

await client.chat.completions.create(params, { timeout: 300_000, maxRetries: 0 });

Een nieuwe poging lost daily_limit_reached of insufficient_balance niet op. Stop bij lange batchtaken op die codes in plaats van opnieuw te proberen. Zie Rate limits.

Alle mogelijkheden

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api14.com/api/v1",
  apiKey: process.env.API14_API_KEY,
});

const result = await client.chat.completions.create({
  "model": "openai/gpt-5-mini",
  "messages": [
    {
      "role": "user",
      "content": "Explain vector databases in two sentences."
    }
  ]
});
console.log(result.choices[0].message.content);