Mnemoverse Vault API

The vault API from Mnemoverse — 2 operation(s) for vault.

Operations 5

POST /api/v1/vault/secrets Create Secret #
GET /api/v1/vault/secrets List Secrets #
GET /api/v1/vault/secrets/by-alias/{alias} Fetch Sealed By Alias #
DELETE /api/v1/vault/secrets/by-alias/{alias} Retire Secret #
PUT /api/v1/vault/secrets/by-alias/{alias} Replace Secret #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/mnemoverse-com:mnemoverse-com-vault-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

mnemoverse-com-vault-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Mnemoverse Core Vault API
  description: '## Persistent Cognitive Memory for AI Agents


    Write memories, query with semantic + episodic search, learn from outcomes via valence,

    and compress with sleep consolidation.


    ### Quick Start

    - `POST /api/v1/memory/write` -- store an insight

    - `POST /api/v1/memory/read` -- recall relevant memories

    - `POST /api/v1/memory/feedback` -- teach the system what worked

    - `POST /api/v1/memory/consolidate` -- compress similar memories

    - `GET /api/v1/memory/stats` -- see memory state

    - `WS /api/v1/memory/stream` -- real-time updates (WebSocket)'
  contact:
    name: Mnemoverse
    url: https://github.com/mnemoverse
  license:
    name: MIT
  version: 1.0.0
servers:
- url: https://core.mnemoverse.com
  description: Production
security:
- ApiKeyHeader: []
- BearerAuth: []
tags:
- name: Vault
paths:
  /api/v1/vault/secrets:
    post:
      tags:
      - Vault
      summary: Create Secret
      description: 'Store a secret-atom: the context is embedded and kept with its concepts

        (it enters neither the memory concept index nor the association graph) and

        is listed by GET /vault/secrets. Export keeps

        it as a row marked atom_type "secret". Memory search leaves it out, the

        point reads by atom id or external_ref and the atom chain answer 404, and

        memory stats and the memory atom limit do not count it; the single-tenant WS

        /memory/stream still carries it. The envelope-encrypted value goes to the

        use-only column.'
      operationId: create_secret_api_v1_vault_secrets_post
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSecretRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateSecretResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '503':
          description: Subscription state could not be verified, so the request was refused before anything was stored. Retry after the given delay.
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    get:
      tags:
      - Vault
      summary: List Secrets
      description: 'Discovery: list the caller''s ACTIVE secrets as VALUE-FREE metadata (alias, context,

        created_at, concepts) so an agent can FIND a secret by alias WITHOUT ever seeing a

        value. The tenant comes from the VERIFIED claims and scopes the query (org A can

        never enumerate org B''s secrets). A secret-atom with no reachable ``secret:{alias}``

        external_ref (e.g. stored directly, not via this route) is SKIPPED — its alias could

        not be used via the by-alias route anyway, so surfacing it would only mislead.


        ``include_retired=true`` adds the retired ones: value-free history

        rows, told apart by the ``#retired-`` mark in their ref (server-controlled: no alias can

        spell ``#``), whose alias is the name they had (``metadata.retired_alias``) and whose

        ``retired_at`` is set. Their stored value was overwritten and their ref is unreachable.'
      operationId: list_secrets_api_v1_vault_secrets_get
      parameters:
      - name: include_retired
        in: query
        required: false
        schema:
          type: boolean
          default: false
          title: Include Retired
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListSecretsResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/vault/secrets/by-alias/{alias}:
    get:
      tags:
      - Vault
      summary: Fetch Sealed By Alias
      description: 'The use-path: return ONLY the sealed value for the caller''s secret by alias.

        Never returns content — the value and the context are never handed back together.'
      operationId: fetch_sealed_by_alias_api_v1_vault_secrets_by_alias__alias__get
      parameters:
      - name: alias
        in: path
        required: true
        schema:
          type: string
          title: Alias
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SealedSecretResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    delete:
      tags:
      - Vault
      summary: Retire Secret
      description: 'Retire the caller''s ACTIVE secret with this alias: the stored value is overwritten at

        once, the name becomes free, the row stays as value-free history. Storage overwrites the

        sealed value with a one-byte tombstone (retention note: the previous bytes can persist in

        database history, WAL and backups for their retention period; they are ciphertext the

        server cannot open, and no use path can address the row any more),

        moves the ref to ``secret:#retired--`` (outside the alias charset, so

        no use path reaches it) and stamps ``metadata.retired_at``. The tenant comes from the

        VERIFIED claims. 404 when there is no active secret with that alias; a second call is

        therefore a 404 too. The list and the quota count leave retired secrets out.'
      operationId: retire_secret_api_v1_vault_secrets_by_alias__alias__delete
      parameters:
      - name: alias
        in: path
        required: true
        schema:
          type: string
          title: Alias
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RetireSecretResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
    put:
      tags:
      - Vault
      summary: Replace Secret
      description: 'Replace the caller''s ACTIVE secret with this alias by a new sealed value and context:

        retire the old one (its stored value overwritten, its row kept as history), then store

        the new one under the SAME alias. 404 when there is nothing to replace — a new name is

        created with POST /vault/secrets, never by PUT. The body is validated BEFORE anything is

        retired. The two steps are not one transaction: if the store fails after the retire,

        the error says so, the alias is free, and the caller stores again with POST; the agent

        sees "no such alias" in between, never a stale value. The quota count leaves retired secrets out, so a replace never needs headroom.'
      operationId: replace_secret_api_v1_vault_secrets_by_alias__alias__put
      parameters:
      - name: alias
        in: path
        required: true
        schema:
          type: string
          title: Alias
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReplaceSecretRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReplaceSecretResponse'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '503':
          description: Service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseSchema'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    SealedSecretResponse:
      properties:
        alias:
          type: string
          title: Alias
        sealed_secret_b64:
          type: string
          title: Sealed Secret B64
      type: object
      required:
      - alias
      - sealed_secret_b64
      title: SealedSecretResponse
    SecretSummary:
      properties:
        alias:
          type: string
          title: Alias
        context:
          type: string
          title: Context
        created_at:
          type: string
          format: date-time
          title: Created At
        concepts:
          items:
            type: string
          type: array
          title: Concepts
        retired_at:
          anyOf:
          - type: string
            format: date-time
          - type: 'null'
          title: Retired At
      type: object
      required:
      - alias
      - context
      - created_at
      - concepts
      title: SecretSummary
      description: 'One secret as VALUE-FREE discovery metadata. Never carries the sealed value —

        only the alias, the in-clear context (purpose), when it was stored, its concepts, and

        (for a retired one, listed only on request) when it was retired. The field set is

        deliberately narrow: a second guardrail behind the storage layer, which never selects

        the sealed value for a listing.'
    CreateSecretResponse:
      properties:
        atom_id:
          type: string
          title: Atom Id
        alias:
          type: string
          title: Alias
      type: object
      required:
      - atom_id
      - alias
      title: CreateSecretResponse
    ReplaceSecretResponse:
      properties:
        atom_id:
          type: string
          title: Atom Id
        alias:
          type: string
          title: Alias
        replaced_atom_id:
          type: string
          title: Replaced Atom Id
        retired_at:
          type: string
          format: date-time
          title: Retired At
      type: object
      required:
      - atom_id
      - alias
      - replaced_atom_id
      - retired_at
      title: ReplaceSecretResponse
    ListSecretsResponse:
      properties:
        secrets:
          items:
            $ref: '#/components/schemas/SecretSummary'
          type: array
          title: Secrets
      type: object
      required:
      - secrets
      title: ListSecretsResponse
    RetireSecretResponse:
      properties:
        alias:
          type: string
          title: Alias
        atom_id:
          type: string
          title: Atom Id
        retired_at:
          type: string
          format: date-time
          title: Retired At
      type: object
      required:
      - alias
      - atom_id
      - retired_at
      title: RetireSecretResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    ErrorResponseSchema:
      properties:
        code:
          type: string
          title: Code
          description: Machine-readable error code (e.g. VALIDATION_ERROR).
        message:
          type: string
          title: Message
          description: Human-readable error description.
        requestId:
          anyOf:
          - type: string
          - type: 'null'
          title: Requestid
          description: Correlation ID from X-Request-Id header.
        retryable:
          type: boolean
          title: Retryable
          description: True if the client should retry the request.
          default: false
        details:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          title: Details
          description: Optional structured details.
      type: object
      required:
      - code
      - message
      title: ErrorResponseSchema
      description: Unified JSON error response body (for OpenAPI docs).
    ReplaceSecretRequest:
      properties:
        context:
          type: string
          maxLength: 10000
          title: Context
          description: In-clear routing/usage context. Listed by GET /vault/secrets and kept in GET /memory/export as a row with atom_type 'secret'. Not returned by memory search (POST /memory/read, /memory/read-batch, /memory/query, /memory/recent), nor by the point reads by atom id or external_ref or the atom chain, which answer 404 as for an atom that does not exist. The single-tenant WS /memory/stream (off in multi-tenant deployments) still carries it.
        sealed_secret_b64:
          type: string
          maxLength: 262144
          title: Sealed Secret B64
          description: Base64 of the envelope-encrypted value bytes.
        concepts:
          items:
            type: string
          type: array
          title: Concepts
        domain:
          type: string
          title: Domain
          default: secrets
        metadata:
          additionalProperties: true
          type: object
          title: Metadata
      type: object
      required:
      - context
      - sealed_secret_b64
      title: ReplaceSecretRequest
      description: 'PUT /vault/secrets/by-alias/{alias}: the new value and context for an alias that

        already holds an active secret. The alias is the path parameter.'
    CreateSecretRequest:
      properties:
        context:
          type: string
          maxLength: 10000
          title: Context
          description: In-clear routing/usage context. Listed by GET /vault/secrets and kept in GET /memory/export as a row with atom_type 'secret'. Not returned by memory search (POST /memory/read, /memory/read-batch, /memory/query, /memory/recent), nor by the point reads by atom id or external_ref or the atom chain, which answer 404 as for an atom that does not exist. The single-tenant WS /memory/stream (off in multi-tenant deployments) still carries it.
        sealed_secret_b64:
          type: string
          maxLength: 262144
          title: Sealed Secret B64
          description: Base64 of the envelope-encrypted value bytes.
        concepts:
          items:
            type: string
          type: array
          title: Concepts
        domain:
          type: string
          title: Domain
          default: secrets
        metadata:
          additionalProperties: true
          type: object
          title: Metadata
        alias:
          type: string
          maxLength: 200
          minLength: 1
          pattern: ^[A-Za-z0-9._-]+$
          title: Alias
          description: Human alias, unique per org. Path-safe chars only (A-Z a-z 0-9 . _ -).
      type: object
      required:
      - context
      - sealed_secret_b64
      - alias
      title: CreateSecretRequest
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-Api-Key
      description: Tenant API key (mk_live_...).
    BearerAuth:
      type: http
      scheme: bearer
      description: 'The same tenant API key sent as Authorization: Bearer.'