---
title: "Paginated search of the index: every live OKF bundle, from GitHub and from live domains."
method: GET
path: "/api/bundles"
---

# Paginated search of the index: every live OKF bundle, from GitHub and from live domains.

`GET /api/bundles`

## Request

- Base URL: `https://okfindex.com`
- URL: `https://okfindex.com/api/bundles`
- Auth: none declared

Only `live` bundles. Free text matches the name, the tagline, the description and the origin identifier (`owner/repo:path` or the bundle URL). No `total` on purpose: `GET /api/okf/stats` has it.
Returns: { items[{id,name,tagline,description,okf_version,concepts,concept_list,type,index_url,page_url,source,repo,indexed_at,updated_at,api}], limit, offset, next_offset, next }

## Query parameters

- `q` string
- `origin` 'github' | 'domain'
- `repo` string
- `version` string
- `concept` string
- `concepts` string
- `type` string
- `license` string
- `language` string
- `sort` 'recent' | 'updated' | 'name' | 'stars'
- `limit` integer
- `offset` integer

## Response `200`

{ items[{id,name,tagline,description,okf_version,concepts,concept_list,type,index_url,page_url,source,repo,indexed_at,updated_at,api}], limit, offset, next_offset, next }

- PaginaDeBundles: A page of the index. No `total`: counting on every search would cost a scan without changing any decision — `GET /api/okf/stats` has the totals.
  - `items` Bundle[], required: The bundles on this page.
    - `id` string, required: Bundle id; the key across the whole API.
    - `name` string, required: Title of the root `index.md`; `owner/repo · dir` when it has none or the title is a listing heading (`Files`, `Index`).
    - `tagline` string, required: One line from the frontmatter `description`; empty when the author gave none.
    - `description` string, required: Body of the root `index.md`, capped at 1000 characters.
    - `okf_version` string, required: The `okf_version` the bundle declares (0.1 and 0.2 coexist).
    - `concepts` integer, required: How many linked entries the root index lists.
    - `concept_list` Concept[], required: The entries the root lists, in order, up to 24 — read from the indexed body, so a very long root is cut.
      - `name` string, required: Link text as written in the root index.
      - `url` string, required: Absolute URL of the entry, resolved against the root; a directory link gets its `index.md`.
      - `summary` string, required: Text after the link on the same line; empty when the index has none.
    - `type` string, required: The `type` declared in the root frontmatter, when any.
    - `index_url` string, required: The root `index.md`, raw — what you hand to an agent.
    - `page_url` string, required: The page a human opens: the file on GitHub, or the bundle URL on its site.
    - `source` BundleSource, required: Where a bundle comes from and how it entered the index.
      - `origin` 'github' | 'domain', required: Provenance of the bundle.
      - `via` 'sweep' | 'indexnow', required: How it got in: the GitHub sweep or an IndexNow ping.
      - `url` string, required: The repository (GitHub) or the site root (domain).
      - `host` string, required: Hostname of `url`; empty when it cannot be parsed.
      - `repo` string, nullable, required: `owner/repo` in lowercase, GitHub bundles only.
      - `dir` string, required: Directory of the bundle inside the repository (empty at the root).
      - `path` string, required: Path of the root `index.md` inside the repository.
    - `repo` RepoSignal, required: Repository signal collected by the enricher — GitHub bundles only.
      - `stars` integer, required: Stargazers at the last collection.
      - `forks` integer, required: Forks at the last collection.
      - `pushed_at` string, nullable, required: Last push seen, `YYYY-MM-DD HH:MM:SS` UTC.
      - `state` string, nullable, required: Repository state as classified by the enricher (active, stalled, archived, gone).
      - `language` string, nullable, required: Primary language reported by GitHub.
      - `license` string, nullable, required: License identifier reported by GitHub.
    - `indexed_at` string, required: When the bundle entered the index, `YYYY-MM-DD HH:MM:SS` UTC.
    - `updated_at` string, required: When its indexed content last changed, `YYYY-MM-DD HH:MM:SS` UTC.
    - `api` string, required: Absolute URL of this bundle's card.
  - `limit` integer, required: Page size applied.
  - `offset` integer, required: Offset applied.
  - `next_offset` integer, nullable, required: Offset of the next page; `null` when there is no more (or past the 1000 cap).
  - `next` string, nullable, required: Absolute URL of the next page, same filters; follow it until it comes back `null`.

---

[API](https://skmtc.dev/okfindex/apis/okf-index.md) · [All operations](https://skmtc.dev/okfindex/apis/okf-index/llms.txt) · [OpenAPI document](https://skmtc.dev/okfindex/apis/okf-index/revisions/4b13ca3c739f?raw)
