Artifacts
Create, retrieve, and delete reusable immutable content units. Artifacts are the addressable building blocks of agent state on the native /v2 surface.
An artifact is an immutable content unit: a system instruction, a tool definition, a schema, a policy, a document, a retrieval chunk. Once created it never changes, so there is deliberately no update endpoint. The public id is opaque (art_...) and never a content hash. See artifacts for the object model.
All requests require a bearer API key. See authentication.
Create an artifact
POST /v2/artifacts
artifact_typestringrequiredOne of text_context, tool_bundle_source, response_schema, document, retrieval_chunk, policy, checkpoint, compaction_summary, binary_attachment.
contentstringrequiredThe artifact content. Must not be empty.
content_media_typestringdefault: text/plainIANA media type describing content.
retention_classstringdefault: standardOne of ephemeral, standard, extended. See retention and purge.
metadataobjectArbitrary JSON you attach for your own bookkeeping. Stored verbatim.
curl https://api.zumik.ai/v2/artifacts \
-H "Authorization: Bearer $ZUMIK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"artifact_type": "policy",
"content": "Always run the linter before committing.",
"retention_class": "standard"
}'from zumik import Zumik
zk = Zumik()
artifact = zk.artifacts.create(
artifact_type="policy",
content="Always run the linter before committing.",
){
"id": "art_01jy7n3q8v6kzr4w2m9bd5xpfh",
"object": "artifact",
"artifact_type": "policy",
"project_id": "prj_01jy7n0a4c8m2t6v9q3wrxk7bd",
"content_media_type": "text/plain",
"created_at": "2026-06-15T16:04:10Z",
"retention_class": "standard",
"metadata": {}
}idstringOpaque artifact id, prefixed art_.
objectstringAlways artifact.
artifact_typestringThe artifact type, echoed back.
project_idstringThe owning project, prefixed prj_.
content_media_typestringThe media type stored for content.
created_atstringRFC 3339 creation timestamp.
retention_classstringThe retention class applied.
metadataobjectThe metadata you supplied.
The raw content is never returned on retrieve; only the artifact's identity and metadata are. Store your own copy if you need the text back.
Retrieve an artifact
GET /v2/artifacts/{artifact_id}
artifact_idstringpathrequiredThe artifact id to fetch.
curl https://api.zumik.ai/v2/artifacts/art_01jy7n3q8v6kzr4w2m9bd5xpfh \
-H "Authorization: Bearer $ZUMIK_API_KEY"Returns the same artifact object as create. An id that belongs to another project returns 404 rather than 403, so existence never leaks across a tenant boundary.
Delete an artifact
DELETE /v2/artifacts/{artifact_id}
Delete revokes access immediately. For an auditable, evidence-backed teardown of retained representations, use a purge job instead.
artifact_idstringpathrequiredThe artifact id to delete.
curl -X DELETE https://api.zumik.ai/v2/artifacts/art_01jy7n3q8v6kzr4w2m9bd5xpfh \
-H "Authorization: Bearer $ZUMIK_API_KEY"{
"id": "art_01jy7n3q8v6kzr4w2m9bd5xpfh",
"object": "artifact.deleted",
"deleted": true
}idstringThe deleted artifact id.
objectstringAlways artifact.deleted.
deletedbooleantrue when the artifact was removed.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request_error | content is empty. |
| 401 | invalid_api_key | Missing or invalid API key. |
| 404 | invalid_request_error | The artifact does not exist in this project. |
See the full table on errors. Mutating requests may carry an idempotency key.