---
title: "Filtered search over precomputed narratives"
method: GET
path: "/narratives/search"
---

# Filtered search over precomputed narratives

`GET /narratives/search`

## Request

- Base URL: `https://api.kinetk.ai/graph`
- URL: `https://api.kinetk.ai/graph/narratives/search`
- Auth: API key in header `x-api-key`

Search over precomputed narrative clusters by narrative name and tags. A narrative matches when every word of `q` (stop words aside, English stemming) is a whole word of its name or tags. With no such match the endpoint falls back to narratives whose member content mentions the query, then to the window's trending narratives. For live retrieval, use `POST /intelligence/jobs` with `kind: insights`.

## Query parameters

- `limit` string
- `q` string, required
- `window` '30d' | '7d'

## Response `200`

Successful response

- INarrativeSearchResponse
  - `narratives` INarrativeSummary[], required
    - `acceleration` number, nullable
    - `computed_at` string, required
    - `content_count` number, required
    - `creator_count` number, required
    - `diffusion` number, nullable
    - `emerging_score` number, required
    - `id` string, required
    - `label` string, required
    - `lifecycle` string, nullable
    - `momentum_score` number, required
    - `narrative_key` string, nullable
    - `overlap_count` number
    - `platform_count` number, required
    - `representative_content_uuid` string, nullable
    - `score_breakdown` INarrativeScoreBreakdown, required
      - `clustering_method` string
      - `content_count` number, required
      - `creator_count` number, required
      - `pair_count` number
      - `platform_count` number, required
      - `seed_tag` string
      - `total_engagement` number, required
    - `sentiment_breakdown` INarrativeSentimentBreakdown
      - `coverage` number
      - `dominant_tone` string, nullable
      - `stance` object, nullable
        - `critical` number, required
        - `mixed` number, required
        - `neutral` number, required
        - `supportive` number, required
      - `stance_coverage` number
    - `sentiment_label` string, nullable
    - `sentiment_score` number, nullable
    - `summary` string, required
    - `text_rank` number
    - `top_tags` string[], required
    - `total_engagement` string, required
    - `trajectory_confidence` string, nullable
    - `velocity` number, nullable
    - `window_end` string, required
    - `window_key` '30d' | '7d', required
    - `window_start` string, required
  - `query` string, required
  - `window` '30d' | '7d', required

## Other responses

- `default`: Error response

## Changes

- **2026-10-09** (0.1) `c9c05c737ac8`: 1 info
  - endpoint added
- **2026-07-21** (0.1) `483f5b6f2255`: 1 breaking
  - api path removed without deprecation

[Operation history](https://skmtc.dev/kinetk/apis/kinetk-graph-service-api/changes/narratives/search/get.md)

---

[API](https://skmtc.dev/kinetk/apis/kinetk-graph-service-api.md) - [All operations](https://skmtc.dev/kinetk/apis/kinetk-graph-service-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kinetk/apis/kinetk-graph-service-api/revisions/3167795a69e5?raw)
