Artifacts API

Store and retrieve artifacts, files and generated content, and search them by meaning.

Base path: /api/v1/artifacts · Permission resource: artifact. All requests require authentication.

Endpoints

MethodPathPurposePermission
POST/artifacts/uploadUpload a file (multipart)artifact:create
POST/artifacts/batchBatch / ZIP uploadartifact:create
POST/artifacts/Create from inline JSON contentartifact:create
GET/artifacts/List artifactsartifact:read
GET/artifacts/{id}Get one artifactartifact:read
GET/artifacts/{id}/downloadDownload the bytesartifact:read
POST/artifacts/{id}/linkAttach to a targetartifact:update
DELETE/artifacts/{id}/linkDetach from a targetartifact:update
DELETE/artifacts/{id}Deleteartifact:delete
POST/artifacts/{id}/retryReprocess (re-index)artifact:update
POST/artifacts/searchSemantic searchartifact:read

Upload a file

POST /artifacts/upload uses multipart form data with fields file, target_type, target_id, context and visibility:

curl -s -X POST "http://localhost:8000/api/v1/artifacts/upload" \
  -H "Authorization: Bearer $CLOUDPEEK_TOKEN" \
  -F "file=@/path/to/evidence.log" \
  -F "target_type=incident" \
  -F "target_id=101" \
  -F "context=VPN logs for incident 101"

POST /artifacts/batch accepts a ZIP/project upload for many files at once.

Create from inline content

POST /artifacts/ creates an artifact from content you provide in JSON, useful for saving generated text:

FieldTypeNotes
filenamestring1-500 chars
contentstringthe content (up to ~5M chars)
mime_typestringdefault text/plain
is_base64booldefault false
sourcestringdefault agent
target_type / target_idstringboth or neither: what to attach to
contextstring≤500 chars
visibilitystringdefault scoped

POST /artifacts/search finds artifacts by meaning, not just keywords:

FieldTypeNotes
querystringthe natural-language query
target_type / target_idstringoptionally restrict to a target
limitint1-100, default 10
context_windowint0-5, surrounding chunks to include
curl -s -X POST "http://localhost:8000/api/v1/artifacts/search" \
  -H "Authorization: Bearer $CLOUDPEEK_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "query": "failed VPN logins from overseas", "limit": 5 }'

Linking

Attach an artifact to an incident or investigation with POST /artifacts/{id}/link (body { "target_type": "incident", "target_id": "101", "context": "…" }), and detach with the matching DELETE.

The artifact object

Includes: id, tenant_id, uploaded_by_id, original_filename, mime_type, file_size_bytes, content_hash, source, visibility, status, vector_status, vector_chunk_count, graph_status, attachments, created_at, updated_at. The vector_status and graph_status fields show indexing progress that powers semantic search and the knowledge graph.

© 2026 CloudPeek. Agentic AI for high-consequence security operations.