The Models API provides information about available Claude models, including their capabilities, context windows, and creation dates.
class Models extends APIResource {
retrieve(modelID: string, params?: ModelRetrieveParams): APIPromise<ModelInfo>;
list(params?: ModelListParams): ModelInfosPage;
}Access via:
client.models.* // Standard API
client.beta.models.* // Beta APIinterface ModelInfo {
type: 'model';
id: string;
display_name: string;
created_at: string;
}client.models.retrieve(
modelID: string,
params?: ModelRetrieveParams
): APIPromise<ModelInfo>;
interface ModelRetrieveParams {
betas?: AnthropicBeta[];
}Example:
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic();
const model = await client.models.retrieve('claude-sonnet-4-5-20250929');
console.log('Model ID:', model.id);
console.log('Display name:', model.display_name);
console.log('Created at:', model.created_at);client.models.list(
params?: ModelListParams
): ModelInfosPage;
interface ModelListParams {
before_id?: string;
after_id?: string;
limit?: number; // Default: 20, max: 1000
betas?: AnthropicBeta[];
}Example:
// List all available models
const models = await client.models.list();
for (const model of models.data) {
console.log(`${model.display_name} (${model.id})`);
}
// Auto-pagination
for await (const model of client.models.list({ limit: 100 })) {
console.log(model.id);
}model: 'claude-opus-4-5-20250514'model: 'claude-sonnet-4-5-20250929'model: 'claude-3-5-sonnet-20241022'model: 'claude-3-5-haiku-20241022'model: 'claude-3-opus-20240229' // Most capable (previous generation)
model: 'claude-3-sonnet-20240229' // Balanced (previous generation)
model: 'claude-3-haiku-20240307' // Fast (previous generation)Choose based on your needs:
const message = await client.messages.create({
model: 'claude-opus-4-5-20250514',
max_tokens: 4096,
messages: [{
role: 'user',
content: 'Provide a detailed analysis of quantum computing trends...',
}],
});Use for:
const message = await client.messages.create({
model: 'claude-sonnet-4-5-20250929',
max_tokens: 2048,
messages: [{
role: 'user',
content: 'Help me debug this code...',
}],
});Use for:
const message = await client.messages.create({
model: 'claude-3-5-haiku-20241022',
max_tokens: 1024,
messages: [{
role: 'user',
content: 'What is 2+2?',
}],
});Use for:
function selectModel(complexity: 'simple' | 'moderate' | 'complex'): string {
switch (complexity) {
case 'simple':
return 'claude-3-5-haiku-20241022';
case 'moderate':
return 'claude-sonnet-4-5-20250929';
case 'complex':
return 'claude-opus-4-5-20250514';
}
}
const model = selectModel('moderate');
const message = await client.messages.create({
model,
max_tokens: 1024,
messages: [{ role: 'user', content: 'Task...' }],
});Access beta models with beta headers:
const model = await client.beta.models.retrieve(
'claude-sonnet-4-5-20250929',
{
betas: ['extended-thinking-2025-05-14'],
}
);Models are deprecated over time. The SDK will warn when using deprecated models:
// Using deprecated model
const message = await client.messages.create({
model: 'claude-2.1', // Deprecated model
max_tokens: 1024,
messages: [{ role: 'user', content: 'Hello' }],
});
// Console warning:
// "The model 'claude-2.1' is deprecated and will reach end-of-life on 2024-12-31
// Please migrate to a newer model. Visit https://docs.anthropic.com/..."All current models support 200K token context windows:
// You can use large context
const message = await client.messages.create({
model: 'claude-sonnet-4-5-20250929',
max_tokens: 4096,
system: largeSystemPrompt, // Can be very large
messages: longConversation, // Many turns
});
// Count tokens first
const count = await client.messages.countTokens({
model: 'claude-sonnet-4-5-20250929',
system: largeSystemPrompt,
messages: longConversation,
});
console.log('Input tokens:', count.input_tokens);
// Ensure: count.input_tokens + max_tokens <= 200000// ✅ Good: Choose based on task
async function processTask(task: Task) {
let model: string;
if (task.requiresDeepReasoning) {
model = 'claude-opus-4-5-20250514';
} else if (task.isSimple) {
model = 'claude-3-5-haiku-20241022';
} else {
model = 'claude-sonnet-4-5-20250929'; // Default
}
return client.messages.create({ model, /* ... */ });
}
// ❌ Bad: Always using most expensive model
async function processTask(task: Task) {
return client.messages.create({
model: 'claude-opus-4-5-20250514', // Overkill for simple tasks
/* ... */
});
}// ✅ Good: Use appropriate model for workload
const simpleQueries = tasks.filter(t => t.complexity === 'simple');
const complexQueries = tasks.filter(t => t.complexity === 'complex');
// Process simple with Haiku (cheaper)
for (const task of simpleQueries) {
await client.messages.create({
model: 'claude-3-5-haiku-20241022',
/* ... */
});
}
// Process complex with Opus (necessary)
for (const task of complexQueries) {
await client.messages.create({
model: 'claude-opus-4-5-20250514',
/* ... */
});
}// ✅ Good: Validate model exists
async function createMessage(model: string, content: string) {
try {
await client.models.retrieve(model);
} catch (error) {
if (error instanceof Anthropic.NotFoundError) {
console.error(`Model ${model} not found`);
model = 'claude-sonnet-4-5-20250929'; // Fallback
}
}
return client.messages.create({ model, /* ... */ });
}