---
title: Parent Stream or source channel?
category: beacons
summary: Keep the parent Stream and filter to the exact source channel your user means, for example SpaceX to xAI News, instead of looking for a new Stream.
order: 18
updated: 2026-10-07
next: freshness-and-available-through
related: choose-a-stream, source-channel-metadata-and-filters, build-and-save-a-beacon
reference: /docs/mcp, /agent-guide.md
---

A **Stream** is a delivery view of one clear subject: an organization, a person, a data series or a place. A **source channel** is one concrete place where content enters Synorb. Examples are a company's news page, a status page or a podcast. One Stream usually contains several source channels.

If your user wants only one part, such as the xAI newsroom, you do not need a new Stream. Keep the parent Stream and add a source channel filter.

## When to use this

Use this guide when your user names a subject and then a narrower scope. Examples: "SpaceX, but only xAI news", "this company's blog, not its filings", "the podcast, not the whole source".

**The canonical example: SpaceX to xAI News.** SpaceX owns xAI. Synorb covers the xAI source channels inside the SpaceX organization Stream. Synorb does not make a separate Stream for them. A Beacon for "xAI news" has this scope:

- parent Stream: `SpaceX`
- source channel filter: `xAI News`

Do not create an xAI News Stream when the parent Stream already carries the source channel. Do not ask for one either. Synorb uses one primitive Stream per subject, not one Stream per source channel. A child Stream for one source channel exists only if that source channel is a customer-facing product, such as a podcast show or a data series.

## Smallest working call

Never hard-code source channel IDs. The source channel list changes when Synorb merges Streams, so read it live. The three calls below are free.

**1. Find the parent Stream.**

```mcp
synorb-stream-search
{"query": "SpaceX", "page_size": 5}
```

**2. Read its source channels.** Pick the source channel whose `display` is `xAI News` (its `name` slug is `xai-news`). Copy its `id` as a string.

```mcp
synorb-details
{"stream_ids": ["STREAM_ID"], "verbosity": "standard"}
```

**3. Prove the filter narrows.** Count the Stream alone. Then count it with the source channel. The second number must be smaller. It is equal only if the source channel is the whole Stream:

```mcp
synorb-manifests
{"stream_ids": ["STREAM_ID"], "days": 14, "mode": "count"}
```

```mcp
synorb-manifests
{"stream_ids": ["STREAM_ID"], "source_channel_ids": ["CHANNEL_ID"], "days": 14, "mode": "count"}
```

**4. Save the Beacon with both scopes.** Keep the parent in `stream_ids`. Put the source channel in `source_channel_ids`:

```mcp
synorb-save-beacon
{"name": "xAI news (via SpaceX)", "stream_ids": ["STREAM_ID"], "source_channel_ids": ["CHANNEL_ID"], "natural_language_intent": "Official xAI news", "default_date_window": {"lookback_hours": 24}}
```

The REST equivalent:

```bash
curl -sS -X POST https://api.synorb.com/v3/beacons \
  -H "Authorization: Bearer $SYNORB_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "xAI news (via SpaceX)", "stream_ids": ["STREAM_ID"], "source_channel_ids": ["CHANNEL_ID"], "default_date_window": {"lookback_hours": 24}}'
```

For a one-off pull with no Beacon, send the same two fields to `synorb-manifests` or `POST /manifests/query`. If you know only the slug of a source channel, use `source_channel_names: ["xai-news"]` instead of IDs. Use exact names. If a name does not resolve, the call fails closed with zero Manifests and zero usage.

## What you get back

Each Stream in `synorb-details` lists its source channels. Read these fields:

```json response
{
  "source_channels": [
    {
      "id": "...",
      "name": "xai-news",
      "display": "xAI News",
      "media_format": "text",
      "is_active": true,
      "crawl_frequency": "...",
      "avg_items_30d": 12,
      "source_url": "https://..."
    }
  ]
}
```

The filters combine as follows. Different filter dimensions **intersect**. A Stream plus a source channel list returns only items that are in that Stream **and** came from one of those source channels. Inside one list, the source channels are alternatives. If you name two source channels, you get items from either. Your count in step 3 is the proof for the Stream you chose.

Read `avg_items_30d`, `crawl_frequency` and `is_active` before you make a promise. A source channel that averages a few items a month often returns an empty day. That is correct behavior, not a fault.

## Failure modes

| Symptom | Cause | What to do |
| --- | --- | --- |
| The count with the source channel equals the Stream-only count | The source channel is the whole Stream, or the ID is wrong. An ID sent as a number can round to a different source channel | Read `id` again as a string from `synorb-details`. |
| Zero Manifests with `source_channel_names` | The slug did not resolve, so the call failed closed | Copy `name` from `synorb-details` exactly. Check `did_you_mean` if present. |
| `422 unauthorized_source_broadening` on a run | You passed a source channel that is not in the saved scope of the Beacon | Run with the saved scope, or `PATCH` the Beacon to add the source channel. |
| `is_active: false` on the source channel | Synorb has stopped crawling that source | Tell your user. Choose a different source channel. |
| No source channel called `xAI News` in the Stream | The source channel list of the Stream differs from this guide | Use what `synorb-details` shows. Do not invent a source channel. |

## Make it good for your user

Name the Beacon after what your user asked for ("xAI news"). Say where it comes from ("through the SpaceX Stream, xAI News source channel"). Then your user always knows the source. If your user later wants all SpaceX coverage, `PATCH` the Beacon to drop `source_channel_ids`. That is one small change. It needs no new Beacon and no new Stream.

## Next guide

[Freshness and available-through dates](/agent-resources/freshness-and-available-through): learn how current "latest" is before you promise the results of a Beacon.
