{
"id": "app.tempomusic.feed.defs",
"defs": {
"songRef": {
"type": "object",
"required": [
"title",
"artist"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Optional DID of a verified Tempo record for this song (e.g. owned by a verified artist account)."
},
"title": {
"type": "string",
"maxLength": 512
},
"artist": {
"ref": "#artistInfo",
"type": "ref",
"description": "The performing artist. Carries display name plus optional DID and external identifiers."
},
"albumTitle": {
"type": "string",
"maxLength": 512,
"description": "Display hint for the album this song is from. Optional. For posts about the album itself as a subject, use albumRef instead."
},
"artworkUrl": {
"type": "string",
"format": "uri",
"description": "Fallback artwork URL. AppViews should prefer artwork resolved via platformIds against the music-catalogue when available."
},
"platformIds": {
"type": "array",
"items": {
"ref": "#platformId",
"type": "ref"
},
"description": "Commercial platform identifiers (Spotify track ID, Apple Music ID, etc.)."
},
"releaseYear": {
"type": "integer",
"maximum": 2100,
"minimum": 1860,
"description": "Year of release. For finer precision (full date, time), AppViews should resolve via platformIds against the music-catalogue rather than encoding it here."
},
"standardIds": {
"type": "array",
"items": {
"ref": "#standardId",
"type": "ref"
},
"description": "Canonical identifiers (ISRC, MusicBrainz recording MBID, etc.)."
}
},
"description": "A specific song. Used as a post subject and as an inline music facet target."
},
"albumRef": {
"type": "object",
"required": [
"title",
"artist"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Optional DID of a verified Tempo record for this album."
},
"title": {
"type": "string",
"maxLength": 512
},
"artist": {
"ref": "#artistInfo",
"type": "ref"
},
"artworkUrl": {
"type": "string",
"format": "uri",
"description": "Fallback artwork URL. AppViews should prefer artwork resolved via platformIds against the music-catalogue when available."
},
"platformIds": {
"type": "array",
"items": {
"ref": "#platformId",
"type": "ref"
},
"description": "Commercial platform identifiers (Spotify album ID, Apple Music album ID, etc.)."
},
"releaseYear": {
"type": "integer",
"maximum": 2100,
"minimum": 1860,
"description": "Year of release. For finer precision (full date, time), AppViews should resolve via platformIds against the music-catalogue rather than encoding it here."
},
"standardIds": {
"type": "array",
"items": {
"ref": "#standardId",
"type": "ref"
},
"description": "Canonical identifiers (UPC, MusicBrainz release MBID, etc.)."
}
},
"description": "An album, EP, single, or any long-form release."
},
"postView": {
"type": "object",
"required": [
"uri",
"cid",
"author",
"record",
"indexedAt"
],
"properties": {
"cid": {
"type": "string",
"format": "cid"
},
"uri": {
"type": "string",
"format": "at-uri"
},
"author": {
"ref": "#authorView",
"type": "ref"
},
"record": {
"type": "unknown",
"description": "The underlying app.tempomusic.feed.post record. Carried verbatim with its $type discriminator; lexicon-typed as unknown to match the AT Protocol convention for embedded records."
},
"viewer": {
"ref": "#viewerState",
"type": "ref",
"description": "Viewer-relative projection. Absent when the request omitted the viewer parameter."
},
"indexedAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp at which the AppView indexed this post."
},
"likeCount": {
"type": "integer",
"minimum": 0,
"description": "Number of likes indexed against this post."
},
"replyCount": {
"type": "integer",
"minimum": 0,
"description": "Number of replies indexed against this post."
}
},
"description": "AppView projection of an app.tempomusic.feed.post record."
},
"artistRef": {
"type": "object",
"required": [
"name"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Optional DID of the verified Tempo account for this artist."
},
"name": {
"type": "string",
"maxLength": 256
},
"artworkUrl": {
"type": "string",
"format": "uri",
"description": "Fallback artist photo or avatar URL. AppViews should prefer artwork resolved via platformIds against the music-catalogue when available."
},
"platformIds": {
"type": "array",
"items": {
"ref": "#platformId",
"type": "ref"
},
"description": "Commercial platform identifiers (Spotify artist ID, Apple Music artist ID, etc.)."
},
"standardIds": {
"type": "array",
"items": {
"ref": "#standardId",
"type": "ref"
},
"description": "Canonical identifiers (MusicBrainz artist MBID, etc.)."
}
},
"description": "A music artist as the standalone subject of a post (no specific release referenced). For artist as an attribute of a song or album, see #artistInfo."
},
"replyView": {
"type": "object",
"required": [
"uri",
"cid",
"author",
"record",
"indexedAt"
],
"properties": {
"cid": {
"type": "string",
"format": "cid"
},
"uri": {
"type": "string",
"format": "at-uri"
},
"author": {
"ref": "#authorView",
"type": "ref"
},
"record": {
"type": "unknown",
"description": "The underlying app.tempomusic.feed.reply record. Carried verbatim with its $type discriminator; lexicon-typed as unknown to match the AT Protocol convention for embedded records."
},
"viewer": {
"ref": "#viewerState",
"type": "ref",
"description": "Viewer-relative projection. Absent when the request omitted the viewer parameter."
},
"indexedAt": {
"type": "string",
"format": "datetime",
"description": "Timestamp at which the AppView indexed this reply."
},
"likeCount": {
"type": "integer",
"minimum": 0,
"description": "Number of likes indexed against this reply."
}
},
"description": "AppView projection of an app.tempomusic.feed.reply record."
},
"artistInfo": {
"type": "object",
"required": [
"name"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Optional DID of the verified Tempo account for this artist."
},
"name": {
"type": "string",
"maxLength": 256
},
"platformIds": {
"type": "array",
"items": {
"ref": "#platformId",
"type": "ref"
}
},
"standardIds": {
"type": "array",
"items": {
"ref": "#standardId",
"type": "ref"
}
}
},
"description": "Artist information embedded as an attribute of a song or album. Distinct from artistRef, which represents an artist as the standalone subject of a post. Notably omits artworkUrl, since artwork in this context belongs to the parent entity (the song or album)."
},
"authorView": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
},
"avatar": {
"type": "string",
"maxLength": 64,
"description": "Avatar catalog identifier from the author's most recent actor.profile record. Bounds mirror app.tempomusic.actor.profile#catalogAvatar.id."
},
"displayName": {
"type": "string",
"maxLength": 180,
"description": "Display name from the author's most recent actor.profile record. Bounds mirror app.tempomusic.actor.profile#displayName.",
"maxGraphemes": 18
},
"avatarBackgroundColor": {
"type": "string",
"maxLength": 32,
"description": "Avatar background color palette token from the author's most recent actor.profile record. Bounds mirror app.tempomusic.actor.profile#catalogAvatar.backgroundColor."
}
},
"description": "AppView projection of an actor profile for use as a post or reply author."
},
"platformId": {
"type": "object",
"required": [
"provider",
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 256
},
"uri": {
"type": "string",
"format": "uri",
"description": "Optional deep-link URI (e.g. spotify:track:xxx, https://music.apple.com/...)."
},
"provider": {
"type": "string",
"maxLength": 100,
"description": "The platform issuing the identifier. knownValues is informational; AppViews should accept unknown providers and skip them.",
"knownValues": [
"spotify",
"appleMusic",
"deezer",
"tidal",
"amazonMusic",
"youtubeMusic"
]
}
},
"description": "An identifier issued by a commercial music platform. May change or disappear over time; multiple per entity are possible (regional variants, re-releases, remasters)."
},
"standardId": {
"type": "object",
"required": [
"format",
"value"
],
"properties": {
"value": {
"type": "string",
"maxLength": 128
},
"format": {
"type": "string",
"maxLength": 100,
"description": "The identifier format. knownValues is informational; AppViews should accept unknown formats and skip them.",
"knownValues": [
"isrc",
"iswc",
"upc",
"ean",
"musicBrainz"
]
}
},
"description": "A canonical, normative identifier issued by a standards body or community-curated database. Stable across platforms; intended for cross-service resolution and deduplication."
},
"viewerState": {
"type": "object",
"properties": {
"like": {
"type": "string",
"format": "at-uri",
"description": "AT-URI of the viewer's like record on this subject, when one exists."
}
},
"description": "Per-viewer projection on a post or reply view."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}