Saying hi to Claude might warm your heart, but it's not really useful. In this lesson we'll send Claude something real and get structured insight back — in just under 20 lines of code.
First, grab an API key from platform.claude.com. You'll need to purchase some credits beforehand.
Take the API key and store it in a .env.local file so it stays out of your version control. Hardcoding keys in source files is how they end up leaked on GitHub — keep them in environment files instead.
Next, install the SDK:
npm install @anthropic-ai/sdk
Every API call goes through the messages.create function. You specify three things:
user or assistant roles, structured similarly to how you'd have a conversation with Claude elsewhereHere's what that looks like in its most basic form:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const msg = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 2048,
messages: [{
role: "user",
content: "Hello, Claude",
}],
});
Let's give Claude something a little more interesting than "hello." We'll point it at some buggy code and ask for a review. Here's the whole thing — one file, about 20 lines of code:
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const buggyCode = `
function add(a, b) {
return a - b;
}
`;
const response = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 2048,
system: "You are a terse senior code reviewer. Give feedback in one paragraph.",
messages: [
{ role: "user", content: `Review this code:\n${buggyCode}` },
],
});
for (const block of response.content) {
if (block.type === "text") {
console.log(block.text);
}
}
Two things to notice here:
system prompt is where you shape the persona. I want a terse senior reviewer, not a chatty one — so I just say that.message.content in the response is an array of blocks, not a string. For a basic text reply there's usually just one block of type text, but Claude can return multiple blocks — text, tool calls, thinking — so we always loop and check the type.Run it, and Claude spots that add is subtracting and tells you in one paragraph. That's it. That's the whole API call.
In a real product, this same messages.create shape is the engine behind something like a summarize endpoint. Pull a meeting transcript out of the database, hand it to Claude with a system prompt that says "extract insights and risks," save the result back on the row, and return it to the UI. It's the same call — just wrapped in a route handler.
messages.create function with a model, a token limit, and messages..env.local file to keep it out of version control.content is an array of blocks — loop and check each block's type.Iniciar sesión unirse a la discusión