---
title: "Read an artifact metadata projection."
method: GET
path: "/v1/storage/artifacts/{id}"
tags: ["Storage"]
---

# Read an artifact metadata projection.

`GET /v1/storage/artifacts/{id}`

## Path parameters

- `id` string, uuid, required

## Response `200`

Artifact metadata.

- object — Public metadata projection of a `storage_artifacts` row. `content_hash` is the plaintext SHA-256 of caller bytes; the internal `stored_hash` column is NEVER surfaced on the wire.
  - `artifact_id` string, uuid, required
  - `content_encoding` 'identity' | 'aes_gcm', required
  - `content_hash` string
  - `content_type` string, nullable, required
  - `created_at` string, required
  - `identifiers` object, required — Provider-native identifiers (CID, etc.); allowlisted per provider.
  - `lifecycle` object, required — Provider-agnostic summary of availability + delete-semantics. Both fields are optional so a row whose lifecycle is not yet known to the API surface validates cleanly.
    - `availability` 'immediate' | 'delayed' | 'scheduled' | 'best_effort' — Coarse availability category for the backend.
    - `deleteSemantics` 'delete' | 'unpin' | 'tombstone' | 'provider_retained' — What the backend does on delete. `delete` issues provider removal; `unpin` removes the AtomicMemory reference only; `tombstone` stops managing without provider removal (typical for decentralized providers); `provider_retained` is reserved.
  - `metadata` object, required — Caller-supplied metadata. Decoded JSON must be ≤4 KiB; encoded header value must be ≤8 KiB when sent via `X-AtomicMemory-Metadata`.
  - `mode` 'pointer' | 'managed', required
  - `provider` string, required
  - `provider_details` object — Allowlisted provider-specific public state.
  - `replication` object — Optional replication state for eventual storage providers.
    - `confirmedCopies` integer
    - `desiredCopies` integer
  - `retrieval` object — Optional retrieval-readiness state.
    - `lastCheckedAt` string
    - `status` 'not_checked' | 'retrievable' | 'not_retrievable' | 'unsupported'
  - `size_bytes` integer, nullable, required
  - `status` 'stored' | 'pending' | 'available' | 'unavailable' | 'deleting' | 'deleted' | 'delete_failed' | 'failed', required
  - `updated_at` string, required
  - `uri` string, nullable, required
  - `verification` object — Optional verification state (provider proofs).
    - `lastVerifiedAt` string
    - `providerProofStatus` 'pending' | 'verified' | 'failed' | 'unsupported'

## Other responses

- `404` — Artifact not found.
- `500` — Internal server error

---

[API](https://skmtc.dev/atomicstrata/apis/atomicmemory-http-api.md) · [All operations](https://skmtc.dev/atomicstrata/apis/atomicmemory-http-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/atomicstrata/atomicmemory-http-api/revisions/d501daa39bb2/schema)
