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.
Details · record, key tid
| Kind | record |
|---|---|
| Record key | tid |
| Authority | music.pythonplayer123.dev |
| Indexed |
Checks
Validunlimited-stringdefs.main.record.properties.recordingMbidNo maxLength, maxGraphemes or format limits this string.
{
"$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
}