# Collabs

Channels that do collabs: fastest growing, partners and new collab videos.

Channels that do collabs, meaning videos YouTube lists under more than one channel. Data comes from Algrow's collab sweep, which checks channels' Videos tabs around the clock. Growth figures refresh every 6 hours; partners and videos show up as soon as the sweep finds them.

### `GET /api/collabs/fastest-growing`

Channels that do collabs, ranked by subscriber or view growth over the last 7 or 30 days. A collab is a video YouTube lists under more than one channel. Each channel comes with its growth, how many different channels it has collabed with (`partners`), how many collab videos it has and when its latest one went out. Growth figures refresh every 6 hours; `computed_at` and `growth_through` say how fresh they are. Use `sort=pct` with `max_subscribers` to find small channels growing fast. Data comes from Algrow's collab sweep, which checks channels' Videos tabs around the clock for videos YouTube lists under more than one channel.

**Query Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| metric | string | Optional | subs | `subs` or `views`. |
| period | integer | Optional | 7 | Growth window in days: `7` or `30`. |
| sort | string | Optional | gain | `gain` ranks by absolute growth. `pct` ranks by growth as a percentage of where the channel started the period, and only counts channels with at least 1,000 subscribers unless you set `min_subscribers`. |
| min_subscribers | integer | Optional | none (1,000 with sort=pct) | Only channels with at least this many subscribers. |
| max_subscribers | integer | Optional | none | Only channels with at most this many subscribers. |
| min_partners | integer | Optional | 1 | Only channels that have collabed with at least this many different channels. |
| active_days | integer | Optional | none | Only channels with a collab video published in the last N days. |
| language | string | Optional | any | Primary language, e.g. `English`, `Spanish`. |
| page | integer | Optional | 1 | Page number, up to 50. |
| per_page | integer | Optional | 25 | Results per page, max 100. |

**Response 200 200**

```
{
  "success": true,
  "metric": "subs",
  "period_days": 7,
  "sort": "pct",
  "page": 1,
  "per_page": 25,
  "count": 25,
  "has_more": true,
  "computed_at": "2026-10-04T06:00:12+00:00",
  "growth_through": "2026-10-03",
  "channels": [
    {
      "channel_id": "UCq3Ci-h945sbEYXpVlw7rJg",
      "name": "Rachel Bakes",
      "handle": "@rachelbakes",
      "avatar_url": "https://yt3.ggpht.com/...",
      "url": "https://www.youtube.com/@rachelbakes",
      "subscriber_count": 18400,
      "view_count": 2310000,
      "gain": 6100,
      "gain_pct": 49.59,
      "subs_7d": 6100,
      "views_7d": 940000,
      "subs_30d": 9800,
      "views_30d": 1620000,
      "partners": 3,
      "collab_videos": 5,
      "last_collab_published": "2026-10-01",
      "language": "English",
      "category": "Food and Cooking",
      "monetized": true
    }
  ]
}
```

**Example**

```
curl "https://api.algrow.online/api/collabs/fastest-growing?sort=pct&max_subscribers=50000.=7" \
-H "Authorization: Bearer YOUR_API_KEY"
```

400 Bad metric, period or sort

### `GET /api/collabs/channels/:channel_id`

One channel's collab partners and collab videos, newest first. `has_new_collab` is true when the channel has a collab video published in the last `since_days` days. A publish date in the future is an upcoming premiere, counted in `upcoming_collabs` and marked `upcoming` on the video. Each partner says how many videos the two made together and when they last did. Each video lists its `host` (the channel it was uploaded to) and every collaborator. `growth` is the channel's 7 and 30 day growth, refreshed every 6 hours, or null if Algrow has none. `checked: false` means Algrow has not scanned this channel for collabs yet and no scanned channel lists it as a collaborator.

**Path Parameters**

| Name | Type | Description |
| --- | --- | --- |
| channel_id | string | 24-char YouTube channel ID (starts with `UC`). Use `POST /api/channels/resolve` first for a @handle or URL. |

**Query Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| since_days | integer | Optional | 7 | A collab published in the last N days counts as new. 1 to 365. |
| limit | integer | Optional | 30 | Max partners and max videos returned, up to 100. The totals always count everything. |

**Response 200 200**

```
{
  "success": true,
  "channel": {
    "channel_id": "UCq3Ci-h945sbEYXpVlw7rJg",
    "name": "Rachel Bakes",
    "handle": "@rachelbakes",
    "avatar_url": "https://yt3.ggpht.com/...",
    "url": "https://www.youtube.com/@rachelbakes",
    "subscriber_count": 18400
  },
  "checked": true,
  "last_checked": "2026-10-04T03:12:40+00:00",
  "since_days": 7,
  "has_new_collab": true,
  "new_collabs": 1,
  "upcoming_collabs": 1,
  "latest_collab_published": "2026-10-01",
  "total_collab_videos": 5,
  "total_partners": 3,
  "growth": {
    "subs_7d": 6100,
    "views_7d": 940000,
    "subs_30d": 9800,
    "views_30d": 1620000,
    "growth_through": "2026-10-03"
  },
  "partners": [
    {
      "channel_id": "UC7lmZqZ9Q8-0yBZ5f4bOcKw",
      "name": "Oven Hour",
      "handle": "@ovenhour",
      "avatar_url": "https://yt3.ggpht.com/...",
      "url": "https://www.youtube.com/@ovenhour",
      "subscriber_count": 212000,
      "videos_together": 3,
      "last_together": "2026-10-01"
    }
  ],
  "videos": [
    {
      "video_id": "k3VxQ9pLm2A",
      "url": "https://www.youtube.com/watch?v=k3VxQ9pLm2A",
      "title": "We Baked 100 Year Old Bread Recipes",
      "view_count": 412000,
      "published_at": "2026-10-01",
      "upcoming": false,
      "duration": "24:18",
      "host": {
        "channel_id": "UC7lmZqZ9Q8-0yBZ5f4bOcKw",
        "name": "Oven Hour",
        "handle": "@ovenhour",
        "avatar_url": "https://yt3.ggpht.com/...",
        "url": "https://www.youtube.com/@ovenhour",
        "subscriber_count": 212000
      },
      "collaborators": [
        {
          "channel_id": "UC7lmZqZ9Q8-0yBZ5f4bOcKw",
          "name": "Oven Hour",
          "handle": "@ovenhour",
          "avatar_url": "https://yt3.ggpht.com/...",
          "url": "https://www.youtube.com/@ovenhour",
          "subscriber_count": 212000
        },
        {
          "channel_id": "UCq3Ci-h945sbEYXpVlw7rJg",
          "name": "Rachel Bakes",
          "handle": "@rachelbakes",
          "avatar_url": "https://yt3.ggpht.com/...",
          "url": "https://www.youtube.com/@rachelbakes",
          "subscriber_count": 18400
        }
      ]
    }
  ]
}
```

**Example**

```
curl "https://api.algrow.online/api/collabs/channels/UCq3Ci-h945sbEYXpVlw7rJg?since_days=14" \
-H "Authorization: Bearer YOUR_API_KEY"
```

400 Invalid channel_id

### `GET /api/collabs/recent`

The newest collab videos across every channel the sweep has checked, published in the last `days` days, newest first or most viewed first. Each video lists its `host` (the channel it was uploaded to) and every collaborator. Pass `channel_ids` to watch a set of channels for new collabs. Collabs show up here as soon as the sweep finds them.

**Query Parameters**

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| days | integer | Optional | 7 | How far back to look, in days. Max 90. |
| sort | string | Optional | newest | `newest` or `views`. |
| channel_ids | string | Optional | all | Comma-separated channel IDs, up to 50. Only collabs involving any of these channels. |
| page | integer | Optional | 1 | Page number, up to 50. |
| per_page | integer | Optional | 25 | Results per page, max 100. |

**Response 200 200**

```
{
  "success": true,
  "days": 7,
  "sort": "newest",
  "page": 1,
  "per_page": 25,
  "count": 25,
  "has_more": true,
  "videos": [
    {
      "video_id": "k3VxQ9pLm2A",
      "url": "https://www.youtube.com/watch?v=k3VxQ9pLm2A",
      "title": "We Baked 100 Year Old Bread Recipes",
      "view_count": 412000,
      "published_at": "2026-10-01",
      "upcoming": false,
      "duration": "24:18",
      "host": {
        "channel_id": "UC7lmZqZ9Q8-0yBZ5f4bOcKw",
        "name": "Oven Hour",
        "handle": "@ovenhour",
        "avatar_url": "https://yt3.ggpht.com/...",
        "url": "https://www.youtube.com/@ovenhour",
        "subscriber_count": 212000
      },
      "collaborators": [
        {
          "channel_id": "UC7lmZqZ9Q8-0yBZ5f4bOcKw",
          "name": "Oven Hour",
          "handle": "@ovenhour",
          "avatar_url": "https://yt3.ggpht.com/...",
          "url": "https://www.youtube.com/@ovenhour",
          "subscriber_count": 212000
        },
        {
          "channel_id": "UCq3Ci-h945sbEYXpVlw7rJg",
          "name": "Rachel Bakes",
          "handle": "@rachelbakes",
          "avatar_url": "https://yt3.ggpht.com/...",
          "url": "https://www.youtube.com/@rachelbakes",
          "subscriber_count": 18400
        }
      ]
    }
  ]
}
```

**Example**

```
curl "https://api.algrow.online/api/collabs/recent?days=3&sort=views" \
-H "Authorization: Bearer YOUR_API_KEY"
```

400 Bad sort or channel_ids
