Mnemo is the embedding-vector provenance and verification API at trymnemo.com. The official Python distribution is mnemo-protocol, imported as mnemo_sdk, and the official GitHub organization is MnemoProtocol.
Base URL https://api.trymnemo.com. The machine-readable contract is openapi.json; this page follows it.
Agent protocol (complete contract): /agent-protocol.md · Protocol repository: github.com/MnemoProtocol/mnemo-agent-protocol · OpenAPI 3.1: /openapi.json · llms.txt
Send your account API key in the X-API-Key header on every embed and verify request. The API key is not a bearer token. Calls made with an API key use the account's subscription plan and are never offered a machine payment. Get a key by signing in and issuing one from the dashboard. Start with a 30-day free trial (pricing).
Agents without an account create a namespace and send its capability as X-Mnemo-Capability instead; see the agent protocol.
Watermark and register a vector. Store the returned watermarked_vector.
POST https://api.trymnemo.com/v1/embed
X-API-Key: <your API key>
Content-Type: application/json
{
"vector": [0.0123, -0.0456, ...],
"model_id": "text-embedding-3-small"
}| Field | Type | Description |
|---|---|---|
| vector | number[] (required) | The embedding: 512 to 4096 finite numbers. |
| model_id | string (required) | A label you supply naming the model that produced the vector. Recorded with the registered vector. |
| model_version | string | Defaults to "1.0". |
| request_id | string | Optional. Use a fresh random UUID per request; reusing one answers 409. |
| parent | object | Optional. Records a verified derivation from a parent you hold (vector_uid, relation, vector). See the agent protocol. |
| subject | object | Optional description of what the vector represents (subject_uri, subject_type). If accepted, the response carries subject_proof. |
{
"vector_uid": "<vector_uid>",
"watermarked_vector": [<same number of values as your input>],
"created_at": "<timestamp>",
"dimensions": 768,
"subject_proof": null,
"lineage": null
}| Field | Type | Description |
|---|---|---|
| vector_uid | string | Identifier of the registered object. |
| watermarked_vector | number[] | A measurably perturbed watermarked copy of your input. Store and use this copy, not the original; it carries the identity. |
| created_at | string | Registration time. |
| dimensions | integer | Length of the vector. |
| subject_proof | object | null | Opaque. Pass it back unchanged as subject_proof on verify. |
| lineage | object | null | parent_uid, relation and depth when a parent was given. |
| namespace_expires_at, namespace_state, warning | Accountless namespace callers only. |
# abridged; see the SDK README for all parameters
client.embed(
vector, # list[float] or numpy array
model_id, # str, required
*,
model_version="1.0",
subject=None,
) -> EmbedResult # vector_uid, watermarked_vector, created_at, dimensions, subject_proofErrors include 400 for an invalid vector (for example vector_dimension_unsupported), 401 for an invalid API key and 422 for unknown or mistyped fields. The full list is in openapi.json.
Mnemo Verify checks whether a submitted vector resolves to an object registered to the caller's Mnemo account or namespace.
POST https://api.trymnemo.com/v1/verify
X-API-Key: <your API key>
Content-Type: application/json
Idempotency-Key: <optional replay key>
{
"vector": <the watermarked_vector array you stored>
}| Field | Type | Description |
|---|---|---|
| vector | number[] (required) | The vector to check, usually the watermarked_vector you stored (Vector schema in openapi.json). |
| subject_proof | object | Optional. The subject_proof returned by embed, unchanged. |
| request_id | string | Optional. A fresh random UUID if sent. |
| Idempotency-Key | header | Optional replay key: the same key and body return the stored result without a second charge. The SDK sends one on every call. |
{
"verified": true,
"confidence": <number>,
"vector_uid": "<vector_uid>",
"policy_ok": <true | false>,
"signals": {<diagnostic metadata>},
"lineage": <object | null>
}{
"verified": false,
"confidence": <number>,
"vector_uid": null,
"policy_ok": false,
"lineage": null
}| Field | Type | Description |
|---|---|---|
| verified | boolean | The verdict. Decide on this field. |
| confidence | number | Returned with every healthy result. |
| vector_uid | string | null | The registered object the vector resolves to; null when verified is false. |
| policy_ok | boolean | A policy signal separate from the verdict; always false when verified is false. |
| signals | object | null | Diagnostic metadata. Informational; fields may change. Do not build decisions on it. |
| lineage | object | null | has_parent, parent_uid, depth for a verified object; null means unknown. |
client.verify(
vector,
*,
subject_proof=None,
idempotency_key=None,
) -> VerifyResult | None # None when verified is falseThe SDK returns None when the API answers verified false, so check result is not None before reading fields. Full example on the SDK page.
For pilot access and integration help, request a pilot.