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

# search narrative candidate topics by keyword

> Reverse-searches topic candidates from a human keyword to map a fuzzy narrative
into the platform's topic taxonomy.
Input is keyword (e.g., "RWA", "AI Agent", "Restaking").
Output is a list of candidate topics with topic_id, match rationale/keyword overlap,
and a trend/heat summary.
Recommended: let the client-side LLM cluster/name/summarize the candidates.



## OpenAPI

````yaml get /v1/tool/search-narrative-candidates
openapi: 3.1.0
info:
  description: >-
    Tops Public Tool API exposes [Tops](https://tops.chainbase.com) social
    signal data as REST endpoints,

    making crypto social intelligence accessible to any HTTP client.


    Unlike the Chainbase Web3 API (which covers on-chain data), Tops focuses
    exclusively on

    **crypto social intelligence**: trending narratives, topic discovery, and
    Twitter/X social mentions.


    No API key required — it's free to use.

    Rate limited per client IP: 10 req/s, 60 req/min, 600 req/hour.
  title: Tops Public Tool API
  version: '1.0'
servers:
  - url: https://api.chainbase.com/tops
security: []
externalDocs:
  description: ''
  url: ''
paths:
  /v1/tool/search-narrative-candidates:
    get:
      tags:
        - Tool
      summary: search narrative candidate topics by keyword
      description: >-
        Reverse-searches topic candidates from a human keyword to map a fuzzy
        narrative

        into the platform's topic taxonomy.

        Input is keyword (e.g., "RWA", "AI Agent", "Restaking").

        Output is a list of candidate topics with topic_id, match
        rationale/keyword overlap,

        and a trend/heat summary.

        Recommended: let the client-side LLM cluster/name/summarize the
        candidates.
      parameters:
        - description: keyword, e.g. RWA, AI Agent
          in: query
          name: keyword
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pubtool.ItemsResponse-domain_Story'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pubtool.ErrorResponse'
          description: Bad Request
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/pubtool.ErrorResponse'
          description: Too Many Requests
components:
  schemas:
    pubtool.ItemsResponse-domain_Story:
      properties:
        count:
          type: integer
        items:
          items:
            $ref: '#/components/schemas/domain.Story'
          type: array
          uniqueItems: false
      type: object
    pubtool.ErrorResponse:
      properties:
        error:
          type: string
      type: object
    domain.Story:
      properties:
        analysis_time:
          type: string
        authors:
          items:
            type: string
          type: array
          uniqueItems: false
        current_rank:
          type: integer
        first_tweet_time:
          description: the time of the first tweet in this story
          type: string
        id:
          type: string
        is_manual:
          type: boolean
        is_new:
          description: first time in top stories
          type: boolean
        keyword:
          type: string
        rank_status:
          description: '''new'',''up'',''down'',''same'''
          type: string
        score:
          type: number
        snapshot_time:
          type: string
        source_type:
          type: string
        summary:
          type: string
        tweet_urls:
          items:
            type: string
          type: array
          uniqueItems: false
      type: object

````