{
  "$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
}
