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

# One-shot envelope of every memory analytics pipe



## OpenAPI

````yaml /api-reference/openapi.json get /v1/analytics/memory/dashboard
openapi: 3.1.0
info:
  title: Feather API
  description: >-
    Unified customer experience platform API. Manages identity, conversations,
    memory, agents, procedures, policies, model routing, knowledge bases,
    integrations, and runtime execution.
  version: 1.21.0
servers:
  - url: https://api-sandbox.featherhq.com
    description: Sandbox
  - url: http://localhost:8000
    description: Local dev
security: []
paths:
  /v1/analytics/memory/dashboard:
    get:
      tags:
        - analytics
      summary: One-shot envelope of every memory analytics pipe
      operationId: getMemoryDashboard
      parameters:
        - name: granularity
          in: query
          required: false
          schema:
            type: string
            pattern: ^(minute|hour|day|week)$
            default: hour
            title: Granularity
        - name: start_date
          in: query
          required: true
          schema:
            type: string
            format: date
            title: Start Date
        - name: end_date
          in: query
          required: true
          schema:
            type: string
            format: date
            title: End Date
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemoryDashboardEnvelope'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Authentication required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - APIKeyHeader: []
components:
  schemas:
    MemoryDashboardEnvelope:
      properties:
        ingestion:
          items:
            $ref: '#/components/schemas/MemoryIngestionTimeseriesRow'
          type: array
          title: Ingestion
        coverage:
          $ref: '#/components/schemas/MemoryCoverageEnvelope'
        recalls:
          items:
            $ref: '#/components/schemas/RecallTimeseriesRow'
          type: array
          title: Recalls
        by_vendor:
          items:
            $ref: '#/components/schemas/RecallByVendorRow'
          type: array
          title: By Vendor
        distribution:
          $ref: '#/components/schemas/UserDistributionRow'
      type: object
      required:
        - ingestion
        - coverage
        - recalls
        - by_vendor
        - distribution
      title: MemoryDashboardEnvelope
      description: Single envelope returned by ``/v1/analytics/memory/dashboard``.
    ErrorResponse:
      properties:
        error:
          type: string
          title: Error
        message:
          type: string
          title: Message
      type: object
      required:
        - error
        - message
      title: ErrorResponse
      description: Standard error response returned by all API error handlers.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    MemoryIngestionTimeseriesRow:
      properties:
        time_bucket:
          type: string
          format: date-time
          title: Time Bucket
        episodes:
          type: integer
          title: Episodes
        completed:
          type: integer
          title: Completed
        failed:
          type: integer
          title: Failed
        partial:
          type: integer
          title: Partial
        skipped:
          type: integer
          title: Skipped
        messages_synced:
          type: integer
          title: Messages Synced
        success_rate_pct:
          type: number
          title: Success Rate Pct
      type: object
      required:
        - time_bucket
        - episodes
        - completed
        - failed
        - partial
        - skipped
        - messages_synced
        - success_rate_pct
      title: MemoryIngestionTimeseriesRow
    MemoryCoverageEnvelope:
      properties:
        users_with_memory:
          type: integer
          title: Users With Memory
        total_end_users:
          type: integer
          title: Total End Users
        coverage_rate_pct:
          type: number
          title: Coverage Rate Pct
        total_episodes:
          type: integer
          title: Total Episodes
        completed_episodes:
          type: integer
          title: Completed Episodes
      type: object
      required:
        - users_with_memory
        - total_end_users
        - coverage_rate_pct
        - total_episodes
        - completed_episodes
      title: MemoryCoverageEnvelope
      description: |-
        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.
    RecallTimeseriesRow:
      properties:
        time_bucket:
          type: string
          format: date-time
          title: Time Bucket
        total:
          type: integer
          title: Total
        hits:
          type: integer
          title: Hits
        empties:
          type: integer
          title: Empties
        cache_hits:
          type: integer
          title: Cache Hits
        errors:
          type: integer
          title: Errors
        hit_rate_pct:
          type: number
          title: Hit Rate Pct
        cache_hit_rate_pct:
          type: number
          title: Cache Hit Rate Pct
        avg_context_length:
          type: number
          title: Avg Context Length
        p50_ms:
          type: number
          title: P50 Ms
        p90_ms:
          type: number
          title: P90 Ms
        p95_ms:
          type: number
          title: P95 Ms
        p99_ms:
          type: number
          title: P99 Ms
      type: object
      required:
        - time_bucket
        - total
        - hits
        - empties
        - cache_hits
        - errors
        - hit_rate_pct
        - cache_hit_rate_pct
        - avg_context_length
        - p50_ms
        - p90_ms
        - p95_ms
        - p99_ms
      title: RecallTimeseriesRow
    RecallByVendorRow:
      properties:
        vendor:
          type: string
          title: Vendor
        total:
          type: integer
          title: Total
        hits:
          type: integer
          title: Hits
        empties:
          type: integer
          title: Empties
        cache_hits:
          type: integer
          title: Cache Hits
        errors:
          type: integer
          title: Errors
        hit_rate_pct:
          type: number
          title: Hit Rate Pct
        cache_hit_rate_pct:
          type: number
          title: Cache Hit Rate Pct
        avg_context_length:
          type: number
          title: Avg Context Length
        p50_ms:
          type: number
          title: P50 Ms
        p90_ms:
          type: number
          title: P90 Ms
        p95_ms:
          type: number
          title: P95 Ms
        p99_ms:
          type: number
          title: P99 Ms
      type: object
      required:
        - vendor
        - total
        - hits
        - empties
        - cache_hits
        - errors
        - hit_rate_pct
        - cache_hit_rate_pct
        - avg_context_length
        - p50_ms
        - p90_ms
        - p95_ms
        - p99_ms
      title: RecallByVendorRow
    UserDistributionRow:
      properties:
        users:
          type: integer
          title: Users
        episodes_p50:
          type: integer
          title: Episodes P50
        episodes_p90:
          type: integer
          title: Episodes P90
        messages_p50:
          type: integer
          title: Messages P50
        messages_p90:
          type: integer
          title: Messages P90
        recalls_p50:
          type: integer
          title: Recalls P50
        recalls_p90:
          type: integer
          title: Recalls P90
        days_since_last_recall_p50:
          anyOf:
            - type: integer
            - type: 'null'
          title: Days Since Last Recall P50
        days_since_last_recall_p90:
          anyOf:
            - type: integer
            - type: 'null'
          title: Days Since Last Recall P90
      type: object
      required:
        - users
        - episodes_p50
        - episodes_p90
        - messages_p50
        - messages_p90
        - recalls_p50
        - recalls_p90
      title: UserDistributionRow
    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
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: x-api-key

````