claude-api 0.5.3

Type-safe Rust client for the Anthropic API
Documentation
# Changelog

All notable changes to `claude-api`, `claude-api-derive`, and
`claude-api-test` are documented here. Format follows [Keep a
Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses
[Semantic Versioning](https://semver.org/).

## [0.5.3]https://github.com/joshrotenberg/claude-api/compare/v0.5.2...v0.5.3 - 2026-05-02

### Added

- *(live-tests)* add test stubs for user-profiles, skills write, batches completion, conversation, runner ([#36]https://github.com/joshrotenberg/claude-api/pull/36)
- *(vertex)* VertexSigner RequestSigner impl for GCP Vertex AI auth ([#37]https://github.com/joshrotenberg/claude-api/pull/37)
- *(messages)* type-promote stop_details and context_management ([#35]https://github.com/joshrotenberg/claude-api/pull/35)
- *(models)* type-promote ModelInfo.capabilities ([#27]https://github.com/joshrotenberg/claude-api/pull/27)
- *(managed-agents)* wire research-preview header for outcomes ([#24]https://github.com/joshrotenberg/claude-api/pull/24)

### Other

- new examples + module header upgrades (issue #15 partial) ([#28]https://github.com/joshrotenberg/claude-api/pull/28)

## [0.5.2]https://github.com/joshrotenberg/claude-api/compare/v0.5.1...v0.5.2 - 2026-05-01

### Fixed

- remove git-cliff changelog regen + restore curated CHANGELOG ([#23]https://github.com/joshrotenberg/claude-api/pull/23)

### Other

- regenerate changelog ([#22]https://github.com/joshrotenberg/claude-api/pull/22)

## [0.5.1] -- 2026-05-01

Documentation pass. No API changes.

### Documentation

- Rewrite `README.md` to be factual / badge-driven; competitor
  positioning moves to internal `CLAUDE.md` (gitignored).
- Replace one-line crate-level `lib.rs` placeholder with a full
  overview: quick start, module map, forward-compat policy,
  error-handling section, observability section.
- Beef up the three thinnest module headers (`messages/mod.rs`,
  `models/mod.rs`, `error.rs`) with endpoint tables, examples, and
  cross-links.

### Internal

- Repository layout: workspace crates moved under top-level
  `crates/` (`crates/claude-api`, `crates/claude-api-derive`,
  `crates/claude-api-test`). No effect on crates.io users.
- `[workspace.package]` and `[workspace.dependencies]` hoist
  edition / rust-version / license / repository plus 9
  cross-cutting deps to the workspace root.
- Edition bumped to 2024; MSRV bumped to Rust 1.90.
- Release automation: `release-plz` for version bumps and
  crates.io publishes.

## [0.5.0] -- 2026-05-01

The "full API surface" release. v0.5 closes the gap between
claude-api and the published Anthropic OpenAPI spec: every documented
endpoint is now reachable through a typed Rust namespace, every public
struct has been audited field-by-field against `BetaXxx` schemas, and
the live-test harness has recorded cassettes against the real API for
the cheap and read-only surfaces.

### Added

- **Admin API** (feature `admin`): full coverage of 27 endpoints across
  9 resources -- `organizations.me`, `invites.{create,list,retrieve,
  delete}`, `users.{list,retrieve,update,delete}`, `workspaces.
  {create,list,retrieve,update,archive}`, `workspace_members.{create,
  list,retrieve,update,delete}`, `api_keys.{list,retrieve,update}`,
  `usage_report.{messages,claude_code}`, `cost_report`,
  `rate_limits.{list_organization,list_workspace}`. Requires an
  admin-tier API key.
- **Skills API** (feature `skills`, beta `skills-2025-10-02`): full
  CRUD across 8 endpoints (skills + skill versions). Multipart upload
  via the same plumbing as `Files::upload`.
- **User Profiles API** (feature `user-profiles`, beta
  `user-profiles-2026-03-24`): create/list/get/update + the
  enrollment-URL flow. Open-string `TrustGrantStatus` enum. Update
  uses merge-patch metadata semantics.
- **Managed Agents preview** (feature `managed-agents-preview`, beta
  `managed-agents-2026-04-01`): sessions, agents, environments,
  vaults + credentials, memory_stores + memories + memory_versions,
  session resources (file/repo/memory_store), events (list/send/SSE
  stream), and the multi-agent threads endpoints (research-preview).
- **Typed `BetaHeader` enum** with the 23 canonical beta header values
  (`Skills`, `UserProfiles`, `FilesApi`, etc.) plus an `Other(String)`
  forward-compat fallthrough. Works directly with
  `ClientBuilder::beta(...)` via the existing `Into<String>` bound.
- **Bedrock auth** (feature `bedrock`): `BedrockSigner` (sigv4) as a
  drop-in `RequestSigner` for AWS Bedrock invocations.
- **Spec-diff tooling** at `tools/audit/spec_diff.sh` -- mechanical
  field-by-field comparison of every public Rust struct against its
  matching `BetaXxx` OpenAPI schema. Resolves `$ref` and `allOf`,
  understands `#[serde(rename = ...)]`, and filters tagged-variant
  false positives.
- **Live-test harness** in `claude-api-test`: 15 record-or-replay tests
  with 30 cassette exchanges committed. Auth headers are redacted
  before write; cassettes are safe to commit. The recorder now
  truncates by default (was: appended), so each record run produces a
  fresh cassette.

### Changed

- **`Session` struct** gains 6 spec-aligned fields:
  `agent: SessionAgent` (resolved snapshot at create time),
  `environment_id`, `vault_ids`, `metadata`, `stats`, plus the wire
  `type` discriminator.
- **`SessionUsage`**: replaces flat `cache_creation_input_tokens` with
  a structured `cache_creation: Option<CacheCreationUsage>` carrying
  `ephemeral_5m_input_tokens` + `ephemeral_1h_input_tokens` per the
  spec.
- **`crate::types::Usage`** gains `inference_geo: Option<String>`
  (open string) -- the live API emits this on every messages.create
  response; spec-diff didn't catch it.
- **`Agent.description` and `Agent.system`** relax from `String` to
  `Option<String>`. Same change on `SessionAgent`. Wire reality: the
  API returns JSON `null` for these fields when no value was set at
  create time. **Breaking** for callers that read those fields.
- **`Memory` and `MemoryVersion`** restructured per spec:
  `size_bytes` -> `content_size_bytes`, gain `memory_store_id` /
  `content_sha256` / per-memory `memory_version_id`. `MemoryVersion`
  replaces `redacted: bool` with `redacted_at` + `redacted_by` (typed
  `MemoryActor` tagged-union: `SessionActor` | `ApiActor` |
  `UserActor`). Adds typed `MemoryVersionOperation` enum.
- **`Credential`** restructured: `auth_type` + `mcp_server_url` flat
  fields collapse into a typed `auth: CredentialAuthResponse` union
  (McpOauth + StaticBearer + Other) per the spec.
- **`Environment`** adds `description` and `metadata` fields; gains
  the missing `update` endpoint (POST /v1/environments/{id}).
- **`MemoryStore`** adds `metadata`.
- **`Sessions::update`** added (POST /v1/sessions/{id}, was missing).
- **`Resources::retrieve`** added (GET
  /v1/sessions/{id}/resources/{rid}, was missing).
- **`SessionEvent`** gains a `SessionDeleted` variant for the
  documented `session.deleted` event type.
- **`AgentToolUseEvent`** gains `evaluated_permission:
  Option<AgentEvaluatedPermission>` (Allow | Ask | Deny).
- **`SpanModelRequestEndEvent`** gains `is_error: bool`.
- **`Message`** gains `stop_details` and `context_management` fields
  (preserved as `serde_json::Value` pending typed promotion).
- **`FileMetadata`** gains `scope: Option<FileScope>` (session
  scoping for files written by an agent under
  `/mnt/session/outputs/`).
- **`ModelInfo`** gains `max_tokens`, `max_input_tokens`,
  `capabilities` (last is `Value` pending typed promotion).
- **`GitHubRepositoryResource`** gains a typed `RepositoryCheckout`
  (Branch by name | Commit by SHA) plus `created_at` / `updated_at`.
- **`MemoryStoreResource`** gains `name` / `description` / `mount_path`.
- **`FileResource`** gains `created_at` / `updated_at`.

### Removed

- The speculative `SessionOutcomeEvaluated` event variant -- not in
  the spec or the published guide. The documented terminal-state
  signal is `span.outcome_evaluation_end` (kept).

### Fixed

- The cassette recorder appended to existing files; now truncates on
  start. (Caused stale 401 entries to accumulate during early
  recording sessions.)

### Notes

- Outcomes (`user.define_outcome`, `span.outcome_evaluation_*`) and
  multi-agent threads remain reachable through their typed events but
  are not surfaced in the OpenAPI spec; both are research-preview
  features documented in `/docs/en/managed-agents/{define-outcomes,
  multi-agent}` guide pages.
- `user_profiles.list` returns 404 against orgs that aren't enrolled
  in user_profiles. The endpoint shape is correct; this is an
  enrollment gate, not an SDK bug.

### Internal

- Spec-diff: 23/28 audited public structs match the OpenAPI spec
  field-by-field. The 5 remaining "extras" are intentional (3
  research-preview surfaces, 1 write-only secret, 1 spec
  documentation gap).
- 506 lib unit tests + 15 live-replay tests workspace-wide. Clippy +
  fmt clean across all feature combinations.

[0.5.0]: https://github.com/joshrotenberg/claude-api/releases/tag/v0.5.0
[0.5.1]: https://github.com/joshrotenberg/claude-api/releases/tag/v0.5.1