fm.teal.feed.play

teal.fm

{
  "id": "fm.teal.feed.play",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "trackName"
        ],
        "properties": {
          "isrc": {
            "type": "string",
            "description": "The ISRC code associated with the recording"
          },
          "artists": {
            "type": "array",
            "items": {
              "ref": "fm.teal.feed.defs#artist",
              "type": "ref"
            },
            "description": "Array of artists in order of original appearance."
          },
          "duration": {
            "type": "integer",
            "description": "The length of the track in seconds"
          },
          "originUri": {
            "type": "string",
            "format": "uri",
            "description": "The exact URI where the listening event originated."
          },
          "trackMbId": {
            "type": "string",
            "format": "uri",
            "description": "The MusicBrainz ID URI of the track, formatted as mbid:<uuid>"
          },
          "trackName": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "description": "The name of the track",
            "maxGraphemes": 2560
          },
          "playedTime": {
            "type": "string",
            "format": "datetime",
            "description": "The datetime at which playback began."
          },
          "artistMbIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "DEPRECATED: USE 'artists' INSTEAD. Array of Musicbrainz artist IDs."
          },
          "artistNames": {
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 256,
              "minLength": 1,
              "maxGraphemes": 2560
            },
            "description": "DEPRECATED: USE 'artists' INSTEAD. Array of artist names in order of original appearance."
          },
          "releaseMbId": {
            "type": "string",
            "format": "uri",
            "description": "The MusicBrainz release ID URI, formatted as mbid:<uuid>"
          },
          "releaseName": {
            "type": "string",
            "maxLength": 256,
            "description": "The name of the release/album",
            "maxGraphemes": 2560
          },
          "recordingMbId": {
            "type": "string",
            "format": "uri",
            "description": "The MusicBrainz recording ID URI of the track, formatted as mbid:<uuid>"
          },
          "musicServiceUri": {
            "type": "string",
            "format": "uri",
            "description": "The canonical URI identifying the listening surface or music service."
          },
          "trackDiscriminant": {
            "type": "string",
            "maxLength": 128,
            "description": "Distinguishing information for track variants (e.g. 'Acoustic Version', 'Live at Wembley', 'Radio Edit', 'Demo'). Used to differentiate between different versions of the same base track while maintaining grouping capabilities.",
            "maxGraphemes": 1280
          },
          "releaseDiscriminant": {
            "type": "string",
            "maxLength": 128,
            "description": "Distinguishing information for release variants (e.g. 'Deluxe Edition', 'Remastered', '2023 Remaster', 'Special Edition'). Used to differentiate between different versions of the same base release while maintaining grouping capabilities.",
            "maxGraphemes": 1280
          },
          "submissionClientAgent": {
            "type": "string",
            "maxLength": 256,
            "description": "A metadata string specifying the user agent where the format is `<app-identifier>/<version> (<kernel/OS-base>; <platform/OS-version>; <device-model>)`. If string is provided, only `app-identifier` and `version` are required. `app-identifier` is recommended to be in reverse dns format. Defaults to 'manual/unknown' if unavailable or not provided.",
            "maxGraphemes": 2560
          }
        }
      }
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1,
  "description": "This lexicon is in a not officially released state. It is subject to change. | A declaration of a teal.fm play. Plays are submitted as a result of a user listening to a track. Plays should be marked as tracked when a user has listened to the entire track if it's under 2 minutes long, or half of the track's duration up to 4 minutes, whichever is longest."
}

Validate Record

Validate a record against fm.teal.feed.play

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:iwhuynr6mm6xxuh25o4do2tx
CID
bafyreigqm2p2dftaihocdoxneyk7x6j5iijmahh2c7apug47zrhb6tdd3u
Indexed At
2026-08-15 17:25 UTC
AT-URI
at://did:plc:iwhuynr6mm6xxuh25o4do2tx/com.atproto.lexicon.schema/fm.teal.feed.play

Referenced Schemas (1)

Lexicon Garden

@