---
title: "Get trending topics from curated sources"
method: GET
path: "/radar"
tags: ["Composition"]
---

# Get trending topics from curated sources

`GET /radar`

## Query parameters

- `after` string
- `category` 'general' | 'tech' | 'dev' | 'science' | 'culture' | 'politics' | 'business' | 'entertainment'
- `hours` integer
- `limit` integer
- `region` string
- `source` 'github' | 'google_trends' | 'hacker_news' | 'polymarket' | 'reddit' | 'trustmrr' | 'wikipedia'

## Response `200`

Radar items

- object
  - `hasMore` boolean, required
  - `items` RadarItem[], required
    - `id` string, required — Radar item identifier.
    - `sourceId` string, required — Source-specific identifier used for deduplication.
    - `title` string, required
    - `url` string
    - `score` number, required
    - `category` 'general' | 'tech' | 'dev' | 'science' | 'culture' | 'politics' | 'business' | 'entertainment', required
    - `source` 'github' | 'google_trends' | 'hacker_news' | 'polymarket' | 'reddit' | 'trustmrr' | 'wikipedia', required
    - `region` string, required
    - `language` string, required — BCP-47 language code. und means the source did not identify a language.
    - `metadata` object, required — Source-specific fields. Shape varies per source: - reddit: { author, authorId?, subreddit, subredditId?, subredditSubscribers?, sourceFormat, score?, upvoteRatio?, estimatedUpvotes?, estimatedDownvotes?, numberComments?, numberCrossposts?, selftext?, contentUrl?, domain?, postHint?, linkFlairText?, distinguished?, totalAwardsReceived?, viewCount?, editedAt?, galleryImageUrls?, redditVideo?, archived?, contestMode?, isCrosspostable?, isMeta?, isNsfw?, isOriginalContent?, isRobotIndexable?, isSelf?, isSpoiler?, isVideo?, locked?, stickied? }. `score` is Reddit's public net score. Exact public upvote and downvote counts are not available. Estimated counts derive from the public score and upvote ratio, which Reddit may fuzz. Comment bodies are not included. Current items combine public listing discovery with server-rendered post data and use `sourceFormat: html`; `json` and `rss` remain for legacy rows. - github: { starsToday: number } - hacker_news: { points: number, numberComments: number } - google_trends: { approxTraffic: number } - polymarket: { volume24hr: number } - wikipedia: { views: number } - trustmrr: { mrr, growthPercent, last30Days, total, customers, activeSubscriptions, onSale, xHandle?, category?, askingPrice?, country?, foundedDate?, googleSearchImpressionsLast30Days?, growthMrrPercent?, multiple?, paymentProvider?, profitMarginLast30Days?, rank?, revenuePerVisitor?, targetAudience?, visitorsLast30Days? } For the startup growth source, xHandle is the founder's X username without @. The rank field is the source's revenue rank. Result order represents reported 30-day revenue-growth rank.
      - `author` string
      - `contentUrl` string, uri
      - `estimatedDownvotes` integer
      - `estimatedUpvotes` integer
      - `numberComments` integer
      - `score` integer
      - `selftext` string
      - `sourceFormat` 'html' | 'json' | 'rss' — Current items use html. json and rss are retained for legacy rows.
      - `subreddit` string
      - `upvoteRatio` number
    - `publishedAt` string, date-time, required
    - `createdAt` string, date-time, required
    - `description` string
    - `imageUrl` string — Source image. Startup growth items return the logo here.
  - `nextCursor` string — Opaque cursor for the next page (present only when hasMore is true).

## Other responses

- `400` — Invalid input
- `401` — Unauthenticated
- `429` — Xquik tier rate limit exceeded. The response includes a `Retry-After` header with the number of seconds to wait before retrying.

---

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