# dev.pythonplayer123.music.scrobble

> A completed listen asserted by its author. Each record counts once; repeated tracks at equal times are valid. The fields after recordingMbid are additive optional fields (ADR 0005 §6.2, B13): a validator drops an invalid optional field and never rejects a record for one; remote records stay open and unknown fields are ignored.

- Kind: record
- Record key: tid
- Authority: music.pythonplayer123.dev
- Lexicon: 1
- Published by [pythonplayer123.dev](https://lexicon.garden/identity/did:plc:gsichz64a5qpjvmjktkltkw2), the NSID's authority

## Links

- [Documentation](https://lexicon.garden/lexicon/did:plc:gsichz64a5qpjvmjktkltkw2/dev.pythonplayer123.music.scrobble)
- [Schema JSON](https://lexicon.garden/lexicon/did:plc:gsichz64a5qpjvmjktkltkw2/dev.pythonplayer123.music.scrobble/schema.json)
- [Analytics](https://lexicon.garden/lexicon/did:plc:gsichz64a5qpjvmjktkltkw2/dev.pythonplayer123.music.scrobble/analytics)

## Record (`dev.pythonplayer123.music.scrobble`)

Type: record · key tid

### Properties

- `album` (string): If present, raw 1–256 Unicode scalar values, and nonempty after trimming; enforced by the validator.
  - Constraints: minLength: 1, maxLength: 1024
- `albumArtist` (string): Optional album artist (Last.fm albumArtist, ListenBrainz release_artist_name); raw 1–256 Unicode scalar values, and nonempty after trimming; enforced by the validator.
  - Constraints: minLength: 1, maxLength: 1024
- `artist` (string, required): One credited display string; raw 1–256 Unicode scalar values, and nonempty after trimming. The scalar limit is enforced by the validator.
  - Constraints: minLength: 1, maxLength: 1024
- `artistMbids` (array): Optional unverified MusicBrainz artist UUIDs, at most 10 and distinct; runtime validates UUID syntax.
  - Constraints: maxLength: 10
  - `items` (string)
    - Constraints: maxLength: 36
- `createdAt` (string · datetime, required): Explicit UTC RFC3339, from 1970-01-01 through event receipt time plus 300 seconds inclusive.
- `durationSeconds` (integer)
  - Constraints: minimum: 1, maximum: 86400
- `isrc` (string): Optional ISRC, uppercase, matching ^[A-Z]{2}[A-Z0-9]{3}[0-9]{7}$; enforced by the validator.
  - Constraints: minLength: 12, maxLength: 12
- `listenedAt` (string · datetime, required): Explicit UTC RFC3339, from 1970-01-01 through event receipt time plus 300 seconds inclusive.
- `musicService` (string): Optional lowercase DNS name of the music service the listen came from (ListenBrainz music_service); enforced by the validator.
  - Constraints: minLength: 1, maxLength: 253
- `recordingMbid` (string): Optional unverified recording UUID; runtime validates UUID syntax. Not a grouping key.
- `releaseGroupMbid` (string): Optional unverified MusicBrainz release-group UUID; runtime validates UUID syntax.
  - Constraints: maxLength: 36
- `releaseMbid` (string): Optional unverified MusicBrainz release UUID; runtime validates UUID syntax.
  - Constraints: maxLength: 36
- `submissionClient` (string): Optional name (and version) of the submitting client; raw 1–64 Unicode scalar values and at most 256 UTF-8 bytes; enforced by the validator.
  - Constraints: minLength: 1, maxLength: 256
- `track` (string, required): Raw 1–256 Unicode scalar values, and nonempty after trimming; enforced by the validator.
  - Constraints: minLength: 1, maxLength: 1024
- `trackNumber` (integer): Optional position of the track on its release.
  - Constraints: minimum: 1, maximum: 9999

## Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A completed listen asserted by its author. Each record counts once; repeated tracks at equal times are valid. The fields after recordingMbid are additive optional fields (ADR 0005 §6.2, B13): a validator drops an invalid optional field and never rejects a record for one; remote records stay open and unknown fields are ignored.",
      "key": "tid",
      "record": {
        "properties": {
          "album": {
            "description": "If present, raw 1–256 Unicode scalar values, and nonempty after trimming; enforced by the validator.",
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
          },
          "albumArtist": {
            "description": "Optional album artist (Last.fm albumArtist, ListenBrainz release_artist_name); raw 1–256 Unicode scalar values, and nonempty after trimming; enforced by the validator.",
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
          },
          "artist": {
            "description": "One credited display string; raw 1–256 Unicode scalar values, and nonempty after trimming. The scalar limit is enforced by the validator.",
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
          },
          "artistMbids": {
            "description": "Optional unverified MusicBrainz artist UUIDs, at most 10 and distinct; runtime validates UUID syntax.",
            "items": {
              "maxLength": 36,
              "type": "string"
            },
            "maxLength": 10,
            "type": "array"
          },
          "createdAt": {
            "description": "Explicit UTC RFC3339, from 1970-01-01 through event receipt time plus 300 seconds inclusive.",
            "format": "datetime",
            "type": "string"
          },
          "durationSeconds": {
            "maximum": 86400,
            "minimum": 1,
            "type": "integer"
          },
          "isrc": {
            "description": "Optional ISRC, uppercase, matching ^[A-Z]{2}[A-Z0-9]{3}[0-9]{7}$; enforced by the validator.",
            "maxLength": 12,
            "minLength": 12,
            "type": "string"
          },
          "listenedAt": {
            "description": "Explicit UTC RFC3339, from 1970-01-01 through event receipt time plus 300 seconds inclusive.",
            "format": "datetime",
            "type": "string"
          },
          "musicService": {
            "description": "Optional lowercase DNS name of the music service the listen came from (ListenBrainz music_service); enforced by the validator.",
            "maxLength": 253,
            "minLength": 1,
            "type": "string"
          },
          "recordingMbid": {
            "description": "Optional unverified recording UUID; runtime validates UUID syntax. Not a grouping key.",
            "type": "string"
          },
          "releaseGroupMbid": {
            "description": "Optional unverified MusicBrainz release-group UUID; runtime validates UUID syntax.",
            "maxLength": 36,
            "type": "string"
          },
          "releaseMbid": {
            "description": "Optional unverified MusicBrainz release UUID; runtime validates UUID syntax.",
            "maxLength": 36,
            "type": "string"
          },
          "submissionClient": {
            "description": "Optional name (and version) of the submitting client; raw 1–64 Unicode scalar values and at most 256 UTF-8 bytes; enforced by the validator.",
            "maxLength": 256,
            "minLength": 1,
            "type": "string"
          },
          "track": {
            "description": "Raw 1–256 Unicode scalar values, and nonempty after trimming; enforced by the validator.",
            "maxLength": 1024,
            "minLength": 1,
            "type": "string"
          },
          "trackNumber": {
            "description": "Optional position of the track on its release.",
            "maximum": 9999,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "artist",
          "track",
          "listenedAt",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "description": "Schema-v1 scrobble. This ID is fixture-only; production requires an owner-controlled prefix.",
  "id": "dev.pythonplayer123.music.scrobble",
  "lexicon": 1
}
```
