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

# SDKs

> Official client libraries for the RadioTools listener API, with a full TypeScript client, framework bindings, and REST starters for other languages.

The RadioTools SDKs wrap the [listener API](/radiotools/api-reference/overview) so your website, app, or encoder automation does not need to build requests, follow resource links, or parse responses by hand. They are open source (MIT) and live in the [radiotools-sdk repository](https://github.com/rivi-software/radiotools-sdk).

All SDKs target **listener contract v1** and cover station-facing routes only. Studio administration is not part of the SDKs.

## Choose an SDK

<CardGroup cols={2}>
  <Card title="TypeScript" href="/radiotools/api-reference/sdks/typescript">
    The complete client: REST, GraphQL, the public realtime feed, ETag caching, retries, and playback ingest.
  </Card>

  <Card title="Framework bindings" href="/radiotools/api-reference/sdks/frameworks">
    React hooks, Vue composables, Svelte stores, and Next.js server helpers.
  </Card>

  <Card title="Other languages" href="/radiotools/api-reference/sdks/other-languages">
    Starter REST clients for Python, Go, .NET, Ruby, PHP, Kotlin, and Swift.
  </Card>
</CardGroup>

| You are building | Start with |
| - | - |
| A Node.js, Bun, or edge backend for a listener site | [TypeScript](/radiotools/api-reference/sdks/typescript) |
| A Next.js site | [Next.js helpers](/radiotools/api-reference/sdks/frameworks#next-js) |
| A React, Vue, or Svelte front end that polls a server | [Framework bindings](/radiotools/api-reference/sdks/frameworks) |
| An encoder or automation that reports now-playing tracks | [Playback ingest](/radiotools/api-reference/sdks/typescript#report-playback) |
| A backend in another language | [Other languages](/radiotools/api-reference/sdks/other-languages), or call the [HTTP operations](/radiotools/api-reference/public-listener/get-station) directly |

## Feature support

Only the TypeScript client has the full feature set. The framework bindings take a TypeScript client, so you keep its full feature set. The other languages are minimal REST starters.

| Capability | TypeScript and framework bindings | Other languages |
| - | - | - |
| Published content, schedule, now playing, weather, traffic | Yes | Starter methods; some need extension |
| Content by slug, sorting, and field filters | Yes | No |
| GraphQL transport | Yes | No |
| Public realtime feed | Yes, from a server or a browser | No |
| ETag conditional reads | Yes | No |
| Automatic retries on `429` and `503` | Yes | No |
| Response validation | Yes (Zod) | No |
| Draft preview handoff | Yes | No |
| Playback ingest | Yes | Yes |

## Credentials

Create keys in the dashboard — see [Integrations](/radiotools/station-admin/integrations) and [Authentication](/radiotools/api-reference/authentication).

| Use | Credential | Scope | Environment variable |
| - | - | - | - |
| Website, app, or player backend | Station key | `listener:read` | `RADIOTOOLS_API_TOKEN` |
| Encoder or automation | Integration key named `playback` | `ingest:write` | `RADIOTOOLS_INGEST_TOKEN` |

Pass the raw `rtm_…` secret. The SDK adds the `Bearer ` prefix. Keep both keys on your server; browser code should talk to your own backend, never to RadioTools with a station key. The [public realtime feed](/radiotools/api-reference/sdks/typescript#realtime-updates) is the exception: it needs no key, so a browser can subscribe to it directly.

The TypeScript, Next.js, Python, Go, .NET, Ruby, and PHP clients have a helper that reads the same environment variables. Kotlin and Swift take the values as arguments.

| Variable | Required | Purpose |
| - | - | - |
| `RADIOTOOLS_BASE_URL` | Yes | RadioTools origin, for example `https://radiotools.rivi.software` |
| `RADIOTOOLS_STATION_SLUG` | Yes | The station to read from |
| `RADIOTOOLS_API_TOKEN` | For reads | Station key with `listener:read` |
| `RADIOTOOLS_INGEST_TOKEN` | For ingest | Integration key with `ingest:write` |

## Versioning

The npm packages (`@rivi-software/radiotools-sdk`, the React, Vue, Svelte, and Next.js bindings, and `@rivi-software/radiotools-contract`) share one version number and are released together. The current release is 0.3.0. Use 0.3.0 or later for the public realtime feed, content by slug, sorting and field filters, the draft preview handoff, and the `card` and `square` media variants.

The other-language starters are not part of this release group; see [Other languages](/radiotools/api-reference/sdks/other-languages#packages).

The listener contract is versioned separately through `contractVersion` — see [Errors and versioning](/radiotools/api-reference/errors-and-versioning).

## Alternatives

* Download the [OpenAPI 3.1 document](/radiotools/openapi.json) to generate a client in any language or to import into API tools.
* Use [GraphQL](/radiotools/api-reference/graphql) directly with any GraphQL client.


## Related topics

- [API overview](/radiotools/api-reference/overview.md)
- [Errors and versioning](/radiotools/api-reference/errors-and-versioning.md)
- [TypeScript SDK](/radiotools/api-reference/sdks/typescript.md)
- [Other languages](/radiotools/api-reference/sdks/other-languages.md)
- [Framework bindings](/radiotools/api-reference/sdks/frameworks.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.