> ## Documentation Index
> Fetch the complete documentation index at: https://docs.particle.pro/llms.txt
> Use this file to discover all available pages before exploring further.

# Format Profile

> What kind of show each podcast is — guest frequency, detected formats (interview, panel, call-in, solo), ads, video, episode length, and publishing cadence — as filterable attributes.

Two shows about the same topic can be completely different products: a daily two-minute
news brief read by a single narrator, and a weekly 90-minute interview show with rotating
guests and a heavy ad load. Particle API derives that distinction from what's actually in
the audio — speaker roles, durations, publish timestamps, and video discovery — and
exposes it as a compact `format` object on every podcast, with every attribute doubling
as a catalog filter.

## The format object

Every podcast response (list and detail) embeds the compact form:

```json Response from GET /v1/podcasts/pivot (truncated) theme={"dark"}
{
  "id": "QpMz7GYKfSNuUa6zKXA4Q",
  "title": "Pivot",
  "slug": "pivot",
  "format": {
    "guest_frequency": "regular",
    "signals": ["interview"],
    "has_ads": true,
    "has_video": true,
    "avg_episode_minutes": 62,
    "episodes_per_week": 2.1,
    "publishing_status": "active"
  }
}
```

| Field                 | Meaning                                                                                                                                                    |
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `guest_frequency`     | How often episodes feature a guest: `never`, `rare`, `occasional`, `regular`, or `always`.                                                                 |
| `signals`             | Detected production formats: `interview`, `panel`, `call_in`, `solo_narrated`. A show can carry several — a panel show with call-in segments carries both. |
| `has_ads`             | Whether episodes carry advertiser reads. The full sponsor breakdown lives at [Advertising](/podcasts/advertising).                                         |
| `has_video`           | Whether any episode has a discovered video version (e.g. a YouTube release).                                                                               |
| `avg_episode_minutes` | Average episode length in minutes.                                                                                                                         |
| `episodes_per_week`   | Publishing cadence over the trailing 90 days — `5.0` for a weekday daily, `0.5` for a fortnightly show.                                                    |
| `publishing_status`   | `active` (an episode within the last 90 days) or `dormant`.                                                                                                |

Attributes are **asserted, never presumed**: `guest_frequency`, `signals`, and `has_ads`
are derived from speaker analysis and are omitted until enough of the show's episodes
have been analyzed to judge. An omitted field means *not yet known* — it never means
"no". The `format` object itself is omitted for podcasts whose episodes haven't been
ingested yet.

### Guest frequency buckets

| Value        | Share of analyzed episodes with a guest |
| ------------ | --------------------------------------- |
| `never`      | 0% — the show does not host guests      |
| `rare`       | up to 25%                               |
| `occasional` | 25–50%                                  |
| `regular`    | 50–90%                                  |
| `always`     | above 90% — interview-driven            |

### Format signals

| Signal          | What it indicates                                                                                        |
| --------------- | -------------------------------------------------------------------------------------------------------- |
| `interview`     | Guests appear in at least half of episodes — conversation with outside voices is the show's core format. |
| `panel`         | A recurring panel of commentators (review roundtables, sports panels, actual-play shows).                |
| `call_in`       | Listener callers are part of the format (advice shows, talk radio).                                      |
| `solo_narrated` | No meaningful guest, panel, or caller presence — narrated news briefs, audio essays, solo commentary.    |

## Get the full profile

The dedicated endpoint returns the exact rates and distributions behind the compact
attributes:

<CodeGroup>
  ```bash curl theme={"dark"}
  curl "https://api.particle.pro/v1/podcasts/pivot/format" \
    -H "X-API-Key: $PARTICLE_API_KEY"
  ```

  ```js JavaScript theme={"dark"}
  const res = await fetch("https://api.particle.pro/v1/podcasts/pivot/format", {
    headers: { "X-API-Key": process.env.PARTICLE_API_KEY },
  });
  const profile = await res.json();
  ```

  ```python Python theme={"dark"}
  res = httpx.get(
      "https://api.particle.pro/v1/podcasts/pivot/format",
      headers={"X-API-Key": os.environ["PARTICLE_API_KEY"]},
  )
  profile = res.json()
  ```
</CodeGroup>

```jsonc Response (truncated) theme={"dark"}
{
  "guest_frequency": "regular",
  "signals": ["interview"],
  "has_ads": true,
  "has_video": true,
  "avg_episode_minutes": 62,
  "episodes_per_week": 2.1,
  "publishing_status": "active",

  "analyzed_episodes": 164,
  "episode_count": 167,

  "guest_episode_rate": 0.57,
  "ad_episode_rate": 0.94,
  "call_in_episode_rate": 0.0,
  "panel_episode_rate": 0.02,

  "episode_minutes_p25": 54,
  "episode_minutes_median": 61,
  "episode_minutes_p75": 70,

  "publish_days": {
    "monday": 2, "tuesday": 81, "wednesday": 1,
    "thursday": 0, "friday": 80, "saturday": 2, "sunday": 1
  },

  "first_episode_published_at": "2024-06-04T09:00:00Z",
  "latest_episode_published_at": "2026-06-02T09:00:00Z",
  "computed_at": "2026-06-03T14:22:51Z"
}
```

`analyzed_episodes` is the sample size behind every role-derived attribute — surface it
when you need to qualify a claim. The `publish_days` histogram reads the schedule
directly: this show ships Tuesdays and Fridays.

## Filter the catalog

Every compact attribute has a matching query parameter on
[`GET /v1/podcasts`](/podcasts/overview#get-a-podcast), and they compose with the
existing `topic_id`, `language`, `suitability_tier`, and `popularity_threshold` filters.

Find ad-free interview shows:

```bash theme={"dark"}
curl --get "https://api.particle.pro/v1/podcasts" \
  --data-urlencode "guest_frequency=regular,always" \
  --data-urlencode "has_ads=false" \
  -H "X-API-Key: $PARTICLE_API_KEY"
```

Find 20–40 minute commute-length business shows that are still publishing:

```bash theme={"dark"}
curl --get "https://api.particle.pro/v1/podcasts" \
  --data-urlencode "topic_id=business" \
  --data-urlencode "min_avg_episode_minutes=20" \
  --data-urlencode "max_avg_episode_minutes=40" \
  --data-urlencode "publishing_status=active" \
  -H "X-API-Key: $PARTICLE_API_KEY"
```

Find weekday-daily news briefs (solo-narrated, \~5+ episodes a week):

```bash theme={"dark"}
curl --get "https://api.particle.pro/v1/podcasts" \
  --data-urlencode "format_signal=solo_narrated" \
  --data-urlencode "min_episodes_per_week=4" \
  -H "X-API-Key: $PARTICLE_API_KEY"
```

| Parameter                                             | Matches                                                                                                                                                             |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `guest_frequency`                                     | Comma-separated list of buckets; a podcast matches any listed bucket.                                                                                               |
| `format_signal`                                       | Comma-separated list of signals; a podcast matches any listed signal.                                                                                               |
| `has_ads`                                             | `true` or `false`. `false` is an assertion of ad-free-ness and requires enough analyzed episodes — sparsely-analyzed shows are excluded rather than presumed clean. |
| `has_video`                                           | `true` or `false`.                                                                                                                                                  |
| `min_avg_episode_minutes` / `max_avg_episode_minutes` | Bounds on average episode length.                                                                                                                                   |
| `min_episodes_per_week` / `max_episodes_per_week`     | Bounds on publishing cadence.                                                                                                                                       |
| `publishing_status`                                   | `active` or `dormant`.                                                                                                                                              |

Format filters only match podcasts whose profile supports the claim — podcasts without
enough analyzed episodes are excluded from role-derived filters rather than guessed at.

## Limitations

* **Sample-based.** Role-derived attributes (`guest_frequency`, `signals`, `has_ads`)
  require at least 5 analyzed episodes; below that they are omitted and the podcast
  won't match those filters. Check `analyzed_episodes` on the full profile for the
  sample behind any claim.
* **Cadence needs observation time.** `episodes_per_week` measures the trailing 90 days
  and is omitted for shows tracked more briefly — a show's full back catalog isn't part
  of the measurement, so cadence reflects current behavior, not lifetime averages.
* **Dormancy is time-derived.** `publishing_status` flips to `dormant` 90 days after the
  latest tracked episode; a seasonal show between drops will read as dormant until its
  next release.

## Related

* [Guests](/podcasts/guests) — the people behind `guest_frequency`: lifetime guest profiles, appearances, and trends.
* [Advertising](/podcasts/advertising) — the full sponsor breakdown behind `has_ads`.
* [Episodes](/podcasts/episodes) — per-episode speakers, durations, and videos.
* [Brand Suitability](/podcasts/suitability) — the other show-level assessment surfaced compactly on every podcast object.
