# Node.js: het openai-pakket gericht op open-weight modellen

> Roep open-weight LLM's aan vanuit Node.js met het openai-pakket: één call, een batch, streaming en het resterende saldo. Kopieer-en-plak-voorbeelden.

- URL: https://llmwithcrypto.com/nl/docs/node/
- Laatst bijgewerkt: 2026-10-23
- Uitgever: LLMwithCrypto (https://llmwithcrypto.com)

Het officiële npm-pakket `openai` werkt ongewijzigd: geef het onze `baseURL` en je sleutel. De onderstaande voorbeelden zijn ES-modules voor Node.js 18 of nieuwer, dat `fetch` en top-level `await` ingebouwd heeft.

**Snel antwoord — Hoe roep ik LLMwithCrypto aan vanuit Node.js?**

Installeer het officiële pakket met `npm install openai` en maak daarna de client met `baseURL: "https://llmwithcrypto.com/api/v1"` en `apiKey: process.env.LLMWITHCRYPTO_API_KEY`. **LLMwithCrypto** antwoordt `client.chat.completions.create()` in het OpenAI-formaat voor 12 open-weight modellen, met streaming en tool calls waar het model die ondersteunt, zoals gedocumenteerd op 23 oktober 2026.

## Wat je nodig hebt

| Eigenschap | Waarde |
| --- | --- |
| Node.js | 18 of nieuwer, ES-modules (`.mjs` of `"type": "module"`) |
| Pakket | `openai` (officieel) |
| Base URL | `https://llmwithcrypto.com/api/v1` |
| Key | In de omgevingsvariabele `LLMWITHCRYPTO_API_KEY`, nooit in de code of de browser |

## Hoe verstuur ik één zoekopdracht?

Maak de client één keer aan bij het opstarten en hergebruik hem overal. Houd de sleutel op de server: een sleutel die in browsercode meegaat, kan door iedereen die de pagina opent worden gelezen, dus roep de API aan vanuit je backend en stuur alleen het antwoord naar de browser.

*one-call.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-v4-pro',
  messages: [
    { role: 'system', content: 'Answer in two sentences.' },
    { role: 'user', content: 'What is a context window?' },
  ],
  max_tokens: 200,
});
console.log(resp.choices[0].message.content);
console.log(resp.usage.prompt_tokens, 'in,', resp.usage.completion_tokens, 'out');

```

## Hoe draai ik een batch zonder tegen de rate limit aan te lopen?

Draai een vast aantal zoekopdrachten tegelijk. De kleine helper `mapLimit` hieronder houdt er vier in de lucht en geeft de resultaten in volgorde terug; er is geen extra pakket nodig. Elk account heeft een limiet per minuut voor requests en tokens, te zien in het dashboard; vraag support en die kan worden verhoogd.

*batch.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

async function translate(text) {
  const resp = await client.chat.completions.create({
    model: 'qwen3-235b-a22b-instruct-2507',
    messages: [
      { role: 'system', content: 'Translate into Spanish. Reply with the translation only.' },
      { role: 'user', content: text },
    ],
    max_tokens: 200,
  });
  return resp.choices[0].message.content;
}

// at most 4 requests in flight
async function mapLimit(items, limit, fn) {
  const out = new Array(items.length);
  let next = 0;
  async function worker() {
    while (next < items.length) {
      const i = next++;
      out[i] = await fn(items[i]);
    }
  }
  await Promise.all(Array.from({ length: limit }, worker));
  return out;
}

const lines = ['Your order has shipped.', 'Your payment was received.', 'Your key was revoked.'];
console.log(await mapLimit(lines, 4, translate));

```

## Hoe stream ik het antwoord?

Geef `stream: true` mee en gebruik `for await` op het resultaat. Elk chunk bevat een stukje tekst in `choices[0].delta.content`; met `stream_options: { include_usage: true }` bevat het laatste chunk de tokenaantallen.

*stream.mjs*

```javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://llmwithcrypto.com/api/v1',
  apiKey: process.env.LLMWITHCRYPTO_API_KEY,
});

const stream = await client.chat.completions.create({
  model: 'deepseek-v4.1-flash',
  messages: [{ role: 'user', content: 'Write a haiku about latency.' }],
  stream: true,
  stream_options: { include_usage: true },
  max_tokens: 120,
});
for await (const chunk of stream) {
  const text = chunk.choices[0]?.delta?.content;
  if (text) process.stdout.write(text);
  if (chunk.usage) console.log(`\n${chunk.usage.prompt_tokens} in, ${chunk.usage.completion_tokens} out`);
}

```

## Hoe lees ik de resterende credits?

Het credits-endpoint hoort niet bij de OpenAI SDK, dus roep je het aan met `fetch`. Het is gratis; roep het aan vóór een grote batch om te controleren of de credits ervoor toereikend zijn.

*credits.mjs*

```javascript
const res = await fetch('https://llmwithcrypto.com/api/v1/credits', {
  headers: { Authorization: `Bearer ${process.env.LLMWITHCRYPTO_API_KEY}` },
});
const credits = await res.json();
console.log('credit left:', credits.balance_usd, 'USD');

```

## Hoe ga ik om met fouten?

De SDK gooit een `OpenAI.APIError` bij elke HTTP-fout, met de status in `err.status` en de `code` van de body in `err.code`. Test op de code, niet op het bericht: `insufficient_balance` betekent saldo opwaarderen, `model_not_found` betekent een verkeerd id, `rate_limit_exceeded` betekent wachten en opnieuw proberen.

De SDK probeert sommige fouten al twee keer opnieuw met een pauze (`maxRetries`). Houd bij lange batches die standaard aan, begrens de concurrency zoals hierboven, en log de fouten die je opgeeft. De [foutenpagina](https://llmwithcrypto.com/nl/docs/errors/)] noemt elke status en welke een nieuwe poging waard zijn. Mislukte aanroepen kosten niets: Je betaalt per token vanaf je saldo: input- en outputtokens worden geteld door de tokenizer van het model zelf en afgerekend tegen de prijs van dat model per 1M tokens. Een call die op een fout eindigt, kost niets.

## Hoe verhuis ik een bestaande OpenAI-app?

Wijzig de client-opties, `baseURL` en `apiKey`, en vervang elke `gpt-…`-modelnaam door een id van de [modellenpagina](https://llmwithcrypto.com/nl/models/)]. Prompts, streamingcode en het parsen van `choices` en `usage` blijven zoals ze zijn. Draai je tests op het nieuwe model voordat je het verkeer omzet: tool calling en JSON-output volgen wat elk model ondersteunt.

## Node.js: veelgestelde vragen

### Kan ik de API vanuit de browser aanroepen?

Technisch kan dat, maar nooit met je sleutel in de pagina. Roep de API aan vanuit je server, of vanuit een serverless function die de sleutel bevat.

### Werkt de Vercel AI SDK?

Elke library die een OpenAI-compatibele base URL accepteert, werkt. De API spreekt het OpenAI chat completions-formaat: richt de OpenAI SDK, LangChain of elk OpenAI-compatibel hulpmiddel op onze base URL met je sleutel, en verander de modelnaam.

### Wat gebeurt er als de credits op zijn?

Aanroepen geven `402 insufficient_balance` terug en kosten niets. De [foutenpagina](https://llmwithcrypto.com/nl/docs/errors/)] laat zien hoe je moet reageren.

---

LLMwithCrypto: LLMwithCrypto is een OpenAI-compatibele LLM API voor open-weight modellen — DeepSeek V4 Pro, DeepSeek V4.1 Flash, DeepSeek R1, Qwen3.5 397B A17B, Qwen3 235B A22B Instruct, gpt-oss-120b, gpt-oss-20b, GLM-4.7, Llama 3.3 70B Instruct, Gemma 4 31B, Mistral Large 3, Mistral Small 4 — betaald per token vanaf een prepaid crypto-saldo, tegen 5% onder de mediane prijs van de publieke hosts. Zonder KYC: geen ID, geen selfie, geen documenten. Prompts en outputs worden niet opgeslagen.
