BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6;BI:1A2B3C;HQ:1;;
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:
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:184FAuracast 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>optionalAddress 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>optionalAdvertiser 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>optionalBroadcast 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:1optionalStandard 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:1optionalHigh 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>optionalBroadcast 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.
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" | base64Decode
echo "WW91ciBCcm9hZGNhc3QgTmFtZQ==" | base64 --decodeLinux — Terminal
The commands are identical to macOS.
Encode
echo -n "Your Broadcast Name" | base64Decode
echo "WW91ciBCcm9hZGNhc3QgTmFtZQ==" | base64 --decodeWindows — 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:
Start with the Auracast service identifier
BLUETOOTH:UUID:184FThis prefix is fixed — it never changes.
Append the Broadcast Name
BLUETOOTH:UUID:184F;BN:QWlycG9ydA==“Airport” → Base64 encoded → QWlycG9ydA==
Append the Address Type
BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:00 = public address
Append the Advertiser Address
BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6Colons removed, uppercase — A1:B2:C3:D4:E5:F6 → A1B2C3D4E5F6
Append the Broadcast ID
BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6;BI:1A2B3CThe unique hex identifier for this stream
Append the quality flag
BLUETOOTH:UUID:184F;BN:QWlycG9ydA==;AT:0;AD:A1B2C3D4E5F6;BI:1A2B3C;HQ:1HQ:1 is added because High Quality is selected. SQ:1 is omitted.
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.
New to Auracast? Read our introduction →