@anthropic-ai/sdk
Version:
The official TypeScript library for the Anthropic API
1,442 lines • 155 kB
TypeScript
import * as BatchesAPI from "./batches.js";
import { APIPromise } from "../../../core/api-promise.js";
import { APIResource } from "../../../core/resource.js";
import { Stream } from "../../../core/streaming.js";
import { RequestOptions } from "../../../internal/request-options.js";
import { type ExtractParsedContentFromBetaParams, type ParsedBetaMessage } from "../../../lib/beta-parser.js";
import { BetaMessageStream } from "../../../lib/BetaMessageStream.js";
import { BetaToolRunner, BetaToolRunnerParams, BetaToolRunnerRequestOptions } from "../../../lib/tools/BetaToolRunner.js";
import { ToolError } from "../../../lib/tools/ToolError.js";
import * as BetaMessagesAPI from "./messages.js";
import * as MessagesAPI from "../../messages/messages.js";
import * as BetaAPI from "../beta.js";
import { BatchCancelParams, BatchCreateParams, BatchDeleteParams, BatchListParams, BatchResultsParams, BatchRetrieveParams, Batches, BetaDeletedMessageBatch, BetaMessageBatch, BetaMessageBatchCanceledResult, BetaMessageBatchErroredResult, BetaMessageBatchExpiredResult, BetaMessageBatchIndividualResponse, BetaMessageBatchRequestCounts, BetaMessageBatchResult, BetaMessageBatchSucceededResult, BetaMessageBatchesPage } from "./batches.js";
export declare class Messages extends APIResource {
batches: BatchesAPI.Batches;
/**
* Send a structured list of input messages with text and/or image content, and the
* model will generate the next message in the conversation.
*
* The Messages API can be used for either single queries or stateless multi-turn
* conversations.
*
* Learn more about the Messages API in our
* [user guide](https://platform.claude.com/docs/en/get-started)
*
* @example
* ```ts
* const betaMessage = await client.beta.messages.create({
* max_tokens: 1024,
* messages: [{ content: 'Hello, world', role: 'user' }],
* model: 'claude-opus-4-6',
* });
* ```
*/
create(params: MessageCreateParamsNonStreaming, options?: RequestOptions): APIPromise<BetaMessage>;
create(params: MessageCreateParamsStreaming, options?: RequestOptions): APIPromise<Stream<BetaRawMessageStreamEvent>>;
create(params: MessageCreateParamsBase, options?: RequestOptions): APIPromise<Stream<BetaRawMessageStreamEvent> | BetaMessage>;
/**
* Send a structured list of input messages with text and/or image content, along with an expected `output_format` and
* the response will be automatically parsed and available in the `parsed_output` property of the message.
*
* @example
* ```ts
* const message = await client.beta.messages.parse({
* model: 'claude-3-5-sonnet-20241022',
* max_tokens: 1024,
* messages: [{ role: 'user', content: 'What is 2+2?' }],
* output_format: zodOutputFormat(z.object({ answer: z.number() }), 'math'),
* });
*
* console.log(message.parsed_output?.answer); // 4
* ```
*/
parse<Params extends MessageCreateParamsNonStreaming>(params: Params, options?: RequestOptions): APIPromise<ParsedBetaMessage<ExtractParsedContentFromBetaParams<Params>>>;
/**
* Create a Message stream
*/
stream<Params extends BetaMessageStreamParams>(body: Params, options?: RequestOptions): BetaMessageStream<ExtractParsedContentFromBetaParams<Params>>;
/**
* Count the number of tokens in a Message.
*
* The Token Count API can be used to count the number of tokens in a Message,
* including tools, images, and documents, without creating it.
*
* Learn more about token counting in our
* [user guide](https://platform.claude.com/docs/en/build-with-claude/token-counting)
*
* @example
* ```ts
* const betaMessageTokensCount =
* await client.beta.messages.countTokens({
* messages: [{ content: 'Hello, world', role: 'user' }],
* model: 'claude-opus-4-6',
* });
* ```
*/
countTokens(params: MessageCountTokensParams, options?: RequestOptions): APIPromise<BetaMessageTokensCount>;
toolRunner(body: BetaToolRunnerParams & {
stream?: false;
}, options?: BetaToolRunnerRequestOptions): BetaToolRunner<false>;
toolRunner(body: BetaToolRunnerParams & {
stream: true;
}, options?: BetaToolRunnerRequestOptions): BetaToolRunner<true>;
toolRunner(body: BetaToolRunnerParams, options?: BetaToolRunnerRequestOptions): BetaToolRunner<boolean>;
}
/**
* Token usage for an advisor sub-inference iteration.
*/
export interface BetaAdvisorMessageIterationUsage {
/**
* Breakdown of cached tokens by TTL
*/
cache_creation: BetaCacheCreation | null;
/**
* The number of input tokens used to create the cache entry.
*/
cache_creation_input_tokens: number;
/**
* The number of input tokens read from the cache.
*/
cache_read_input_tokens: number;
/**
* The number of input tokens which were used.
*/
input_tokens: number;
/**
* The model that will complete your prompt.
*
* See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
* details and options.
*/
model: MessagesAPI.Model;
/**
* The number of output tokens which were used.
*/
output_tokens: number;
/**
* Usage for an advisor sub-inference iteration
*/
type: 'advisor_message';
}
export interface BetaAdvisorRedactedResultBlock {
/**
* Opaque blob containing the advisor's output. Round-trip verbatim; do not inspect
* or modify.
*/
encrypted_content: string;
/**
* The advisor sub-inference's stop reason (same values as the top-level message
* `stop_reason`).
*/
stop_reason: string | null;
type: 'advisor_redacted_result';
}
export interface BetaAdvisorRedactedResultBlockParam {
/**
* Opaque blob produced by a prior response; must be round-tripped verbatim.
*/
encrypted_content: string;
type: 'advisor_redacted_result';
stop_reason?: string | null;
}
export interface BetaAdvisorResultBlock {
/**
* The advisor sub-inference's stop reason (same values as the top-level message
* `stop_reason`). `max_tokens` indicates the advisor's output was truncated at the
* tool's `max_tokens` value or the advisor model's policy cap.
*/
stop_reason: string | null;
text: string;
type: 'advisor_result';
}
export interface BetaAdvisorResultBlockParam {
text: string;
type: 'advisor_result';
stop_reason?: string | null;
}
export interface BetaAdvisorTool20260301 {
/**
* The model that will complete your prompt.
*
* See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
* details and options.
*/
model: MessagesAPI.Model;
/**
* Name of the tool.
*
* This is how the tool will be called by the model and in `tool_use` blocks.
*/
name: 'advisor';
type: 'advisor_20260301';
allowed_callers?: Array<'direct' | 'code_execution_20250825' | 'code_execution_20260120' | 'code_execution_20260521'>;
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
/**
* Caching for the advisor's own prompt. When set, each advisor call writes a cache
* entry at the given TTL so subsequent calls in the same conversation read the
* stable prefix. When omitted, the advisor prompt is not cached.
*/
caching?: BetaCacheControlEphemeral | null;
/**
* If true, tool will not be included in initial system prompt. Only loaded when
* returned via tool_reference from tool search.
*/
defer_loading?: boolean;
/**
* Bounds the advisor's total output (thinking + text) per call. When the advisor
* hits this cap, the returned advisor_result or advisor_redacted_result block
* carries stop_reason='max_tokens', and a truncation note is appended to the
* advice text the worker model sees (inside the encrypted blob in redacted mode).
* When set, the server also emits a remaining-tokens budget block in the advisor's
* prompt so the advisor self-shapes toward the cap. When omitted, the advisor
* model's default output cap applies and no budget block is emitted.
*/
max_tokens?: number | null;
/**
* Maximum number of times the tool can be used in the API request.
*/
max_uses?: number | null;
/**
* When true, guarantees schema validation on tool names and inputs
*/
strict?: boolean;
}
export interface BetaAdvisorToolResultBlock {
content: BetaAdvisorToolResultError | BetaAdvisorResultBlock | BetaAdvisorRedactedResultBlock;
tool_use_id: string;
type: 'advisor_tool_result';
}
export interface BetaAdvisorToolResultBlockParam {
content: BetaAdvisorToolResultErrorParam | BetaAdvisorResultBlockParam | BetaAdvisorRedactedResultBlockParam;
tool_use_id: string;
type: 'advisor_tool_result';
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
}
export interface BetaAdvisorToolResultError {
error_code: 'max_uses_exceeded' | 'prompt_too_long' | 'too_many_requests' | 'overloaded' | 'unavailable' | 'execution_time_exceeded' | 'model_not_found';
type: 'advisor_tool_result_error';
}
export interface BetaAdvisorToolResultErrorParam {
error_code: 'max_uses_exceeded' | 'prompt_too_long' | 'too_many_requests' | 'overloaded' | 'unavailable' | 'execution_time_exceeded' | 'model_not_found';
type: 'advisor_tool_result_error';
}
export interface BetaAllThinkingTurns {
type: 'all';
}
export type BetaMessageStreamParams = MessageCreateParamsBase;
export interface BetaBase64ImageSource {
data: string;
media_type: 'image/jpeg' | 'image/png' | 'image/gif' | 'image/webp';
type: 'base64';
}
export interface BetaBase64PDFSource {
data: string;
media_type: 'application/pdf';
type: 'base64';
}
export interface BetaBashCodeExecutionOutputBlock {
file_id: string;
type: 'bash_code_execution_output';
}
export interface BetaBashCodeExecutionOutputBlockParam {
file_id: string;
type: 'bash_code_execution_output';
}
export interface BetaBashCodeExecutionResultBlock {
content: Array<BetaBashCodeExecutionOutputBlock>;
return_code: number;
stderr: string;
stdout: string;
type: 'bash_code_execution_result';
}
export interface BetaBashCodeExecutionResultBlockParam {
content: Array<BetaBashCodeExecutionOutputBlockParam>;
return_code: number;
stderr: string;
stdout: string;
type: 'bash_code_execution_result';
}
export interface BetaBashCodeExecutionToolResultBlock {
content: BetaBashCodeExecutionToolResultError | BetaBashCodeExecutionResultBlock;
tool_use_id: string;
type: 'bash_code_execution_tool_result';
}
export interface BetaBashCodeExecutionToolResultBlockParam {
content: BetaBashCodeExecutionToolResultErrorParam | BetaBashCodeExecutionResultBlockParam;
tool_use_id: string;
type: 'bash_code_execution_tool_result';
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
}
export interface BetaBashCodeExecutionToolResultError {
error_code: 'invalid_tool_input' | 'unavailable' | 'too_many_requests' | 'execution_time_exceeded' | 'output_file_too_large';
type: 'bash_code_execution_tool_result_error';
}
export interface BetaBashCodeExecutionToolResultErrorParam {
error_code: 'invalid_tool_input' | 'unavailable' | 'too_many_requests' | 'execution_time_exceeded' | 'output_file_too_large';
type: 'bash_code_execution_tool_result_error';
}
export interface BetaCacheControlEphemeral {
type: 'ephemeral';
/**
* The time-to-live for the cache control breakpoint.
*
* This may be one the following values:
*
* - `5m`: 5 minutes
* - `1h`: 1 hour
*
* Defaults to `5m`. See
* [prompt caching pricing](https://platform.claude.com/docs/en/build-with-claude/prompt-caching)
* for details.
*/
ttl?: '5m' | '1h';
}
export interface BetaCacheCreation {
/**
* The number of input tokens used to create the 1 hour cache entry.
*/
ephemeral_1h_input_tokens: number;
/**
* The number of input tokens used to create the 5 minute cache entry.
*/
ephemeral_5m_input_tokens: number;
}
export interface BetaCacheMissMessagesChanged {
/**
* Approximate number of input tokens that would have been read from cache had the
* prefix matched the previous request.
*/
cache_missed_input_tokens: number;
type: 'messages_changed';
}
export interface BetaCacheMissModelChanged {
/**
* Approximate number of input tokens that would have been read from cache had the
* prefix matched the previous request.
*/
cache_missed_input_tokens: number;
type: 'model_changed';
}
export interface BetaCacheMissPreviousMessageNotFound {
type: 'previous_message_not_found';
}
export interface BetaCacheMissSystemChanged {
/**
* Approximate number of input tokens that would have been read from cache had the
* prefix matched the previous request.
*/
cache_missed_input_tokens: number;
type: 'system_changed';
}
export interface BetaCacheMissToolsChanged {
/**
* Approximate number of input tokens that would have been read from cache had the
* prefix matched the previous request.
*/
cache_missed_input_tokens: number;
type: 'tools_changed';
}
export interface BetaCacheMissUnavailable {
type: 'unavailable';
}
export interface BetaCitationCharLocation {
cited_text: string;
document_index: number;
document_title: string | null;
end_char_index: number;
file_id: string | null;
start_char_index: number;
type: 'char_location';
}
export interface BetaCitationCharLocationParam {
cited_text: string;
document_index: number;
document_title: string | null;
end_char_index: number;
start_char_index: number;
type: 'char_location';
}
export interface BetaCitationConfig {
enabled: boolean;
}
export interface BetaCitationContentBlockLocation {
/**
* The full text of the cited block range, concatenated.
*
* Always equals the contents of `content[start_block_index:end_block_index]`
* joined together. The text block is the minimal citable unit; this field is never
* a substring of a single block. Not counted toward output tokens, and not counted
* toward input tokens when sent back in subsequent turns.
*/
cited_text: string;
document_index: number;
document_title: string | null;
/**
* Exclusive 0-based end index of the cited block range in the source's `content`
* array.
*
* Always greater than `start_block_index`; a single-block citation has
* `end_block_index = start_block_index + 1`.
*/
end_block_index: number;
file_id: string | null;
/**
* 0-based index of the first cited block in the source's `content` array.
*/
start_block_index: number;
type: 'content_block_location';
}
export interface BetaCitationContentBlockLocationParam {
/**
* The full text of the cited block range, concatenated.
*
* Always equals the contents of `content[start_block_index:end_block_index]`
* joined together. The text block is the minimal citable unit; this field is never
* a substring of a single block. Not counted toward output tokens, and not counted
* toward input tokens when sent back in subsequent turns.
*/
cited_text: string;
document_index: number;
document_title: string | null;
/**
* Exclusive 0-based end index of the cited block range in the source's `content`
* array.
*
* Always greater than `start_block_index`; a single-block citation has
* `end_block_index = start_block_index + 1`.
*/
end_block_index: number;
/**
* 0-based index of the first cited block in the source's `content` array.
*/
start_block_index: number;
type: 'content_block_location';
}
export interface BetaCitationPageLocation {
cited_text: string;
document_index: number;
document_title: string | null;
end_page_number: number;
file_id: string | null;
start_page_number: number;
type: 'page_location';
}
export interface BetaCitationPageLocationParam {
cited_text: string;
document_index: number;
document_title: string | null;
end_page_number: number;
start_page_number: number;
type: 'page_location';
}
export interface BetaCitationSearchResultLocation {
/**
* The full text of the cited block range, concatenated.
*
* Always equals the contents of `content[start_block_index:end_block_index]`
* joined together. The text block is the minimal citable unit; this field is never
* a substring of a single block. Not counted toward output tokens, and not counted
* toward input tokens when sent back in subsequent turns.
*/
cited_text: string;
/**
* Exclusive 0-based end index of the cited block range in the source's `content`
* array.
*
* Always greater than `start_block_index`; a single-block citation has
* `end_block_index = start_block_index + 1`.
*/
end_block_index: number;
/**
* 0-based index of the cited search result among all `search_result` content
* blocks in the request, in the order they appear across messages and tool
* results.
*
* Counted separately from `document_index`; server-side web search results are not
* included in this count.
*/
search_result_index: number;
source: string;
/**
* 0-based index of the first cited block in the source's `content` array.
*/
start_block_index: number;
title: string | null;
type: 'search_result_location';
}
export interface BetaCitationSearchResultLocationParam {
/**
* The full text of the cited block range, concatenated.
*
* Always equals the contents of `content[start_block_index:end_block_index]`
* joined together. The text block is the minimal citable unit; this field is never
* a substring of a single block. Not counted toward output tokens, and not counted
* toward input tokens when sent back in subsequent turns.
*/
cited_text: string;
/**
* Exclusive 0-based end index of the cited block range in the source's `content`
* array.
*
* Always greater than `start_block_index`; a single-block citation has
* `end_block_index = start_block_index + 1`.
*/
end_block_index: number;
/**
* 0-based index of the cited search result among all `search_result` content
* blocks in the request, in the order they appear across messages and tool
* results.
*
* Counted separately from `document_index`; server-side web search results are not
* included in this count.
*/
search_result_index: number;
source: string;
/**
* 0-based index of the first cited block in the source's `content` array.
*/
start_block_index: number;
title: string | null;
type: 'search_result_location';
}
export interface BetaCitationWebSearchResultLocationParam {
cited_text: string;
encrypted_index: string;
title: string | null;
type: 'web_search_result_location';
url: string;
}
export interface BetaCitationsConfigParam {
enabled?: boolean;
}
export interface BetaCitationsDelta {
citation: BetaCitationCharLocation | BetaCitationPageLocation | BetaCitationContentBlockLocation | BetaCitationsWebSearchResultLocation | BetaCitationSearchResultLocation;
type: 'citations_delta';
}
export interface BetaCitationsWebSearchResultLocation {
cited_text: string;
encrypted_index: string;
title: string | null;
type: 'web_search_result_location';
url: string;
}
export interface BetaClearThinking20251015Edit {
type: 'clear_thinking_20251015';
/**
* Number of most recent assistant turns to keep thinking blocks for. Older turns
* will have their thinking blocks removed.
*/
keep?: BetaThinkingTurns | BetaAllThinkingTurns | 'all';
}
export interface BetaClearThinking20251015EditResponse {
/**
* Number of input tokens cleared by this edit.
*/
cleared_input_tokens: number;
/**
* Number of thinking turns that were cleared.
*/
cleared_thinking_turns: number;
/**
* The type of context management edit applied.
*/
type: 'clear_thinking_20251015';
}
export interface BetaClearToolUses20250919Edit {
type: 'clear_tool_uses_20250919';
/**
* Minimum number of tokens that must be cleared when triggered. Context will only
* be modified if at least this many tokens can be removed.
*/
clear_at_least?: BetaInputTokensClearAtLeast | null;
/**
* Whether to clear all tool inputs (bool) or specific tool inputs to clear (list)
*/
clear_tool_inputs?: boolean | Array<string> | null;
/**
* Tool names whose uses are preserved from clearing
*/
exclude_tools?: Array<string> | null;
/**
* Number of tool uses to retain in the conversation
*/
keep?: BetaToolUsesKeep;
/**
* Condition that triggers the context management strategy
*/
trigger?: BetaInputTokensTrigger | BetaToolUsesTrigger;
}
export interface BetaClearToolUses20250919EditResponse {
/**
* Number of input tokens cleared by this edit.
*/
cleared_input_tokens: number;
/**
* Number of tool uses that were cleared.
*/
cleared_tool_uses: number;
/**
* The type of context management edit applied.
*/
type: 'clear_tool_uses_20250919';
}
export interface BetaCodeExecutionOutputBlock {
file_id: string;
type: 'code_execution_output';
}
export interface BetaCodeExecutionOutputBlockParam {
file_id: string;
type: 'code_execution_output';
}
export interface BetaCodeExecutionResultBlock {
content: Array<BetaCodeExecutionOutputBlock>;
return_code: number;
stderr: string;
stdout: string;
type: 'code_execution_result';
}
export interface BetaCodeExecutionResultBlockParam {
content: Array<BetaCodeExecutionOutputBlockParam>;
return_code: number;
stderr: string;
stdout: string;
type: 'code_execution_result';
}
export interface BetaCodeExecutionTool20250522 {
/**
* Name of the tool.
*
* This is how the tool will be called by the model and in `tool_use` blocks.
*/
name: 'code_execution';
type: 'code_execution_20250522';
allowed_callers?: Array<'direct' | 'code_execution_20250825' | 'code_execution_20260120' | 'code_execution_20260521'>;
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
/**
* If true, tool will not be included in initial system prompt. Only loaded when
* returned via tool_reference from tool search.
*/
defer_loading?: boolean;
/**
* When true, guarantees schema validation on tool names and inputs
*/
strict?: boolean;
}
export interface BetaCodeExecutionTool20250825 {
/**
* Name of the tool.
*
* This is how the tool will be called by the model and in `tool_use` blocks.
*/
name: 'code_execution';
type: 'code_execution_20250825';
allowed_callers?: Array<'direct' | 'code_execution_20250825' | 'code_execution_20260120' | 'code_execution_20260521'>;
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
/**
* If true, tool will not be included in initial system prompt. Only loaded when
* returned via tool_reference from tool search.
*/
defer_loading?: boolean;
/**
* When true, guarantees schema validation on tool names and inputs
*/
strict?: boolean;
}
/**
* Code execution tool with REPL state persistence (daemon mode + gVisor
* checkpoint).
*/
export interface BetaCodeExecutionTool20260120 {
/**
* Name of the tool.
*
* This is how the tool will be called by the model and in `tool_use` blocks.
*/
name: 'code_execution';
type: 'code_execution_20260120';
allowed_callers?: Array<'direct' | 'code_execution_20250825' | 'code_execution_20260120' | 'code_execution_20260521'>;
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
/**
* If true, tool will not be included in initial system prompt. Only loaded when
* returned via tool_reference from tool search.
*/
defer_loading?: boolean;
/**
* When true, guarantees schema validation on tool names and inputs
*/
strict?: boolean;
}
/**
* Code execution tool with REPL state persistence.
*/
export interface BetaCodeExecutionTool20260521 {
/**
* Name of the tool.
*
* This is how the tool will be called by the model and in `tool_use` blocks.
*/
name: 'code_execution';
type: 'code_execution_20260521';
allowed_callers?: Array<'direct' | 'code_execution_20250825' | 'code_execution_20260120' | 'code_execution_20260521'>;
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
/**
* If true, tool will not be included in initial system prompt. Only loaded when
* returned via tool_reference from tool search.
*/
defer_loading?: boolean;
/**
* When true, guarantees schema validation on tool names and inputs
*/
strict?: boolean;
}
export interface BetaCodeExecutionToolResultBlock {
/**
* Code execution result with encrypted stdout for PFC + web_search results.
*/
content: BetaCodeExecutionToolResultBlockContent;
tool_use_id: string;
type: 'code_execution_tool_result';
}
/**
* Code execution result with encrypted stdout for PFC + web_search results.
*/
export type BetaCodeExecutionToolResultBlockContent = BetaCodeExecutionToolResultError | BetaCodeExecutionResultBlock | BetaEncryptedCodeExecutionResultBlock;
export interface BetaCodeExecutionToolResultBlockParam {
/**
* Code execution result with encrypted stdout for PFC + web_search results.
*/
content: BetaCodeExecutionToolResultBlockParamContent;
tool_use_id: string;
type: 'code_execution_tool_result';
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
}
/**
* Code execution result with encrypted stdout for PFC + web_search results.
*/
export type BetaCodeExecutionToolResultBlockParamContent = BetaCodeExecutionToolResultErrorParam | BetaCodeExecutionResultBlockParam | BetaEncryptedCodeExecutionResultBlockParam;
export interface BetaCodeExecutionToolResultError {
error_code: BetaCodeExecutionToolResultErrorCode;
type: 'code_execution_tool_result_error';
}
export type BetaCodeExecutionToolResultErrorCode = 'invalid_tool_input' | 'unavailable' | 'too_many_requests' | 'execution_time_exceeded';
export interface BetaCodeExecutionToolResultErrorParam {
error_code: BetaCodeExecutionToolResultErrorCode;
type: 'code_execution_tool_result_error';
}
/**
* Automatically compact older context when reaching the configured trigger
* threshold.
*/
export interface BetaCompact20260112Edit {
type: 'compact_20260112';
/**
* Additional instructions for summarization.
*/
instructions?: string | null;
/**
* Whether to pause after compaction and return the compaction block to the user.
*/
pause_after_compaction?: boolean;
/**
* When to trigger compaction. Defaults to 150000 input tokens.
*/
trigger?: BetaInputTokensTrigger | null;
}
/**
* A compaction block returned when autocompact is triggered.
*
* When content is None, it indicates the compaction failed to produce a valid
* summary (e.g., malformed output from the model). Clients may round-trip
* compaction blocks with null content; the server treats them as no-ops.
*/
export interface BetaCompactionBlock {
/**
* Summary of compacted content, or null if compaction failed
*/
content: string | null;
/**
* Opaque metadata from prior compaction, to be round-tripped verbatim
*/
encrypted_content: string | null;
type: 'compaction';
}
/**
* A compaction block containing summary of previous context.
*
* Users should round-trip these blocks from responses to subsequent requests to
* maintain context across compaction boundaries.
*
* When content is None, the block represents a failed compaction. The server
* treats these as no-ops. Empty string content is not allowed.
*/
export interface BetaCompactionBlockParam {
type: 'compaction';
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
/**
* Summary of previously compacted content, or null if compaction failed
*/
content?: string | null;
/**
* Opaque metadata from prior compaction, to be round-tripped verbatim
*/
encrypted_content?: string | null;
}
export interface BetaCompactionContentBlockDelta {
content: string | null;
/**
* Opaque metadata from prior compaction, to be round-tripped verbatim
*/
encrypted_content: string | null;
type: 'compaction_delta';
}
/**
* Token usage for a compaction iteration.
*/
export interface BetaCompactionIterationUsage {
/**
* Breakdown of cached tokens by TTL
*/
cache_creation: BetaCacheCreation | null;
/**
* The number of input tokens used to create the cache entry.
*/
cache_creation_input_tokens: number;
/**
* The number of input tokens read from the cache.
*/
cache_read_input_tokens: number;
/**
* The number of input tokens which were used.
*/
input_tokens: number;
/**
* The number of output tokens which were used.
*/
output_tokens: number;
/**
* Usage for a compaction iteration
*/
type: 'compaction';
}
/**
* Information about the container used in the request (for the code execution
* tool)
*/
export interface BetaContainer {
/**
* Identifier for the container used in this request
*/
id: string;
/**
* The time at which the container will expire.
*/
expires_at: string;
/**
* Skills loaded in the container
*/
skills: Array<BetaSkill> | null;
}
/**
* Container parameters with skills to be loaded.
*/
export interface BetaContainerParams {
/**
* Container id
*/
id?: string | null;
/**
* List of skills to load in the container
*/
skills?: Array<BetaSkillParams> | null;
}
/**
* Response model for a file uploaded to the container.
*/
export interface BetaContainerUploadBlock {
file_id: string;
type: 'container_upload';
}
/**
* A content block that represents a file to be uploaded to the container Files
* uploaded via this block will be available in the container's input directory.
*/
export interface BetaContainerUploadBlockParam {
file_id: string;
type: 'container_upload';
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
}
/**
* Response model for a file uploaded to the container.
*/
export type BetaContentBlock = BetaTextBlock | BetaThinkingBlock | BetaRedactedThinkingBlock | BetaToolUseBlock | BetaServerToolUseBlock | BetaWebSearchToolResultBlock | BetaWebFetchToolResultBlock | BetaAdvisorToolResultBlock | BetaCodeExecutionToolResultBlock | BetaBashCodeExecutionToolResultBlock | BetaTextEditorCodeExecutionToolResultBlock | BetaToolSearchToolResultBlock | BetaMCPToolUseBlock | BetaMCPToolResultBlock | BetaContainerUploadBlock | BetaCompactionBlock | BetaFallbackBlock;
/**
* Regular text content.
*/
export type BetaContentBlockParam = BetaTextBlockParam | BetaImageBlockParam | BetaRequestDocumentBlock | BetaSearchResultBlockParam | BetaThinkingBlockParam | BetaRedactedThinkingBlockParam | BetaToolUseBlockParam | BetaToolResultBlockParam | BetaServerToolUseBlockParam | BetaWebSearchToolResultBlockParam | BetaWebFetchToolResultBlockParam | BetaAdvisorToolResultBlockParam | BetaCodeExecutionToolResultBlockParam | BetaBashCodeExecutionToolResultBlockParam | BetaTextEditorCodeExecutionToolResultBlockParam | BetaToolSearchToolResultBlockParam | BetaMCPToolUseBlockParam | BetaRequestMCPToolResultBlockParam | BetaContainerUploadBlockParam | BetaCompactionBlockParam | BetaMidConversationSystemBlockParam | BetaFallbackBlockParam;
export interface BetaContentBlockSource {
content: string | Array<BetaContentBlockSourceContent>;
type: 'content';
}
export type BetaContentBlockSourceContent = BetaTextBlockParam | BetaImageBlockParam;
export interface BetaContextManagementConfig {
/**
* List of context management edits to apply
*/
edits?: Array<BetaClearToolUses20250919Edit | BetaClearThinking20251015Edit | BetaCompact20260112Edit>;
}
export interface BetaContextManagementResponse {
/**
* List of context management edits that were applied.
*/
applied_edits: Array<BetaClearToolUses20250919EditResponse | BetaClearThinking20251015EditResponse>;
}
export interface BetaCountTokensContextManagementResponse {
/**
* The original token count before context management was applied
*/
original_input_tokens: number;
}
/**
* Response envelope for request-level diagnostics. Present (possibly null)
* whenever the caller supplied `diagnostics` on the request.
*/
export interface BetaDiagnostics {
/**
* Explains why the prompt cache could not fully reuse the prefix from the request
* identified by `diagnostics.previous_message_id`. `null` means diagnosis is still
* pending — the response was serialized before the background comparison
* completed.
*/
cache_miss_reason: BetaCacheMissModelChanged | BetaCacheMissSystemChanged | BetaCacheMissToolsChanged | BetaCacheMissMessagesChanged | BetaCacheMissPreviousMessageNotFound | BetaCacheMissUnavailable | null;
}
/**
* Request-level diagnostics. Currently carries the previous response id for
* prompt-cache divergence reporting.
*/
export interface BetaDiagnosticsParam {
/**
* The `id` (`msg_...`) from this client's previous /v1/messages response. The
* server compares that request's prompt fingerprint against this one and returns
* `diagnostics.cache_miss_reason` when the prompt-cache prefix could not be
* reused. Pass `null` on the first turn to opt in without a prior message to
* compare.
*/
previous_message_id?: string | null;
}
/**
* Tool invocation directly from the model.
*/
export interface BetaDirectCaller {
type: 'direct';
}
export interface BetaDocumentBlock {
/**
* Citation configuration for the document
*/
citations: BetaCitationConfig | null;
source: BetaBase64PDFSource | BetaPlainTextSource;
/**
* The title of the document
*/
title: string | null;
type: 'document';
}
/**
* Code execution result with encrypted stdout for PFC + web_search results.
*/
export interface BetaEncryptedCodeExecutionResultBlock {
content: Array<BetaCodeExecutionOutputBlock>;
encrypted_stdout: string;
return_code: number;
stderr: string;
type: 'encrypted_code_execution_result';
}
/**
* Code execution result with encrypted stdout for PFC + web_search results.
*/
export interface BetaEncryptedCodeExecutionResultBlockParam {
content: Array<BetaCodeExecutionOutputBlockParam>;
encrypted_stdout: string;
return_code: number;
stderr: string;
type: 'encrypted_code_execution_result';
}
/**
* Marks the point in `content` where one model's output gives way to the next.
*
* One block appears per hop where a preceding model actually ran this turn and
* declined. A turn where no preceding model ran and declined has no such boundary
* and carries no block — the signal for whether a fallback model served the
* response is the presence of a `fallback_message` entry in `usage.iterations`,
* not this block.
*
* The block is treated like a server-tool content block for streaming: it arrives
* via the standard `content_block_start` / `content_block_stop` pair and carries
* no deltas.
*/
export interface BetaFallbackBlock {
/**
* The model whose output ends at this point — the model that declined at this hop.
* When the declining hop is the requested model, its `model` echoes the top-level
* `model` string the caller sent (alias or canonical); when the declining hop is a
* fallback model, its `model` is that model's canonical id.
*/
from: BetaFallbackInfo;
/**
* The fallback model producing the content that follows this block. Its `model` is
* always the canonical id.
*/
to: BetaFallbackInfo;
/**
* What caused the `from` model to hand over at this hop.
*/
trigger: BetaFallbackRefusalTrigger;
type: 'fallback';
}
/**
* A `fallback` block echoed back from a prior response.
*
* Accepted in `messages[].content` and not rendered into the prompt; not validated
* against the request's `fallbacks` chain or top-level `model`.
*
* Echo the assistant turn back verbatim, including this block in its original
* position. The block marks the boundary between content produced before and after
* a fallback hop, and the server relies on that boundary to validate the turn:
* when thinking runs flank the boundary, omitting the block merges them into one
* span the server cannot validate (the request is rejected), and moving it into
* the middle of a single run is likewise rejected; between non-thinking blocks the
* block's placement has no validation effect.
*/
export interface BetaFallbackBlockParam {
/**
* Identifies one hop of a fallback transition.
*/
from: BetaFallbackInfoParam;
/**
* Identifies one hop of a fallback transition.
*/
to: BetaFallbackInfoParam;
type: 'fallback';
/**
* The response block's `trigger`, echoed verbatim. Accepted and ignored by the
* server; any object or `null` is allowed.
*/
trigger?: unknown;
}
/**
* Identifies one hop of a fallback transition.
*/
export interface BetaFallbackInfo {
/**
* The model that will complete your prompt.
*
* See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
* details and options.
*/
model: MessagesAPI.Model;
}
/**
* Identifies one hop of a fallback transition.
*/
export interface BetaFallbackInfoParam {
/**
* The model that will complete your prompt.
*
* See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
* details and options.
*/
model: MessagesAPI.Model;
}
/**
* Token usage for the fallback-model attempt of a server-side fallback request.
*
* Produced in place of a `message` entry for whichever hop served the response. A
* declined hop produces the existing `message` entry. Whether a fallback model
* served the response is signalled by the presence of this entry in
* `usage.iterations`.
*/
export interface BetaFallbackMessageIterationUsage {
/**
* Breakdown of cached tokens by TTL
*/
cache_creation: BetaCacheCreation | null;
/**
* The number of input tokens used to create the cache entry.
*/
cache_creation_input_tokens: number;
/**
* The number of input tokens read from the cache.
*/
cache_read_input_tokens: number;
/**
* The number of input tokens which were used.
*/
input_tokens: number;
/**
* The model that will complete your prompt.
*
* See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
* details and options.
*/
model: MessagesAPI.Model;
/**
* The number of output tokens which were used.
*/
output_tokens: number;
/**
* Usage for the fallback-model attempt that served the response
*/
type: 'fallback_message';
}
/**
* One entry in the `fallbacks` chain on a `/v1/messages` request.
*
* `model` is required. The override fields (`max_tokens`, `thinking`,
* `output_config`, and `speed`) set the corresponding parameter for this attempt
* only and are validated as if the request were made to `model`. Any other key is
* rejected at parse time.
*/
export interface BetaFallbackParam {
/**
* The model that will complete your prompt.
*
* See [models](https://docs.anthropic.com/en/docs/models-overview) for additional
* details and options.
*/
model: MessagesAPI.Model;
max_tokens?: number | null;
output_config?: BetaOutputConfig | null;
/**
* Inference speed mode. `fast` provides significantly faster output token
* generation at premium pricing. Not all models support `fast`; invalid
* combinations are rejected at create time.
*/
speed?: 'standard' | 'fast' | null;
thinking?: BetaThinkingConfigEnabled | BetaThinkingConfigDisabled | BetaThinkingConfigAdaptive | null;
[k: string]: unknown;
}
/**
* The `from` model declined for policy reasons.
*/
export interface BetaFallbackRefusalTrigger {
/**
* The policy category that triggered a refusal.
*
* - `cyber` - The request could enable cyber harm, such as malware or exploit
* development. Benign cybersecurity work can also trigger this category.
* - `bio` - The request could enable biological harm, such as dangerous lab
* methods. Beneficial life sciences work can also trigger this category.
* - `frontier_llm` - The request could assist the development of competing AI
* models, which is restricted under
* [Anthropic's commercial terms](https://www.anthropic.com/legal/commercial-terms).
* Benign machine learning work can also trigger this category.
* - `reasoning_extraction` - The request asks the model to reproduce its internal
* reasoning in the response text. To get reasoning in a structured form instead,
* use
* [adaptive thinking](https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking).
*/
category: 'cyber' | 'bio' | 'frontier_llm' | 'reasoning_extraction' | null;
type: 'refusal';
}
export interface BetaFileDocumentSource {
file_id: string;
type: 'file';
}
export interface BetaFileImageSource {
file_id: string;
type: 'file';
}
export interface BetaImageBlockParam {
source: BetaBase64ImageSource | BetaURLImageSource | BetaFileImageSource;
type: 'image';
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
}
export interface BetaInputJSONDelta {
partial_json: string;
type: 'input_json_delta';
}
export interface BetaInputTokensClearAtLeast {
type: 'input_tokens';
value: number;
}
export interface BetaInputTokensTrigger {
type: 'input_tokens';
value: number;
}
/**
* Per-iteration token usage breakdown.
*
* Each entry represents one sampling iteration, with its own input/output token
* counts and cache statistics. This allows you to:
*
* - Determine which iterations exceeded long context thresholds (>=200k tokens)
* - Calculate the true context window size from the last iteration
* - Understand token accumulation across server-side tool use loops
*/
export type BetaIterationsUsage = Array<BetaMessageIterationUsage | BetaCompactionIterationUsage | BetaAdvisorMessageIterationUsage | BetaFallbackMessageIterationUsage>;
export interface BetaJSONOutputFormat {
/**
* The JSON schema of the format
*/
schema: {
[key: string]: unknown;
};
type: 'json_schema';
}
/**
* Configuration for a specific tool in an MCP toolset.
*/
export interface BetaMCPToolConfig {
defer_loading?: boolean;
enabled?: boolean;
}
/**
* Default configuration for tools in an MCP toolset.
*/
export interface BetaMCPToolDefaultConfig {
defer_loading?: boolean;
enabled?: boolean;
}
export interface BetaMCPToolResultBlock {
content: string | Array<BetaTextBlock>;
is_error: boolean;
tool_use_id: string;
type: 'mcp_tool_result';
}
export interface BetaMCPToolUseBlock {
id: string;
input: unknown;
/**
* The name of the MCP tool
*/
name: string;
/**
* The name of the MCP server
*/
server_name: string;
type: 'mcp_tool_use';
}
export interface BetaMCPToolUseBlockParam {
id: string;
input: unknown;
name: string;
/**
* The name of the MCP server
*/
server_name: string;
type: 'mcp_tool_use';
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
}
/**
* Configuration for a group of tools from an MCP server.
*
* Allows configuring enabled status and defer_loading for all tools from an MCP
* server, with optional per-tool overrides.
*/
export interface BetaMCPToolset {
/**
* Name of the MCP server to configure tools for
*/
mcp_server_name: string;
type: 'mcp_toolset';
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
/**
* Configuration overrides for specific tools, keyed by tool name
*/
configs?: {
[key: string]: BetaMCPToolConfig;
} | null;
/**
* Default configuration applied to all tools from this server
*/
default_config?: BetaMCPToolDefaultConfig;
}
export interface BetaMemoryTool20250818 {
/**
* Name of the tool.
*
* This is how the tool will be called by the model and in `tool_use` blocks.
*/
name: 'memory';
type: 'memory_20250818';
allowed_callers?: Array<'direct' | 'code_execution_20250825' | 'code_execution_20260120' | 'code_execution_20260521'>;
/**
* Create a cache control breakpoint at this content block.
*/
cache_control?: BetaCacheControlEphemeral | null;
/**
* If true, tool will not be included in initial system prompt. Only loaded when
* returned via tool_reference from tool search.
*/
defer_loading?: boolean;
input_examples?: Array<{
[key: string]: unknown;
}>;
/**
* When true, guarantees schema validation on tool names and inputs
*/
strict?: boolean;
}
export type BetaMemoryTool20250818Command = BetaMemoryTool20250818ViewCommand | BetaMemoryTool20250818CreateCommand | BetaMemoryTool20250818StrReplaceCommand | BetaMemoryTool20250818InsertCommand | BetaMemoryTool20250818DeleteCommand | BetaMemoryTool20250818RenameCommand;
export interface BetaMemoryTool20250818CreateCommand {
/**
* Command type identifier
*/
command: 'create';
/**
* Content to write to the file
*/
file_text: string;
/**
* Path where the file should be created
*/
path: string;
}
export interface BetaMemoryTool20250818DeleteCommand {
/**
* Command type identifier
*/
command: 'delete';
/**
* Path to the file or directory to delete
*/
path: string;
}
export interface BetaMemoryTool20250818InsertCommand {
/**
* Command type identifier
*/
command: 'insert';
/**
* Line number where text should be inserted
*/
insert_line: number;
/**
* Text to insert at the specified line
*/
insert_text: string;
/**
* Path to the file where text should be inserted
*/
path: string;
}
export interface BetaMemoryTool20250818RenameCommand {
/**
* Command type identifier
*/
command: 'rename';
/**
* New path for the file or directory
*/
new_path: string;
/**
* Current path of the file or directory
*/
old_path: string;
}
export interface BetaMemoryTool20250818StrReplaceCommand {
/**
* Command type identifier
*/
command: 'str_replace';
/**
* Text to replace with
*/
new_str: string;
/**
* Text to search for and replace
*/
old_str: string;
/**
* Path to the file where text should be replaced
*/
path: string;
}
export interface BetaMemoryTool20250818ViewCommand {
/**
* Command type identifier
*/
command: 'view';
/**
* Path to directory or file to view
*/
path: string;
/**
* Optional line range for viewing specific lines
*/
view_range?: Array<number>;
}
export interface BetaMessage {
/**
* Unique object identifier.
*
* The format and length of IDs may change over time.
*/
id: string;
/**
* Information about the container used in the request (for the code execution
* tool)
*/
container: BetaContainer | null;
/**
* Content generated by the model.
*
* This is an array of content blocks, each of which has a `type` that determines
* its shape.
*
* Example:
*
* ```json
* [{ "type": "text", "text": "Hi, I'm Claude." }]
* ```
*
* If the request input `messages` ended with an `assistant` turn, then the
* response `content` will continue directly from that last turn. You can use this
* to constrain the model's output.
*
* For example, if the input `messages` were:
*
* ```json
* [
* {
*