Auracast logoAuracast QR Generator

How Auracast QR codes are generated

Every Auracast QR code contains a specially formatted text string — a Bluetooth URI. This page walks through exactly what that string contains and how it is built, field by field.

The URI at a glance

The string follows the Bluetooth SIG Auracast specification. Here is a complete example for a broadcast called “Airport” with a public Bluetooth address and a High Quality stream:

BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6;BI:1A2B3C;HQ:1;;

Each piece of information is separated by a semicolon. The string always ends with a double semicolon. ;. The string always ends with a double semicolon. ;;.

What each field means

UUID:184F

Auracast service identifier

This never changes. 184F is the Bluetooth SIG-assigned UUID for Public Broadcast Audio — it tells any scanning device that this QR code is for an Auracast broadcast, not a regular Bluetooth device.

Example value: 184F

BN:<base64>

Broadcast Name

The human-readable name of the broadcast, encoded in Base64. Base64 converts text into a safe sequence of printable characters so that any name — including accented letters or non-English characters — survives intact inside the URI. For example, the name “Airport” becomes QWlycG9ydA==. The == at the end is standard Base64 padding.

Example value: QWlycG9ydA==

AT:<0 or 1>optional

Address Type

Describes the kind of Bluetooth address the broadcaster is using. 0 means a public (permanent) address — the same every time. 1 means a random address, which some devices rotate for privacy. Only included in the URI when an Advertiser Address is also provided.

Example value: 0

AD:<12 hex chars>optional

Advertiser Address

The Bluetooth MAC address of the broadcasting device, written as 12 uppercase hexadecimal characters with no colons. For example, A1:B2:C3:D4:E5:F6 becomes A1B2C3D4E5F6. Including this helps a receiver lock onto the exact broadcaster rather than any nearby device with the same name.

Example value: A1B2C3D4E5F6

BI:<hex>optional

Broadcast ID

A unique identifier for the broadcast stream, written in hexadecimal (1 to 6 characters). This is assigned by the broadcaster and distinguishes it from other Auracast streams in the same area.

Example value: 1A2B3C

Note: while the Broadcast ID is technically required by the Auracast specification, many real-world implementations omit it without issue. Most transmitters run only a single broadcast at a time, so receiver devices can identify the stream without an explicit ID — and popular platforms such as Google Pixel handle its absence gracefully. In practice, you'll frequently encounter working Auracast deployments where this field is not present.

SQ:1optional

Standard Quality stream

Present only when the broadcast includes a Standard Quality audio stream. Standard Quality uses less bandwidth — useful for speech, announcements, or lower-power scenarios. If this stream is not available, the field is omitted entirely.

Example value: SQ:1

HQ:1optional

High Quality stream

Present only when the broadcast includes a High Quality audio stream. High Quality delivers richer, fuller sound — better for music, entertainment, or premium listening experiences. Both SQ:1 and HQ:1 can appear together if the broadcaster offers both.

Example value: HQ:1

BC:<base64>optional

Broadcast Code

Only present for encrypted broadcasts. This is the passcode a listener needs to access the audio, encoded in Base64. The raw passcode is padded to exactly 16 bytes before encoding, ensuring a consistent length. Without the correct code, a device can see the broadcast exists but cannot decrypt the audio.

Example value: bXlrZXkAAAAAAAAAAAAAAA==

Why Base64?

The Auracast URI format uses semicolons as separators. If a broadcast name contained a semicolon, it would break the structure. Base64 solves this: it converts any text — including special characters, emoji, or non-English scripts — into a string that only uses the 64 safe characters A–Z a–z 0–9 + / plus optional = padding.

Input text"Airport"
Base64QWlycG9ydA==
Input text"Café du Monde"
Base64Q2Fmw6kgZHUgTW9uZGU=

Notice how the accented é in “Café” is handled cleanly — the Base64 output looks nothing like the input, but it decodes back perfectly every time.

Try it yourself in a terminal

macOS — Terminal

Encode

echo -n "Your Broadcast Name" | base64

Decode

echo "WW91ciBCcm9hZGNhc3QgTmFtZQ==" | base64 --decode

Linux — Terminal

The commands are identical to macOS.

Encode

echo -n "Your Broadcast Name" | base64

Decode

echo "WW91ciBCcm9hZGNhc3QgTmFtZQ==" | base64 --decode

Windows — PowerShell

Windows doesn’t have a built-in base64 command, but PowerShell handles it natively. The extra step specifying UTF-8 ensures accented or non-English characters encode correctly.

Encode

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("Your Broadcast Name"))

Decode

[System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String("WW91ciBCcm9hZGNhc3QgTmFtZQ=="))

On macOS and Linux, the -n flag on echo is important — without it a trailing newline gets included in the encoding and the result will be wrong.

A worked example

Let’s build the URI step by step for this broadcast:

Broadcast Name"Airport"
Broadcast ID1A2B3C
Address TypePublic (0)
Advertiser AddressA1:B2:C3:D4:E5:F6
QualityHigh Quality only
EncryptedNo
1

Start with the Auracast service identifier

BLUETOOTH:UUID:184F

This prefix is fixed — it never changes.

2

Append the Broadcast Name

BLUETOOTH:UUID:184F;BN:QWlycG9ydA==

“Airport” → Base64 encoded → QWlycG9ydA==

3

Append the Address Type

BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0

0 = public address

4

Append the Advertiser Address

BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6

Colons removed, uppercase — A1:B2:C3:D4:E5:F6 → A1B2C3D4E5F6

5

Append the Broadcast ID

BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6;BI:1A2B3C

The unique hex identifier for this stream

6

Append the quality flag

BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6;BI:1A2B3C;HQ:1

HQ:1 is added because High Quality is selected. SQ:1 is omitted.

7

Close with a double semicolon

BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6;BI:1A2B3C;HQ:1;;

The trailing ;; signals the end of the Auracast URI.

The complete URI

This is the final string that gets embedded into the QR code. Any compatible Bluetooth device can scan it and connect directly to the broadcast.

BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6;BI:1A2B3C;HQ:1;;

The QR code is generated from this string at the highest error-correction level available, so the code remains scannable even if part of it is obscured or damaged.

Try it yourself

Fill in your broadcast details and watch the URI update in real time.

Open the generator

New to Auracast? Read our introduction →