Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/nordicsemi/bluetooth-numbers-database/llms.txt

Use this file to discover all available pages before exploring further.

The attribute schema applies to three data files in the v1/ directory: service_uuids.json, characteristic_uuids.json, and descriptor_uuids.json. All three share an identical structure — an array of objects, each representing a single GATT attribute. The schema is defined in v1/attribute_schema.json and is enforced by AJV on every CI run via npm test.

Full schema

{
  "type": "array",
  "items": {
    "type": "object",
    "properties": {
      "uuid": { "type": "string", "pattern": "^([A-F0-9]{4}|[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12})$" },
      "identifier": { "type": "string" },
      "name": { "type": "string" },
      "source": { "type": "string" }
    },
    "required": [
      "uuid",
      "identifier",
      "name",
      "source"
    ]
  }
}

Field-by-field breakdown

Each item in the array must be an object containing the following four required fields.
uuid
string
required
The unique identifier for the GATT attribute. Must be an ALL UPPERCASE hexadecimal string in one of two formats:
  • 16-bit (4 characters): e.g. 180D for Heart Rate Service
  • 128-bit (36 characters): e.g. EF680100-9B35-4933-9B10-52FFA9740042 for Nordic Thingy Configuration Service
The value must match the pattern:
^([A-F0-9]{4}|[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12})$
Lowercase letters are not permitted and will fail schema validation.
identifier
string
required
A reverse-dot Uniform Type Identifier (UTI) string that sets the context of the attribute. Follow the naming convention:
(reverse domain URL).(attribute type).(generic use case).(specific use case)
Examples: org.bluetooth.service.heart_rate, com.nordic.characteristic.configuration. Identifier values must also be unique across the entire data file — duplicate identifiers are caught by verify.js.
name
string
required
The human-readable name of the GATT attribute. For standard SIG-defined attributes this should match the official GATT Specification name (e.g. "Heart Rate", "Battery Level"). For vendor-defined attributes, use the vendor’s published name.
source
string
required
Indicates the origin of the UUID definition. Common values used in the database:
  • gss — GATT Specification Sheet; used for all standard SIG-defined services, characteristics, and descriptors
  • nordic — Nordic Semiconductor proprietary UUID
  • Other vendor names or short identifiers for third-party proprietary UUIDs

UUID format rules

The uuid field must be uppercase hexadecimal and conform to exactly one of the two formats defined in the Bluetooth Core Specification. 16-bit format — four uppercase hex characters representing a standard Bluetooth SIG assigned number:
180D
128-bit format — thirty-six characters in the canonical UUID layout 8-4-4-4-12, using uppercase hex digits and hyphens only:
EF680100-9B35-4933-9B10-52FFA9740042
No other lengths or formats are accepted. Mixed case, curly braces, or missing hyphens will all fail validation.

Valid example

The following is a valid entry for the Heart Rate GATT Service (service_uuids.json):
{
  "uuid": "180D",
  "identifier": "org.bluetooth.service.heart_rate",
  "name": "Heart Rate",
  "source": "gss"
}
And a valid 128-bit vendor entry (service_uuids.json):
{
  "uuid": "EF680100-9B35-4933-9B10-52FFA9740042",
  "identifier": "no.nordicsemi.service.thingy_configuration",
  "name": "Thingy Configuration Service",
  "source": "nordic"
}

Invalid examples

The following entries would fail validation and cause the CI check to break.Lowercase UUID — the schema pattern requires uppercase hex only:
{
  "uuid": "180d",
  "identifier": "org.bluetooth.service.heart_rate",
  "name": "Heart Rate",
  "source": "gss"
}
Missing required field — all four fields are required; omitting source causes a schema error:
{
  "uuid": "180D",
  "identifier": "org.bluetooth.service.heart_rate",
  "name": "Heart Rate"
}
Wrong UUID format — a 3-character UUID is neither 4-char nor 36-char and does not match the pattern:
{
  "uuid": "18D",
  "identifier": "org.bluetooth.service.example",
  "name": "Example Service",
  "source": "gss"
}
128-bit UUID with lowercase letters — mixed case fails the uppercase-only regex:
{
  "uuid": "ef680100-9b35-4933-9b10-52ffa9740042",
  "identifier": "no.nordicsemi.service.thingy_configuration",
  "name": "Thingy Configuration Service",
  "source": "nordic"
}
When contributing a new 128-bit UUID, generate it with a UUID v4 generator (for example, uuidgen on macOS/Linux or an online generator) and then convert the entire string to uppercase before adding it to the data file. Most generators output lowercase by default.

Build docs developers (and LLMs) love