> ## Documentation Index
> Fetch the complete documentation index at: https://docs.openmem.blog/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /capabilities — query provider feature support

> Full response schema, field reference, and a complete JSON example for the OMP capabilities and GET /healthz health check endpoints.

`GET /capabilities` tells you exactly what the connected provider supports — which verbs are available, which search modes are enabled, and what limits apply. Call this endpoint at startup to decide which features your application can use, and degrade gracefully when a capability is absent.

The presence of the `omp_version` field in the response signals that the provider implements OMP natively. The SDK uses this to choose between a passthrough adapter (thin HTTP client) and a translation adapter.

## GET /capabilities

No parameters required. This endpoint is unauthenticated.

### Response — 200 OK

<ResponseField name="omp_version" type="string" required>
  The OMP spec version this provider implements (e.g. `"0.1"`). The presence of this field signals native OMP support.
</ResponseField>

<ResponseField name="provider" type="string" required>
  The name of the backend (e.g. `"postgres"`, `"mem0"`, `"supermemory"`).
</ResponseField>

<ResponseField name="verbs" type="string[]" required>
  The list of OMP verbs this provider supports. Possible values: `add`, `search`, `get`, `update`, `delete`, `list`, `context`, `audit`.
</ResponseField>

<ResponseField name="features" type="object" required>
  Feature flags for this provider.

  <Expandable title="features properties">
    <ResponseField name="features.vector_search" type="boolean">
      Whether the provider supports vector (semantic) similarity search.
    </ResponseField>

    <ResponseField name="features.keyword_search" type="boolean">
      Whether the provider supports keyword (BM25 / full-text) search.
    </ResponseField>

    <ResponseField name="features.graph_queries" type="boolean">
      Whether the provider supports graph-native queries.
    </ResponseField>

    <ResponseField name="features.temporal" type="boolean">
      Whether the provider supports time-range filtering on memories.
    </ResponseField>

    <ResponseField name="features.scopes" type="string">
      How scopes are implemented. One of `"native"` (first-class hierarchical scopes), `"tags"` (scopes emulated via tags), or `"none"` (no scope support).
    </ResponseField>

    <ResponseField name="features.max_content_length" type="integer">
      Maximum number of characters allowed in a single memory's `content` field. `null` if the provider does not enforce a limit.
    </ResponseField>

    <ResponseField name="features.supports_audit" type="boolean">
      Whether the provider records an audit log accessible via `GET /audit`.
    </ResponseField>

    <ResponseField name="features.supports_supersession" type="boolean">
      Whether the provider tracks the `supersedes` relationship between memories.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="limits" type="object">
  Rate and result limits for this provider.

  <Expandable title="limits properties">
    <ResponseField name="limits.rate_limit_per_minute" type="integer">
      Maximum number of API requests per minute. `null` if no rate limit is enforced.
    </ResponseField>

    <ResponseField name="limits.max_search_results" type="integer">
      Maximum value allowed for the `limit` parameter on `GET /memories/search`. `null` if unbounded.
    </ResponseField>
  </Expandable>
</ResponseField>

### Full JSON example

```json theme={null}
{
  "omp_version": "0.1",
  "provider": "mem0",
  "verbs": ["add", "search", "get", "update", "delete", "list", "context"],
  "features": {
    "vector_search": true,
    "keyword_search": true,
    "graph_queries": true,
    "temporal": true,
    "scopes": "native",
    "max_content_length": 10000,
    "supports_audit": true,
    "supports_supersession": true
  },
  "limits": {
    "rate_limit_per_minute": 600,
    "max_search_results": 100
  }
}
```

### Example

```bash theme={null}
curl -s http://localhost:8080/capabilities | jq .
```

### Checking for a specific capability

```python theme={null}
caps = mem.capabilities()

if caps.features.vector_search:
    results = mem.search("package manager preferences", user_id="u1")
else:
    # Fall back to listing with a scope filter
    page = mem.list(user_id="u1", scope="coding/preferences")
```

***

## GET /healthz

A lightweight liveness probe that confirms the server is running and the provider is reachable. No parameters required. This endpoint is unauthenticated.

### Response — 200 OK

```json theme={null}
{
  "status": "ok",
  "provider": "postgres"
}
```

<Tip>
  Use `GET /healthz` in your container readiness probe or load-balancer health check. Use `GET /capabilities` when you need to inspect feature support — the two endpoints serve different purposes.
</Tip>
