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/sdkBasic 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.