{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A container of listens. Writers fill it by bytes: its createRecord or putRecord JSON body stays under the PDS write limit, so the 10,000-entry bound is a resource ceiling that no record of valid entries reaches. Each entry has a stable TID id and every single-scrobble field, including its own createdAt. The envelope also has createdAt.",
      "key": "tid",
      "record": {
        "properties": {
          "createdAt": {
            "description": "Envelope creation time, validated against event receipt time.",
            "format": "datetime",
            "type": "string"
          },
          "listens": {
            "items": {
              "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"
                },
                "id": {
                  "description": "Stable unique TID listen id within this container.",
                  "format": "tid",
                  "type": "string"
                },
                "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": [
                "id",
                "artist",
                "track",
                "listenedAt",
                "createdAt"
              ],
              "type": "object"
            },
            "maxLength": 10000,
            "minLength": 1,
            "type": "array"
          }
        },
        "required": [
          "createdAt",
          "listens"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "description": "Candidate schema for an unpublished container of completed listens. The production namespace must publish and review this schema separately before enabling batch writes.",
  "id": "dev.pythonplayer123.music.scrobbleBatch",
  "lexicon": 1
}
