---
title: Azuracast
toc_min_heading_level: 2
toc_max_heading_level: 5
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
import AzuracastConfig from '!!raw-loader!@site/../config/azuracast.json.example';
import ShouldScrobble from "@site/src/components/snippets/_should-scrobble-details.mdx"

:::tip[Scrobbling Threshold]

Azuracast may not correctly report track length or position. If this is the case you should reduce the "listened to" **duration** using [Scrobble Thresholds](/configuration/sources#scrobble-thresholds) so that multi-scrobbler scrobbles correctly.

:::

The Azuracast server should have **Use [High-Performance Now Playing Updates](https://www.azuracast.com/docs/developers/now-playing-data/#high-performance-updates)** enabled in _Administration -> System Settings_

### URL

The URL used by MS to connect to Azuracast has the syntax:

```
[ws|wss]://HOST:[PORT]
```

MS will automatically add the path required for websockets, [`/api/live/nowplaying/websocket`](https://www.azuracast.com/docs/developers/now-playing-data/#websockets), to your URL if none is provided. If you use a reverse proxy with a path-based URL or otherwise need a custom path to access the websockets path correctly then explicitly provide it. Examples:

```
URL From Config                => MS Uses

'ws://192.168.0.101'                 => ws://192.168.0.101/api/live/nowplaying/websocket
'ws://azura.mydomain.com'            => ws://azura.mydomain.com.com/api/live/nowplaying/websocket
'wss://mydomain.com/custom/azura/ws' => wss://mydomain.com/custom/azura/ws
```

<ShouldScrobble filename="azuracast"/>

Multi-scrobbler will set the default **scrobbling behavior** based on if either of these settings is configured:

* live status (`AZURA_LIVE` or `monitorWhenLive`) or
* listener count (`AZURA_LISTENERS_NUM` or `monitorWhenListeners`)

If either is configured then MS will automatically scrobble based on when these conditions are met.

If neither is configured automatic scrobble defaults to **off** and you should either manually initiate it or explicitly set the default behavior.

### Station

#### Station Identifier

The station identifier multi-scrobbler uses (ENV `AZURA_STATION` or `station` in File/AIO config) needs to be the **URL Stub** or **shortcode** of the Azuracast station, **not** its display name. Use of the methods below to find an apprioriate station identifier.

<Tabs groupId="stationId" queryString>
<TabItem value="stub" label="URL Stub">
The **URL Stub** is the value used in the URL to access the station EX

```
https://azura.mydomain.com/public/my-cool-station
                                  ^^^^ url stub ^^
```

Use `my-cool-station` as the station identifier.
</TabItem>
<TabItem value="shortcode" label="Shortcode">
The **shortcode** can be found in the raw JSON response for your station. Navigate to this URL in your browser:

```
https://azura.mydomain.com/api/stations
```

Find your station in the returned data (by `name`) and then locate the value of the `shortcode` property in that object.

<details>

<summary>Example</summary>

```json
[
    {
        "id": 1,
        "name": "My Cool Station",
        "shortcode": "my-cool-station",
        "description": "Re-broadcasts of my cool music",
        "frontend": "icecast",
        "backend": "liquidsoap",
        ...
```

Use `my-cool-station` as the station identifier.
</details>
</TabItem>
</Tabs>

#### Station Access

Multi-Scrobbler does not use authentication to communicate with Azuracast. Your station will likely need some form of **Public Pages** in order for you to monitor it.

In your station's **Edit Station Settings** -> **Public Pages** make sure that at least one of these is enabled:

* Enable Public Pages
* Enable Public APIs

:::note

For users who aren't administrators of Azuracast: if you can access the station using `https://azura.mydomain.com/public/xxxxxx` then it is public.

:::

## Configuration

<Config config="AzuracastSourceConfig" fileContent={AzuracastConfig} name="azuracast">
        | Environmental Variable | Required? | Default | Description                                                                                    |
        | :--------------------- | :-------- | :------ | ---------------------------------------------------------------------------------------------- |
        | `AZURA_ID`             | Yes       |         | A unique ID                                                                                    |
        | `AZURA_URL`            | Yes       |         | Azuracast URL *without station name*                                                           |
        | `AZURA_STATION`        | Yes       |         | The station URL Stub or shortcode                                                              |
        | `AZURA_LIVE`           | No        | Yes     | Only scrobble when station status is ONLINE                                                    |
        | `AZURA_LISTENERS_NUM`  | No        | `true`  | Only scrobble if station has any listeners (`true`) or listeners are equal-to/greater-than `X` |
        | `AZURA_NAME`           | No        |         | A vanity name different than ID                                                                |
</Config>