Skip to content

Register or fetch a vault by client_id (idempotent)

POST
/vaults/register
curl --request POST \
--url https://api.engram.page/vaults/register \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "client_id": "obsidian-9f1b2c3d4e5f", "name": "My Vault" }'

Used by the plugin on first sync. Returns 201 with status: created for a new vault, or 200 with status: existing when the client_id already maps to one.

Name + client_id

Media typeapplication/json
RegisterVaultRequest
object
client_id
required

Client-generated stable vault id.

string
name
required
string
Example
{
"client_id": "obsidian-9f1b2c3d4e5f",
"name": "My Vault"
}

Existing vault

Media typeapplication/json
RegisterVaultResponse
object
attachment_count
integer
created_at
string format: date-time
nullable
deleted_at
string format: date-time
nullable
description
string
nullable
encrypted

Always true — vaults are encrypted at rest.

boolean
id
required
string format: uuid
is_default
boolean
name
required
string
note_count
integer
purge_at

When a soft-deleted vault is hard-purged (deleted_at + 30d).

string format: date-time
nullable
slug
string
nullable
status
string
Allowed values: created existing
Example
{
"status": "created"
}

Newly created vault

Media typeapplication/json
RegisterVaultResponse
object
attachment_count
integer
created_at
string format: date-time
nullable
deleted_at
string format: date-time
nullable
description
string
nullable
encrypted

Always true — vaults are encrypted at rest.

boolean
id
required
string format: uuid
is_default
boolean
name
required
string
note_count
integer
purge_at

When a soft-deleted vault is hard-purged (deleted_at + 30d).

string format: date-time
nullable
slug
string
nullable
status
string
Allowed values: created existing
Example
{
"status": "created"
}

Name and client_id are required

Media typeapplication/json
MessageError
object
error
required
string
Example
{
"error": "not found"
}

Vault cap reached

Media typeapplication/json
LimitError
object
current
integer
nullable
error
required
string
limit
One of:
integer
limit_key
string
nullable
reason
required
string
tier
string
nullable
upgrade_url
string
nullable
Example
{
"error": "limit_exceeded",
"limit_key": "vaults_cap",
"reason": "vaults_cap_exceeded",
"tier": "free"
}