---
title: "Fetch a page of the Explore feed"
method: GET
path: "/v1/explore"
tags: ["Explore"]
---

# Fetch a page of the Explore feed

`GET /v1/explore`

## Request

- Base URL: `https://api.hify.club`
- URL: `https://api.hify.club/v1/explore`
- Auth: API key in header `X-User-Token`

Returns the viewer's ranked feed of clips, highlights and editorial posts. Paging is by opaque cursor; pass the previous response's next_cursor to continue. Only the item envelope is described here — source carries a different shape per type.

## Query parameters

- `cursor` string
- `per_page` integer
- `refresh` 'true'

## Response `200`

A page of the feed

- object
  - `items` object[]
    - `feed_item_id` string, required: Stable id, unique per item. Dedupe and analytics key.
    - `type` 'clip' | 'highlight' | 'editorial', required: Which renderer the client should use.
    - `content_kind` 'epic' | 'blooper' | 'highlight' | 'editorial', required: Why the item was selected.
    - `badge` 'featured' | 'throwback' | 'your_venue', nullable, required: Why this viewer is seeing the item, for the label on the card. Always present; null when no reason applies. At most one value, resolved in the order featured > throwback > your_venue. featured — an editorial post from HiFy. throwback — a game the viewer played in, old enough to be worth remembering. your_venue — the viewer did not play in it, but has played at that facility recently. Viewer-dependent, so the same item can carry a different badge for someone else. Clients should ignore values they do not recognise, so new ones can be added without breaking older builds.
    - `source` object, required: Type-specific payload (media, facility, game, moments).
    - `authors` object[], required: Who is in the item.
    - `engagement` object, required: Reaction counts, and whether the viewer reacted.
  - `next_cursor` string, nullable: Pass back as cursor for the next page. Null on the last page.
  - `head_cursor` string, nullable: Marks the top of the feed, for the new-items count.
  - `empty_state` 'caught_up' | 'no_content', nullable: Why an empty page is empty. Null when the page has items.

## Other responses

- `401`: Unauthenticated
- `403`: Forbidden - viewer is not a player

---

[API](https://skmtc.dev/hify/apis/hify-apis.md) - [All operations](https://skmtc.dev/hify/apis/hify-apis/llms.txt) - [OpenAPI document](https://skmtc.dev/hify/apis/hify-apis/revisions/b5920403538d?raw)
