Claude API with Node.js

Use the official @anthropic-ai/sdk with Lumosel. The SDK works unchanged — just point baseURL at Lumosel and use your API key.

Installation

npm install @anthropic-ai/sdk

Basic request

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://api.lumosel.vip",
  apiKey: "YOUR_API_KEY",
});

const msg = await client.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello, Claude" }],
});

console.log(msg.content);

Streaming

const stream = client.messages.stream({
  model: "claude-opus-4-8",
  max_tokens: 4096,
  messages: [{ role: "user", content: "Write a short story" }],
});

for await (const event of stream) {
  if (
    event.type === "content_block_delta" &&
    event.delta.type === "text_delta"
  ) {
    process.stdout.write(event.delta.text);
  }
}

const finalMessage = await stream.finalMessage();
console.log("Tokens used:", finalMessage.usage.output_tokens);

TypeScript types

import Anthropic from "@anthropic-ai/sdk";

const messages: Anthropic.MessageParam[] = [
  { role: "user", content: "Hello" },
];

const response = await client.messages.create({
  model: "claude-opus-4-8",
  max_tokens: 1024,
  messages,
});

// Narrow by type before accessing .text
for (const block of response.content) {
  if (block.type === "text") {
    console.log(block.text);
  }
}

Error handling

import Anthropic from "@anthropic-ai/sdk";

try {
  const msg = await client.messages.create({...});
} catch (error) {
  if (error instanceof Anthropic.RateLimitError) {
    console.error("Rate limited — retry later");
  } else if (error instanceof Anthropic.APIError) {
    console.error(`API error ${error.status}: ${error.message}`);
  }
}

Ready to code?

Get your API key and make your first Node.js request in under a minute.

Start free trial →