---
title: "Get a podcast's latest brand suitability assessment"
method: GET
path: "/v1/podcasts/{id}/suitability"
tags: ["Podcasts", "tier:premium"]
---

# Get a podcast's latest brand suitability assessment

`GET /v1/podcasts/{id}/suitability`

## Request

- Base URL: `https://api.particle.pro`
- URL: `https://api.particle.pro/v1/podcasts/{id}/suitability`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Returns the most recent brand suitability assessment for a podcast against the IAB Tech Lab Content Taxonomy 3.x Brand Safety & Suitability Framework (the industry-standard 12-category taxonomy formerly stewarded by GARM): overall tier, per-category prevalence and treatment, evidence excerpts from sampled episodes, and the methodology that produced the rating. Pass include=trend for a deterministically-derived comparison against the prior assessment, or include=history for the list of prior assessments. Returns 404 when the podcast is not found or has not yet been analyzed.

## Path parameters

- `id` string, required: Podcast slug (e.g., 'all-in'), internal ID, or numeric iTunes ID

## Query parameters

- `include` string[], nullable: Optional response sections. Pass include=trend for a deterministically-derived comparison against the prior assessment, include=history for the list of prior assessments, or include=trend,history for both.

## Response `200`

OK

- PodcastSuitabilityAnalysis
  - `categories` PodcastSuitabilityCategory[], nullable, required: Per-category breakdown across all 12 brand-safety categories. Always 12 entries even when prevalence is NONE — the assessment records that every category was actively considered.
    - `code` string, required: Brand-safety category code (IAB Tech Lab Content Taxonomy 3.x): adult_sexual, arms_ammunition, crime_harmful_acts, death_injury_military_conflict, online_piracy, hate_speech_aggression, obscenity_profanity, illegal_drugs_alcohol_tobacco, spam_harmful, terrorism, debated_social_issues, misinformation.
    - `description` string, required: Human-readable description of the category.
    - `evidence` PodcastSuitabilityEvidence[], nullable: Episode-grounded evidence excerpts. Present when prevalence is anything other than NONE.
      - `episode_id` string, required: Episode the excerpt is drawn from.
      - `episode_slug` string: Episode slug.
      - `episode_title` string, required: Episode title.
      - `excerpt` string, required: Verbatim excerpt or paraphrase grounding the finding.
    - `prevalence` string, required: How often the category appears in the analyzed window: NONE, INCIDENTAL, OCCASIONAL, FREQUENT, PERVASIVE.
    - `reasoning` string, required: Customer-facing justification for the prevalence + treatment finding.
    - `risk_level` string, required: Risk level derived deterministically from prevalence, treatment, and category. NONE, LOW, MEDIUM, HIGH, or FLOOR (violates the Brand Safety Floor).
    - `treatment` string, required: How the category is framed: ABSENT, DOCUMENTARY (neutral journalism), EDITORIAL (opinion or comedy), PROMOTIONAL (endorsement without celebration), or GLAMORIZING (celebrating/normalizing).
    - `verdict_basis` string: Source of signal for this finding: 'content' means the show's editorial substance surfaces the category (host monologue, narrative, journalism, opinion, comedy); 'advertising' means only the show's sponsor ad-reads surface it; 'both' means both editorial and advertising signals are present. Use this to filter findings driven by editorial content separately from findings driven by sponsor adjacency. Omitted when the category was not observed (prevalence is NONE).
  - `confidence` string, required: Agent confidence in the verdict: LOW, MEDIUM, or HIGH.
  - `episodes_analyzed` integer: Number of episodes that informed the assessment.
  - `evaluated_at` string, date-time, required: When the assessment was performed.
  - `history` PodcastSuitabilityHistoryEntry[], nullable: Prior assessments ordered most-recent first. Present when include=history.
    - `confidence` string, required
    - `episodes_analyzed` integer, required
    - `evaluated_at` string, date-time, required
    - `overall_tier` string, required
    - `sample_window_end_at` string, date-time, required
    - `sample_window_start_at` string, date-time, required
  - `methodology` string, required: Note on what the agent sampled (segments + transcripts read, sponsor cross-checks).
  - `overall_tier` string, required: Suitability verdict: SAFE (Low Risk), LIMITED (Medium), SENSITIVE (High), or UNSAFE (Brand Safety Floor).
  - `sample_episode_ids` string[], nullable: Episode IDs in the contiguous window the agent analyzed.
  - `sample_window_end_at` string, date-time, required: Published-at of the newest episode in the assessment window.
  - `sample_window_start_at` string, date-time, required: Published-at of the oldest episode in the assessment window.
  - `summary` string, required: Customer-facing 2-4 sentence explanation of the verdict.
  - `trend` PodcastSuitabilityTrend
    - `changed_categories` PodcastSuitabilityTrendChange[], nullable: Categories whose prevalence or treatment changed between assessments.
      - `code` string, required
      - `new_prevalence` string, required
      - `new_risk_level` string, required
      - `new_treatment` string, required
      - `prior_prevalence` string, required
      - `prior_risk_level` string, required
      - `prior_treatment` string, required
    - `direction` string, required: INSUFFICIENT_HISTORY (fewer than two assessments), STABLE, IMPROVING, or DECLINING.
    - `prior_evaluated_at` string, date-time: When the prior assessment was performed. Omitted when there is no prior.

## Other responses

- `402`: Payment Required. Read error_code. payment_required is the x402 path: either a keyless request being challenged — pay $0.04 in USDC per request (requirements in the PAYMENT-REQUIRED header) or send a pp_ API key — or a supplied payment that failed settlement (details in the PAYMENT-RESPONSE header; retry the same signature before signing a new one). See https://docs.particle.pro/x402. Any other code means the credential was accepted but does not cover this request (a plan or session gate such as premium_required or paid_plan_confirmation_required); its resolve says how to obtain access, and no payment header is sent.
- `default`: Error

---

[API](https://skmtc.dev/particle/apis/particle-api.md) · [All operations](https://skmtc.dev/particle/apis/particle-api/llms.txt) · [OpenAPI document](https://skmtc.dev/particle/apis/particle-api/revisions/416ba82ab9d7?raw)
