Documentation menu
These are pre-release docs from the main branch.

API reference

9 operations in assets. Raw spec: openapi.json.

GET/api/v1/assets

GET /api/assets — org-wide, filterable (resource REST for external-DMS parity; the client-scoped tab narrows with `?client_id=`).

Parameters

NameInTypeRequiredDescription
client_idquery—No
scopequery—Noclient | internal_org (migration 0103).
layout_idquery—No
qquery—NoSubstring over tag, name, and custom fields.

Responses

StatusDescription
200

Security: bearer

POST/api/v1/assets

POST /api/assets — instant-first (IF1/IF2).

Request body

CreateAssetRequest

Responses

StatusDescription
200
409idempotency key reused
422fields rejected by the layout schema

Security: bearer

GET/api/v1/assets/{id}

GET /api/assets/{id}

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404asset not visible in scope

Security: bearer

PATCH/api/v1/assets/{id}

PATCH /api/assets/{id} — instant-first (IF1/IF2); absent = keep. A layout change re-validates the effective fields against the NEW schema.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Request body

UpdateAssetRequest

Responses

StatusDescription
200
404asset not visible in scope
409version conflict or idempotency key reused
422fields rejected by the layout schema

Security: bearer

DELETE/api/v1/assets/{id}

DELETE /api/assets/{id} — the audit trail keeps the events; link rows survive and surface as broken targets (docs-platform semantics: never cascade-deleted). Mirrors the vault's delete shape (`deleted: true`), which intentionally rides no instant-first envelope.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200deleted
404asset not visible in scope

Security: bearer

GET/api/v1/assets/{id}/vault

GET /api/assets/{id}/vault — the asset's vault entries: password rows LINKED to this asset (password→asset). Strict posture: metadata only (title/username/url/expiry) under `passwords:view`; secrets exist only behind the audited `/passwords/{id}/reveal` endpoint, which requires `passwords:edit` — the UI must render role-gated reveal, never a dead button. No ciphertext ever appears in this response.

Parameters

NameInTypeRequiredDescription
idpathstringYes

Responses

StatusDescription
200
404asset not visible in scope

Security: bearer