# RIVI Software Docs - [RadioTools help](https://docs.rivi.software/radiotools/index.md): Prepare broadcasts, publish station content, and manage your team. - [Get started](https://docs.rivi.software/radiotools/getting-started.md): Accept your invitation, sign in, and open the right station. - [Account and stations](https://docs.rivi.software/radiotools/account-and-stations.md): Manage your profile, security, preferences, and active station. - [Daily work](https://docs.rivi.software/radiotools/daily-work/index.md): Find your work, prepare a broadcast, and publish station content. - [Today](https://docs.rivi.software/radiotools/daily-work/today.md): Find upcoming broadcasts, preparation tasks, and editorial work. - [Planning](https://docs.rivi.software/radiotools/daily-work/planning.md): Create programs, schedule broadcasts, and preview calendar changes. - [Show preparation](https://docs.rivi.software/radiotools/daily-work/show-preparation.md): Build a rundown, write scripts, complete tasks, and export a show sheet. - [Editorial](https://docs.rivi.software/radiotools/daily-work/editorial.md): Write drafts, review revisions, and publish station stories and pages. - [Media library](https://docs.rivi.software/radiotools/daily-work/media.md): Upload, organize, preview, and reuse station audio and images. - [Live presentation](https://docs.rivi.software/radiotools/daily-work/live-presentation.md): Use live scripts, presenter control, and broadcast history. - [Studio Information](https://docs.rivi.software/radiotools/daily-work/studio-information.md): Check weather, traffic, and metadata reported by external automation. - [Listener alerts](https://docs.rivi.software/radiotools/daily-work/listener-alerts.md): Compose an alert for subscribed listener apps and check delivery status. - [Assistant](https://docs.rivi.software/radiotools/daily-work/assistant.md): Ask station questions and review proposed changes before applying them. - [Troubleshooting](https://docs.rivi.software/radiotools/daily-work/troubleshooting.md): Recover from failed loads, unsaved changes, conflicts, and access problems. - [Station administration](https://docs.rivi.software/radiotools/station-admin/index.md): Set up your station, team, publishing workflow, and integrations. - [Onboarding checklist](https://docs.rivi.software/radiotools/station-admin/onboarding.md): Confirm station defaults, team access, integrations, and billing. - [Team and invitations](https://docs.rivi.software/radiotools/station-admin/team.md): Invite colleagues and manage station membership, jobs, and support access. - [Roles and access](https://docs.rivi.software/radiotools/station-admin/roles-and-access.md): Control station actions without exposing private staff content. - [Station settings](https://docs.rivi.software/radiotools/station-admin/station-settings.md): Set station defaults, weather and traffic coverage, and listener API access. - [Billing](https://docs.rivi.software/radiotools/station-admin/billing.md): Choose a plan, manage seats, and handle payments as an owner. - [Integrations](https://docs.rivi.software/radiotools/station-admin/integrations.md): Connect listener services and external automation with station credentials. - [Content types](https://docs.rivi.software/radiotools/station-admin/content-types.md): Configure stable fields for station content and listener delivery. - [Editorial policies](https://docs.rivi.software/radiotools/station-admin/editorial-policies.md): Choose workflow stages, authoring modes, review requirements, and publication rules. - [AI settings](https://docs.rivi.software/radiotools/station-admin/ai-settings.md): Turn on RAI, choose features and models, set a house style, and review what leaves the workspace. - [Export station data](https://docs.rivi.software/radiotools/station-admin/export-data.md): Download an authorized JSON copy of station records as an owner. - [API overview](https://docs.rivi.software/radiotools/api-reference/overview.md): APIs for listener websites, mobile apps, and now-playing metadata ingestion. - [Requests and response handling](https://docs.rivi.software/radiotools/api-reference/response-handling.md): Make your first request, follow pagination, handle conditional reads, and distinguish JSON from media and calendar responses. - [Field types and empty states](https://docs.rivi.software/radiotools/api-reference/field-types.md): Understand real values, nullable and optional fields, published content schemas, timestamps, units, and freshness. - [Public delivery](https://docs.rivi.software/radiotools/api-reference/public-delivery.md): CORS, caching, ETags, station gates, pagination, the realtime feed, and now-playing. - [GraphQL](https://docs.rivi.software/radiotools/api-reference/graphql.md): Query published station data with one request, and try queries in the browser. - [GraphQL schema reference](https://docs.rivi.software/radiotools/api-reference/graphql-reference.md): Every query, type, enum, JSON shape, error code, and limit in the listener GraphQL API. - [Authentication](https://docs.rivi.software/radiotools/api-reference/authentication.md): Credentials for listener websites, apps, push registration, and now-playing ingestion. - [Now-playing ingest](https://docs.rivi.software/radiotools/api-reference/now-playing-ingest.md): Send reported track metadata from external automation to RadioTools. - [Errors and versioning](https://docs.rivi.software/radiotools/api-reference/errors-and-versioning.md): ErrorResponse shape, stable codes, pagination, and public API evolution. - [SDKs](https://docs.rivi.software/radiotools/api-reference/sdks/index.md): Official client libraries for the RadioTools listener API, with a full TypeScript client, framework bindings, and REST starters for other languages. - [TypeScript SDK](https://docs.rivi.software/radiotools/api-reference/sdks/typescript.md): Install and use @rivi-software/radiotools-sdk for reads, pagination, the public realtime feed, caching, errors, and playback ingest. - [Framework bindings](https://docs.rivi.software/radiotools/api-reference/sdks/frameworks.md): React hooks, Vue composables, Svelte stores, and Next.js server helpers built on the TypeScript SDK. - [Other languages](https://docs.rivi.software/radiotools/api-reference/sdks/other-languages.md): Starter REST clients for Python, Go, .NET, Ruby, PHP, Kotlin, and Swift, and how to go further with OpenAPI. - [Get station](https://docs.rivi.software/radiotools/api-reference/public-listener/get-station.md): Fails closed (404) for unknown, inactive or public-offline stations. Per-API switches can null individual resource hrefs; disabled APIs return the same NOT_FOUND body as public-offline. `resources.weather` and `resources.traffic` stay null without redistribution entitlement even when their switches… - [List content schemas](https://docs.rivi.software/radiotools/api-reference/public-listener/list-content-schemas.md): Discover published content types and field definitions before rendering records. Use each field's key and kind; labels are for display. Private and system fields are excluded. - [List content](https://docs.rivi.software/radiotools/api-reference/public-listener/list-content.md): Read published snapshots for one content type. Send type=news (replace news with a key from schemas), follow nextCursor until null, and filter only allowlisted delivery fields. Drafts and private values are excluded. - [Get content record](https://docs.rivi.software/radiotools/api-reference/public-listener/get-content-record.md): Retrieve one published content record by its UUID. Interpret values using the matching type and schemaVersion and render the ordered document blocks. Unpublished or inaccessible records are not returned. - [Get content record by slug](https://docs.rivi.software/radiotools/api-reference/public-listener/get-content-record-by-slug.md): Retrieve one published record of a content type by its slug, for routing website URLs. A slug the record used before returns the record with its current values.slug; redirect to the current slug when they differ. Only types with a slug field have slugs. - [Query with GraphQL](https://docs.rivi.software/radiotools/api-reference/public-listener/query-graphql.md): Query the station's published data with GraphQL. Requires a station-scoped Bearer credential with listener:read. GET carries the query in URL parameters, with variables and extensions as JSON-encoded strings; POST accepts a JSON GraphQL request. Send X-Preview-Grant only to read an editorial preview… - [Query with GraphQL (GET)](https://docs.rivi.software/radiotools/api-reference/public-listener/query-graphql-get.md): Query the station's published data with GraphQL. Requires a station-scoped Bearer credential with listener:read. GET carries the query in URL parameters, with variables and extensions as JSON-encoded strings; POST accepts a JSON GraphQL request. Send X-Preview-Grant only to read an editorial preview… - [Get schedule](https://docs.rivi.software/radiotools/api-reference/public-listener/get-schedule.md): Retrieve public broadcasts for an inclusive date window of at most 31 days and at most 1000 broadcasts. Timestamps include their offset; localDate uses the station timezone. A true truncated flag means the window should be narrowed. - [Get schedule calendar feed](https://docs.rivi.software/radiotools/api-reference/public-listener/get-schedule-calendar-feed.md): Subscribe to the station's published schedule as an iCalendar feed using the listener credential. The body is calendar text, not a JSON object. Keep credentials on your server; do not embed tokens in a calendar URL. - [List programs](https://docs.rivi.software/radiotools/api-reference/public-listener/list-programs.md): Retrieve public program summaries for the requested inclusive date window. The window is limited to 31 days; narrow it when truncated is true. - [Get current broadcast](https://docs.rivi.software/radiotools/api-reference/public-listener/get-current-broadcast.md): Read the current public broadcast. A successful response may contain broadcast: null when nothing is current; this is an empty state rather than an HTTP error. - [Get now playing](https://docs.rivi.software/radiotools/api-reference/public-listener/get-now-playing.md): Tenant token with listener:read behind the public station gate. Encoder `sourceTrackId` is omitted. Each `track` may include `artworkUrl` (HTTPS) from ingest or from station artwork lookup (Spotify, Apple Music, or Last.fm) after the observation is stored; the field is omitted when no art is known.… - [List track history](https://docs.rivi.software/radiotools/api-reference/public-listener/list-track-history.md): Tenant token with listener:read behind the public station gate. Omits encoder `sourceTrackId` and provider `eventId`. Each item may include `artworkUrl` when ingest or artwork lookup supplied it. Page with the returned cursor (`id` + observedAt). - [Get weather](https://docs.rivi.software/radiotools/api-reference/public-listener/get-weather.md): Read normalized weather for configured station coverage areas. Check each snapshot's freshness before display. current may be null and forecast arrays may be empty. This endpoint requires an available station resource and redistribution entitlement. - [Get traffic](https://docs.rivi.software/radiotools/api-reference/public-listener/get-traffic.md): Read normalized traffic for the station's watched roads. Check snapshot.freshness before interpreting an empty incidents array as clear traffic. This endpoint requires an available station resource and redistribution entitlement. - [Register a push device](https://docs.rivi.software/radiotools/api-reference/public-listener/register-push-device.md): Requires a tenant-admin credential carrying push:register behind the active public station gate when a provider is configured. Provider must match the station configuration. The device token is stored station-scoped and never associated with a staff user. - [Update push topics](https://docs.rivi.software/radiotools/api-reference/public-listener/update-push-topics.md): Turn alerts and content delivery on or off for a registered device. Unspecified topics keep their current setting. Turning a topic off retains the device token. Requires the same public station gate and push:register tenant credential as registration. - [Unregister a push device](https://docs.rivi.software/radiotools/api-reference/public-listener/unregister-push-device.md): Remove the supplied token from this station. Requires the public station gate or a station credential carrying push:register. - [Get public media](https://docs.rivi.software/radiotools/api-reference/public-listener/get-public-media.md): Fetch published media bytes anonymously. The id is the published version UUID, not the asset ID. Only published media can be delivered. A single Range header can request part of the file; 206 returns bytes, not JSON. - [Get public media variant](https://docs.rivi.software/radiotools/api-reference/public-listener/get-public-media-variant.md): Fetch published media bytes anonymously. The id is the published version UUID, not the asset ID. Only published media can be delivered. A single Range header can request part of the file; 206 returns bytes, not JSON. - [Report now playing](https://docs.rivi.software/radiotools/api-reference/ingest/report-now-playing.md): Requires exactly one of `?stationId=` or `?stationSlug=` (public station slug, same as `/api/v1/stations/{stationSlug}`) plus an integration credential (integration `playback`, scope `ingest:write`) for that same station. Body is at most 8 KiB. Send `artist` and `title`, or a single encoder `streamT… ## OpenAPI Specs - [openapi](/radiotools/openapi.json) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.