---
title: Cross-org release feed scoped to a category
description: Aggregated release feed for a category rollup.
---
# Cross-org release feed scoped to a category

`GET https://api.releases.sh/v1/categories/{slug}/releases`

Aggregated release feed for a category rollup. Mirrors `/v1/collections/:slug/releases` (cursor pagination, content negotiation). Effective category is denormalized on `releases.effective_category` (`COALESCE(product.category, org.category)` stamped at insert / recompute) so the feed can seek by category instead of full-scanning releases (#886).

Non-canonical slugs that match a known alias resolve to the canonical category internally (no redirect — feeds aren't bookmarked). Content negotiation: `Accept: text/markdown` returns a Markdown-rendered version.

**Auth:** optional Bearer token.

**Parameters**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `cursor` | query | string | no | Opaque pagination cursor from a previous response's `pagination.nextCursor`. |
| `limit` | query | integer | no | Max releases per page. Clamped to `[1, 100]`. |
| `include_prereleases` | query | boolean | no | Include alpha/beta/rc/preview/nightly releases. Default false. |
| `orgs` | query | string | no | Comma-separated org slugs to narrow the feed to a subset of the category's orgs. Unknown slugs are silently dropped; passing an `orgs=` value that resolves to nothing returns `releases: []`. Omit to include all orgs in the category. |
| `source_type` | query | string | no | Comma-separated source types (`github`, `feed`, `scrape`, `agent`) to narrow the feed by ingest channel. Unknown tokens are silently dropped. Omit to include all source types. |
| `slug` | path | string | yes |  |

**Responses**

- `200` Category release feed (or Markdown when `Accept: text/markdown` is sent)
- `404` Slug is neither canonical nor a known alias

Full request and response schemas: [OpenAPI 3.1 spec](https://api.releases.sh/v1/openapi.json).
