The Anthropic Java SDK provides convenient access to the Anthropic REST API from applications written in Java
npx @tessl/cli install tessl/maven-com-anthropic--anthropic-java@2.11.0The Anthropic Java SDK provides convenient access to the Anthropic REST API from applications written in Java. It offers type-safe, idiomatic Java interfaces for Claude's advanced language capabilities including message generation, streaming responses, tool use, structured outputs, and deployment across multiple platforms (Anthropic API, AWS Bedrock, Google Vertex AI).
Gradle:
implementation("com.anthropic:anthropic-java:2.11.0")Maven:
<dependency>
<groupId>com.anthropic</groupId>
<artifactId>anthropic-java</artifactId>
<version>2.11.0</version>
</dependency>import com.anthropic.client.AnthropicClient;
import com.anthropic.client.okhttp.AnthropicOkHttpClient;
import com.anthropic.models.messages.Message;
import com.anthropic.models.messages.MessageCreateParams;
import com.anthropic.models.messages.Model;import com.anthropic.client.AnthropicClient;
import com.anthropic.client.okhttp.AnthropicOkHttpClient;
import com.anthropic.models.messages.Message;
import com.anthropic.models.messages.MessageCreateParams;
import com.anthropic.models.messages.Model;
// Create client from environment (ANTHROPIC_API_KEY)
AnthropicClient client = AnthropicOkHttpClient.fromEnv();
// Build message parameters
MessageCreateParams params = MessageCreateParams.builder()
.maxTokens(1024L)
.addUserMessage("Hello, Claude")
.model(Model.CLAUDE_SONNET_4_5)
.build();
// Create message
Message message = client.messages().create(params);
// Access response
System.out.println(message.content());The SDK is organized into several key components:
AnthropicClient (synchronous) and AnthropicClientAsync (asynchronous)Create and configure the Anthropic client with authentication, timeouts, retries, and proxy settings.
package com.anthropic.client.okhttp;
public final class AnthropicOkHttpClient {
public static Builder builder();
public static AnthropicClient fromEnv();
public static final class Builder {
public Builder fromEnv();
public Builder apiKey(String apiKey);
public Builder authToken(String authToken);
public Builder baseUrl(String baseUrl);
public Builder backend(Backend backend);
public Builder timeout(Duration timeout);
public Builder maxRetries(int maxRetries);
public Builder proxy(Proxy proxy);
public AnthropicClient build();
}
}package com.anthropic.client;
public interface AnthropicClient {
AnthropicClientAsync async();
WithRawResponse withRawResponse();
AnthropicClient withOptions(Consumer<ClientOptions.Builder> modifier);
MessageService messages();
ModelService models();
CompletionService completions();
BetaService beta();
void close();
}Client Setup and Configuration
Send messages to Claude models with full control over system prompts, conversation history, model selection, and generation parameters.
package com.anthropic.services.blocking;
public interface MessageService {
Message create(MessageCreateParams params);
Message create(MessageCreateParams params, RequestOptions requestOptions);
StreamResponse<RawMessageStreamEvent> createStreaming(MessageCreateParams params);
MessageTokensCount countTokens(MessageCountTokensParams params);
BatchService batches();
}package com.anthropic.models.messages;
public final class MessageCreateParams {
public static Builder builder();
public static final class Builder {
public Builder maxTokens(long maxTokens);
public Builder messages(List<MessageParam> messages);
public Builder addMessage(MessageParam message);
public Builder addUserMessage(String content);
public Builder addAssistantMessage(String content);
public Builder model(Model model);
public Builder model(String value);
public Builder system(String system);
public Builder temperature(double temperature);
public Builder topK(long topK);
public Builder topP(double topP);
public Builder stopSequences(List<String> stopSequences);
public Builder metadata(Metadata metadata);
public Builder thinking(ThinkingConfigParam thinking);
public Builder enabledThinking(long budgetTokens);
public Builder toolChoice(ToolChoice toolChoice);
public Builder tools(List<ToolUnion> tools);
public Builder addTool(Tool tool);
public Builder serviceTier(ServiceTier serviceTier);
public MessageCreateParams build();
}
}package com.anthropic.models.messages;
public final class Message {
public String id();
public List<ContentBlock> content();
public Model model();
public Optional<StopReason> stopReason();
public Optional<String> stopSequence();
public Usage usage();
public static Builder builder();
}package com.anthropic.models.messages;
public enum Model {
// Claude 4.5 Sonnet - Best for agents and coding
CLAUDE_SONNET_4_5("claude-sonnet-4-5"),
CLAUDE_SONNET_4_5_20250929("claude-sonnet-4-5-20250929"),
// Claude 4 Sonnet - High-performance with extended thinking
CLAUDE_SONNET_4_20250514("claude-sonnet-4-20250514"),
CLAUDE_SONNET_4_0("claude-sonnet-4-0"),
CLAUDE_4_SONNET_20250514("claude-4-sonnet-20250514"),
// Claude 4 Opus - Most capable models
CLAUDE_OPUS_4_0("claude-opus-4-0"),
CLAUDE_OPUS_4_20250514("claude-opus-4-20250514"),
CLAUDE_4_OPUS_20250514("claude-4-opus-20250514"),
CLAUDE_OPUS_4_1_20250805("claude-opus-4-1-20250805"),
// Claude 4.5 Haiku - Hybrid model with instant responses and extended thinking
CLAUDE_HAIKU_4_5("claude-haiku-4-5"),
CLAUDE_HAIKU_4_5_20251001("claude-haiku-4-5-20251001"),
// Claude 3.5 Haiku - Fastest and most compact
CLAUDE_3_5_HAIKU_LATEST("claude-3-5-haiku-latest"),
CLAUDE_3_5_HAIKU_20241022("claude-3-5-haiku-20241022"),
// Claude 3.7 Sonnet - High-performance with early extended thinking (DEPRECATED)
// End-of-life: February 19, 2026
CLAUDE_3_7_SONNET_LATEST("claude-3-7-sonnet-latest"),
CLAUDE_3_7_SONNET_20250219("claude-3-7-sonnet-20250219"),
// Claude 3 Opus - Excels at writing and complex tasks (DEPRECATED)
// End-of-life: January 5, 2026
CLAUDE_3_OPUS_LATEST("claude-3-opus-latest"),
CLAUDE_3_OPUS_20240229("claude-3-opus-20240229"),
// Claude 3 Haiku - Previous fast and cost-effective model
CLAUDE_3_HAIKU_20240307("claude-3-haiku-20240307");
public static Model of(String value);
public String asString();
}Stream message generation in real-time, receiving content as it's generated rather than waiting for the complete response.
package com.anthropic.core.http;
public interface StreamResponse<T> extends Closeable {
Stream<T> stream();
void close();
}package com.anthropic.models.messages;
public final class RawMessageStreamEvent {
public Optional<RawMessageStartEvent> messageStart();
public Optional<RawMessageDeltaEvent> messageDelta();
public Optional<RawMessageStopEvent> messageStop();
public Optional<RawContentBlockStartEvent> contentBlockStart();
public Optional<RawContentBlockDeltaEvent> contentBlockDelta();
public Optional<RawContentBlockStopEvent> contentBlockStop();
public boolean isMessageStart();
public boolean isContentBlockDelta();
}package com.anthropic.helpers;
public final class MessageAccumulator {
public static MessageAccumulator create();
public RawMessageStreamEvent accumulate(RawMessageStreamEvent event);
public Message message();
}Enable Claude to use external tools and functions, with automatic parameter validation and result handling.
package com.anthropic.models.messages;
public final class Tool {
public static Builder builder();
public static final class Builder {
public Builder inputSchema(InputSchema inputSchema);
public Builder name(String name);
public Builder description(String description);
public Builder cacheControl(CacheControlEphemeral cacheControl);
public Tool build();
}
public InputSchema inputSchema();
public String name();
public Optional<String> description();
public static final class InputSchema {
public static Builder builder();
}
}package com.anthropic.models.messages;
public final class ToolChoice {
public static ToolChoice ofAuto(ToolChoiceAuto auto);
public static ToolChoice ofAny(ToolChoiceAny any);
public static ToolChoice ofTool(ToolChoiceTool tool);
public static ToolChoice ofNone(ToolChoiceNone none);
public Optional<ToolChoiceAuto> auto();
public Optional<ToolChoiceAny> any();
public Optional<ToolChoiceTool> tool();
public boolean isAuto();
public boolean isAny();
public boolean isTool();
}package com.anthropic.models.messages;
public final class ToolUseBlock {
public String id();
public String name();
public Object input();
public static Builder builder();
}package com.anthropic.models.messages;
public final class ToolResultBlockParam {
public static Builder builder();
public static final class Builder {
public Builder toolUseId(String toolUseId);
public Builder content(String content);
public Builder contentAsJson(Object content);
public Builder isError(boolean isError);
public ToolResultBlockParam build();
}
}Generate responses that conform to JSON schemas, automatically derived from Java classes or explicitly defined.
package com.anthropic.models.beta.messages;
public final class MessageCreateParams {
public static Builder builder();
public static final class Builder {
public <T> StructuredMessageCreateParams.Builder<T> outputFormat(Class<T> clazz);
public <T> StructuredMessageCreateParams.Builder<T> outputFormat(
Class<T> clazz,
JsonSchemaLocalValidation validation
);
public Builder outputFormat(BetaJsonOutputFormat outputFormat);
}
}package com.anthropic.models.beta.messages;
public final class StructuredMessageCreateParams<T> {
public static final class Builder<T> {
public Builder<T> model(Model model);
public Builder<T> maxTokens(long maxTokens);
public Builder<T> addUserMessage(String content);
public Builder<T> system(String system);
public Builder<T> temperature(double temperature);
public StructuredMessageCreateParams<T> build();
}
}package com.anthropic.models.beta.messages;
public final class StructuredMessage<T> {
public String id();
public List<StructuredContentBlock<T>> content();
public Model model();
public Usage usage();
}package com.anthropic.core;
public enum JsonSchemaLocalValidation {
YES,
NO
}Deploy Claude on AWS Bedrock or Google Vertex AI using platform-specific authentication and configuration.
AWS Bedrock:
package com.anthropic.bedrock.backends;
public final class BedrockBackend implements Backend {
public static Builder builder();
public static BedrockBackend fromEnv();
public static final class Builder {
public Builder fromEnv();
public Builder fromEnv(AwsCredentialsProvider provider);
public Builder awsCredentials(AwsCredentials credentials);
public Builder awsCredentialsProvider(AwsCredentialsProvider provider);
public Builder apiKey(String apiKey);
public Builder region(Region region);
public BedrockBackend build();
}
}Google Vertex AI:
package com.anthropic.vertex.backends;
public final class VertexBackend implements Backend {
public static Builder builder();
public static VertexBackend fromEnv();
public static final class Builder {
public Builder fromEnv();
public Builder googleCredentials(GoogleCredentials credentials);
public Builder region(String region);
public Builder project(String project);
public VertexBackend build();
}
}Handle API errors with a comprehensive exception hierarchy for different failure scenarios.
package com.anthropic.errors;
public class AnthropicException extends RuntimeException {
public AnthropicException(String message);
public AnthropicException(String message, Throwable cause);
}package com.anthropic.errors;
public class AnthropicServiceException extends AnthropicException {
public int statusCode();
public Headers headers();
}package com.anthropic.errors;
public final class BadRequestException extends AnthropicServiceException {}
public final class UnauthorizedException extends AnthropicServiceException {}
public final class PermissionDeniedException extends AnthropicServiceException {}
public final class NotFoundException extends AnthropicServiceException {}
public final class RateLimitException extends AnthropicServiceException {}
public final class InternalServerException extends AnthropicServiceException {}package com.anthropic.errors;
public final class AnthropicIoException extends AnthropicException {}
public final class AnthropicInvalidDataException extends AnthropicException {}package com.anthropic.models.messages;
public final class ContentBlock {
public static ContentBlock ofText(TextBlock text);
public static ContentBlock ofThinking(ThinkingBlock thinking);
public static ContentBlock ofToolUse(ToolUseBlock toolUse);
public Optional<TextBlock> text();
public Optional<ThinkingBlock> thinking();
public Optional<ToolUseBlock> toolUse();
public boolean isText();
public boolean isThinking();
public boolean isToolUse();
public TextBlock asText();
public ThinkingBlock asThinking();
public ToolUseBlock asToolUse();
public <T> T accept(Visitor<T> visitor);
public interface Visitor<T> {
T visitText(TextBlock text);
T visitThinking(ThinkingBlock thinking);
T visitToolUse(ToolUseBlock toolUse);
}
}package com.anthropic.models.messages;
public final class TextBlock {
public String text();
public String type();
public static Builder builder();
}package com.anthropic.models.messages;
public final class ThinkingBlock {
public String thinking();
public String type();
public static Builder builder();
}package com.anthropic.models.messages;
public final class MessageParam {
public Role role();
public List<ContentBlockParam> content();
public static Builder builder();
public enum Role {
USER("user"),
ASSISTANT("assistant");
public static Role of(String value);
public String asString();
}
}package com.anthropic.models.messages;
public final class Usage {
public long inputTokens();
public long outputTokens();
public Optional<Long> cacheCreationInputTokens();
public Optional<Long> cacheReadInputTokens();
public static Builder builder();
}package com.anthropic.models.messages;
public enum StopReason {
END_TURN("end_turn"),
MAX_TOKENS("max_tokens"),
STOP_SEQUENCE("stop_sequence"),
TOOL_USE("tool_use"),
PAUSE_TURN("pause_turn"),
REFUSAL("refusal");
public static StopReason of(String value);
public String asString();
}package com.anthropic.core;
public final class RequestOptions {
public static Builder builder();
public static final class Builder {
public Builder timeout(Duration timeout);
public Builder responseValidation(boolean validation);
public RequestOptions build();
}
}package com.anthropic.core;
public final class ClientOptions {
public HttpClient httpClient();
public String baseUrl();
public Headers headers();
public Duration timeout();
public int maxRetries();
public boolean responseValidation();
public static Builder builder();
public static final class Builder {
public Builder httpClient(HttpClient httpClient);
public Builder baseUrl(String baseUrl);
public Builder timeout(Duration timeout);
public Builder timeout(Timeout timeout);
public Builder maxRetries(int maxRetries);
public Builder responseValidation(boolean validation);
public Builder putHeader(String name, String value);
public Builder putQueryParam(String key, String value);
public ClientOptions build();
}
}