Change an OAuth connection's vault access
const url = 'https://api.engram.page/connections/oauth/example?family_id=example';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"default_access":"none","vault_access":{"<vault id>":"write"}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url 'https://api.engram.page/connections/oauth/example?family_id=example' \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "default_access": "none", "vault_access": { "<vault id>": "write" } }'Replaces the vault levels of ONE grant (family_id) of an OAuth client. Takes effect at once: issued access tokens and every later refresh carry the new access, and the user’s live sockets reconnect. Widening is allowed. A grant the client asked to be read only (mcp:read) cannot be given write: 422. Session-auth only.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”OAuth client id
Query Parameters
Section titled “Query Parameters”The grant to change
Request Bodyrequired
Section titled “Request Bodyrequired”New access
object
Level for every vault not listed, including vaults you create later. Defaults to none. The credential must reach at least one vault now or later.
Level per vault id, replacing the credential’s current levels. Every id must be one of your active vaults.
object
Example
{ "default_access": "none", "vault_access": { "<vault id>": "write" }}Responses
Section titled “Responses”The updated connection
object
CIMD metadata-document URL. Present only for clients that published one, in which case it is the client’s public identifier and the reason it can be verified despite redirecting to loopback.
The grant lineage this row is. One OAuth client can hold several grants over different vault sets, each its own row; pass this to DELETE /connections/oauth/{client_id} to revoke only this one. Null for PATs.
The user’s own name for this connection, when they set one.
The level this connection gets on vaults you create later.
The redirect this grant’s authorization code was delivered to. This, not redirect_uris, is what decides verified. Null for non-OAuth connections and for grants issued before it was recorded.
Every redirect the client registered. Informational only — a client may register several and choose one per authorization, so a vendor host appearing here proves nothing about this grant.
Vaults this connection may reach right now (read or write). Null means every vault, including ones created later. For a connection with per-vault levels this is resolved, not stored: the vaults vault_levels shows at read or write. Vaults created later get new_vaults, so read both for the full picture.
What this connection may do in each of your vaults, resolved now. Every vault you can see is listed, none included. read = search and read, write = also change notes and the vault.
object
Positional against vault_ids. An entry is null when the vault is gone or outside the caller’s own scope.
Example
{ "cimd_url": "https://claude.ai/.well-known/oauth-client", "kind": "oauth", "new_vaults": "none", "vault_levels": [ { "level": "none" } ]}Missing family_id
object
Example
{ "error": "not found"}No such connection
object
Example
{ "error": "not found"}Access the grant cannot have