canonical: https://jentic.com/apis/npr.org/station-finder

# NPR Station Finder Service

The NPR Station Finder service resolves geographic, ZIP, or station ID lookups into structured NPR member station data. It returns each station's call sign, frequency, broadcast streams, member affiliations, and donation portal URL. Two endpoints under `/v3/stations` cover both list-search and single-station retrieval, making it the canonical way to render the right local NPR station inside listener-facing apps.

## For AI agents

Resolve a listener's location or station ID into NPR member station metadata, including stream URLs and donation pages. Two operations under `/v3/stations.`

## Scope

Does not handle audio playback, podcast search, or sponsorship insertion - use for NPR member station lookup and metadata only.

## Capabilities

- Search NPR member stations by latitude, longitude, ZIP, city, or state
- Retrieve a single station's full profile via GET `/v3/stations/{stationId}`
- Surface live audio stream URLs for HD and standard NPR broadcasts
- Expose donation and pledge URLs scoped to each member station
- Return programming and call-sign metadata for downstream client apps

## Use cases

### Local Station Resolution in NPR-Powered Apps

News apps and smart speakers use the Station Finder to translate a listener's coordinates into the right local NPR affiliate, returning the live stream URL needed to start playback. The `/v3/stations` endpoint accepts lat/lon and ZIP queries and ranks results so the top match represents the listener's primary local station, with no client-side station database required.

Example prompt: Call GET `/v3/stations` with lat=37.7749&lon=-122.4194 and return the streamUrl of the top KQED result

### Pledge-Drive Donation Routing

During NPR pledge drives, third-party apps must route donation buttons to each listener's correct local affiliate. The Station Finder returns a donationUrl per station, so the app can deep-link the user to the right pledge portal without hardcoded mappings. This is essential for compliance with NPR's member-station revenue-share model.

Example prompt: Resolve the listener's station via GET `/v3/stations/{stationId}`=305 and surface donationUrl in the in-app pledge button

### AI Agent Public Radio Discovery via Jentic

Voice agents and chat assistants use Jentic to find the Station Finder, search for stations matching a location intent, and execute the call with isolated OAuth credentials. The agent never holds NPR client secrets, but can resolve "play my local public radio" into a concrete `/v3/stations` request and a stream URL.

Example prompt: Use Jentic to search 'find my local NPR station', load `/v3/stations`, and execute it with the user's geolocation

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/v3/stations` | Search NPR member stations by location or other criteria |
| GET | `/v3/stations/{stationId}` | Retrieve a specific NPR member station's profile |

## Key resources

- **Stations** — Search and detail-retrieval operations for NPR member stations

## Why Jentic

- **Setup:** Wiring the NPR Station Finder Service by hand means carrying OAuth credentials into calls to station.api.npr.org and mapping the station lookup and metadata operations yourself. Through Jentic you install once, import the NPR Station Finder Service from the API Directory, store the credentials once, and your agent calls it.
- **Permission scoping:** This service puts the station id in the URL path (`/v3/stations/{stationId}`), so a rule can pin your agent to one station and nothing else. Both operations here are read-only lookups, so you choose whether the agent lists stations, reads a single station, or both.
- **Credential handling:** Your NPR OAuth client credentials are stored once, encrypted, by your own Jentic One instance and injected at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'find my local NPR station', and Jentic returns the GET `/v3/stations` operation with its query schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **NPR Station Finder Service** — Identical v3 station-finder spec hosted under a longer slug
- **NPR Sponsorship Service** — Returns sponsor audio spots that must play between NPR segments
- **Listen Notes** — Cross-publisher podcast and audio search platform

## FAQ

### What authentication does the NPR Station Finder use?

It uses OAuth 2.0 authorization code flow against https://authorization.api.npr.org/v2/token, with scopes including identity.readonly and listening.readonly. Through Jentic, OAuth client credentials are vaulted and only short-lived tokens reach agent execution context.

### Can I look up NPR stations by ZIP code with the NPR Station Finder?

Yes. GET `/v3/stations` accepts ZIP, city, state, and lat/lon parameters and returns ranked station matches with stream URLs and donation pages.

### What are the rate limits for the NPR Station Finder?

NPR's developer documentation at https://dev.npr.org/guide/services/station-finder does not publish a hard rate limit, but partner apps are expected to cache station results since the data updates infrequently.

### How do I retrieve a single NPR station's profile through Jentic?

Search Jentic for 'NPR station details by ID', load the GET `/v3/stations/{stationId}` schema, and execute with the numeric station ID. The flow is pip install jentic, then await client.search, load, and execute.

### Is the NPR Station Finder free to use?

Access requires registering an OAuth client at https://dev.npr.org. NPR does not charge for the API but limits use to apps under its NPR One Enterprise terms.

### Can I limit what my agent is allowed to do with the NPR Station Finder API?

Yes. Because you run Jentic One yourself, your own rules decide which of this API's operations and credentials the agent may use. Both operations here are read-only lookups, so you can allow the agent to search stations with GET `/v3/stations`, read one station with GET `/v3/stations/{stationId}`, or both. Since the station id sits in the URL path, a rule can pin the agent to a single station and block everything else.
