---
title: "One-shot envelope of every memory analytics pipe"
method: GET
path: "/v1/analytics/memory/dashboard"
tags: ["analytics"]
---

# One-shot envelope of every memory analytics pipe

`GET /v1/analytics/memory/dashboard`

## Query parameters

- `granularity` string
- `start_date` string, date, required
- `end_date` string, date, required

## Response `200`

Successful Response

- MemoryDashboardEnvelope — Single envelope returned by ``/v1/analytics/memory/dashboard``.
  - `ingestion` MemoryIngestionTimeseriesRow[], required
    - `time_bucket` string, date-time, required
    - `episodes` integer, required
    - `completed` integer, required
    - `failed` integer, required
    - `partial` integer, required
    - `skipped` integer, required
    - `messages_synced` integer, required
    - `success_rate_pct` number, required
  - `coverage` MemoryCoverageEnvelope, required — Single-object response for ``/v1/analytics/memory/coverage``. Numerator (``users_with_memory`` and the episode counts) comes from Tinybird; ``total_end_users`` comes from Neo4j. The service merges both, computing ``coverage_rate_pct`` and clamping at 100 for the edge case where a user was deleted after their memory was synced.
    - `users_with_memory` integer, required
    - `total_end_users` integer, required
    - `coverage_rate_pct` number, required
    - `total_episodes` integer, required
    - `completed_episodes` integer, required
  - `recalls` RecallTimeseriesRow[], required
    - `time_bucket` string, date-time, required
    - `total` integer, required
    - `hits` integer, required
    - `empties` integer, required
    - `cache_hits` integer, required
    - `errors` integer, required
    - `hit_rate_pct` number, required
    - `cache_hit_rate_pct` number, required
    - `avg_context_length` number, required
    - `p50_ms` number, required
    - `p90_ms` number, required
    - `p95_ms` number, required
    - `p99_ms` number, required
  - `by_vendor` RecallByVendorRow[], required
    - `vendor` string, required
    - `total` integer, required
    - `hits` integer, required
    - `empties` integer, required
    - `cache_hits` integer, required
    - `errors` integer, required
    - `hit_rate_pct` number, required
    - `cache_hit_rate_pct` number, required
    - `avg_context_length` number, required
    - `p50_ms` number, required
    - `p90_ms` number, required
    - `p95_ms` number, required
    - `p99_ms` number, required
  - `distribution` UserDistributionRow, required
    - `users` integer, required
    - `episodes_p50` integer, required
    - `episodes_p90` integer, required
    - `messages_p50` integer, required
    - `messages_p90` integer, required
    - `recalls_p50` integer, required
    - `recalls_p90` integer, required
    - `days_since_last_recall_p50` integer, nullable
    - `days_since_last_recall_p90` integer, nullable

## Other responses

- `400` — Bad request
- `401` — Authentication required
- `422` — Validation Error

---

[API](https://skmtc.net/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.net/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/oneloop-hq/feather-api/versions/888bdd5c076e/schema)
