---
title: "Look up podcasts by external platform identifier"
method: GET
path: "/v1/podcasts/lookup"
tags: ["Podcasts", "tier:standard"]
---

# Look up podcasts by external platform identifier

`GET /v1/podcasts/lookup`

## Request

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

Resolves one or more external platform identifiers (Apple Podcasts collection IDs, Spotify show IDs, YouTube channel IDs, …) or show links — or RSS feed URLs via `platform=rss` — to Particle podcasts. Paste a show's Apple Podcasts, Spotify or YouTube URL, its page on any other platform, or its feed URL as it is and it is resolved by what it points to; `platform` is then optional and links from different platforms may share a call. Bare identifiers need `platform`. Pass a comma-separated list (up to 100 per call). Each result echoes the input identifier alongside the matched podcast; unresolved identifiers omit the `podcast` field entirely so bulk callers can correlate inputs and outputs by key presence without doing a separate join. Use this when you already hold platform-native IDs and want a deterministic mapping; for fuzzy name search use GET /v1/podcasts/search.

## Query parameters

- `platform` string: External platform slug (e.g. 'apple', 'spotify', 'youtube'), case-insensitive. Optional when every identifier is a link: a show's page on any platform listed on /v1/podcasts/{id}/external-links responses (Apple Podcasts, Spotify, YouTube, …), a spotify:show: URI, or the show's feed or website URL is resolved by what it points to. Needed for bare identifiers: one of the slugs reported on external-links responses, or one of the in-house aliases 'itunes' (alias for 'apple'), 'x' (alias for 'twitter') and 'rss' (match against the canonical podcast feed URL).
- `identifier` string[], nullable, required: One or more platform-native identifiers or show links to resolve. Pass a comma-separated list to look up many at once (max 100 per call); links from different platforms may be mixed. Matching ignores case, so 'thepeelpod' finds the podcast whose X handle is 'ThePeelPod'; URLs ('rss', 'website') are the exception and match exactly.

## Response `200`

OK

- PodcastLookup
  - `results` PodcastLookupResult[], nullable, required: One result per unique input identifier, in request order
    - `identifier` string, required: The platform-native identifier as supplied in the request
    - `podcast` PodcastCompact
      - `best_rank` PodcastRankingHandle
        - `captured_at` string, date-time, required
        - `category_slug` string
        - `chart_type` 'top_podcasts', required
        - `country` string
        - `rank` integer, required
        - `source` 'apple' | 'spotify', required
      - `id` string, required: Podcast ID
      - `image_url` string: Cover image URL
      - `popularity` number, double: Global popularity percentile in (0,1], a cume_dist ranking over all currently-charting podcasts (Apple Podcasts charts). Higher is more popular. Omitted when the podcast is not currently charting, on endpoints that build this resource from a projection rather than the full podcast row, and in episode stream, feed and archive payloads, which are stored and replayed: read it live from the podcast endpoints.
      - `publisher` PodcastPublisherCompact
        - `id` string, required: Publisher ID
        - `name` string, required: Publisher name
        - `slug` string: Human-readable slug identifier (e.g., 'goalhanger', 'iheartpodcasts'). When present, accepted in place of the ID anywhere a publisher reference is taken in the API. Occasionally absent on publishers whose name doesn't slugify (e.g., scripts not representable in ASCII URL slugs).
      - `slug` string: Human-readable slug identifier
      - `title` string, required: Podcast title

## Other responses

- `402`: Payment Required. Read error_code. payment_required is the x402 path: either a keyless request being challenged — pay $0.01 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)
