Lexicons
The auto-generated lexicon docs for teal.fm
The following are the lexicons used in teal.fm, in alphabetical order. There may be better, non-auto-generated docs in the future for teal-fm specific lexicons, but these will always the most up-to-date.
app.bsky.actor.profile
{
"lexicon": 1,
"id": "app.bsky.actor.profile",
"defs": {
"main": {
"type": "record",
"description": "A declaration of a Bluesky account profile.",
"key": "literal:self",
"record": {
"type": "object",
"properties": {
"displayName": {
"type": "string",
"maxGraphemes": 64,
"maxLength": 640
},
"description": {
"type": "string",
"description": "Free-form profile description text.",
"maxGraphemes": 256,
"maxLength": 2560
},
"avatar": {
"type": "blob",
"description": "Small image to be displayed next to posts from account. AKA, 'profile picture'",
"accept": [
"image/png",
"image/jpeg"
],
"maxSize": 1000000
},
"banner": {
"type": "blob",
"description": "Larger horizontal image to display behind profile view.",
"accept": [
"image/png",
"image/jpeg"
],
"maxSize": 1000000
},
"labels": {
"type": "union",
"description": "Self-label values, specific to the Bluesky application, on the overall account.",
"refs": [
"com.atproto.label.defs#selfLabels"
]
},
"joinedViaStarterPack": {
"type": "ref",
"ref": "com.atproto.repo.strongRef"
},
"createdAt": {
"type": "string",
"format": "datetime"
}
}
}
}
}
}
app.bsky.richtext.facet
{
"lexicon": 1,
"id": "app.bsky.richtext.facet",
"defs": {
"main": {
"type": "object",
"description": "Annotation of a sub-string within rich text.",
"required": [
"index",
"features"
],
"properties": {
"index": {
"type": "ref",
"ref": "#byteSlice"
},
"features": {
"type": "array",
"items": {
"type": "union",
"refs": [
"#mention",
"#link",
"#tag"
]
}
}
}
},
"mention": {
"type": "object",
"description": "Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did"
}
}
},
"link": {
"type": "object",
"description": "Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.",
"required": [
"uri"
],
"properties": {
"uri": {
"type": "string",
"format": "uri"
}
}
},
"tag": {
"type": "object",
"description": "Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').",
"required": [
"tag"
],
"properties": {
"tag": {
"type": "string",
"maxLength": 640,
"maxGraphemes": 64
}
}
},
"byteSlice": {
"type": "object",
"description": "Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.",
"required": [
"byteStart",
"byteEnd"
],
"properties": {
"byteStart": {
"type": "integer",
"minimum": 0
},
"byteEnd": {
"type": "integer",
"minimum": 0
}
}
}
}
}
fm.teal.alpha.actor.profile
{
"lexicon": 1,
"id": "fm.teal.alpha.actor.profile",
"defs": {
"main": {
"type": "record",
"description": "This lexicon is in a not officially released state. It is subject to change. | A declaration of a teal.fm account profile.",
"key": "literal:self",
"record": {
"type": "object",
"properties": {
"displayName": {
"type": "string",
"maxGraphemes": 64,
"maxLength": 640
},
"description": {
"type": "string",
"description": "Free-form profile description text.",
"maxGraphemes": 256,
"maxLength": 2560
},
"descriptionFacets": {
"type": "array",
"description": "Annotations of text in the profile description (mentions, URLs, hashtags, etc).",
"items": {
"type": "ref",
"ref": "app.bsky.richtext.facet"
}
},
"featuredItem": {
"type": "ref",
"description": "The user's most recent item featured on their profile.",
"ref": "#featuredItem"
},
"avatar": {
"type": "blob",
"description": "Small image to be displayed next to posts from account. AKA, 'profile picture'",
"accept": [
"image/png",
"image/jpeg"
],
"maxSize": 1000000
},
"banner": {
"type": "blob",
"description": "Larger horizontal image to display behind profile view.",
"accept": [
"image/png",
"image/jpeg"
],
"maxSize": 1000000
},
"createdAt": {
"type": "string",
"format": "datetime"
}
}
}
},
"featuredItem": {
"type": "object",
"required": [
"mbid",
"type"
],
"properties": {
"mbid": {
"type": "string",
"description": "The Musicbrainz ID of the item"
},
"type": {
"type": "string",
"description": "The type of the item. Must be a valid Musicbrainz type, e.g. album, track, recording, etc."
}
}
}
}
}
fm.teal.alpha.actor.status
{
"lexicon": 1,
"id": "fm.teal.alpha.actor.status",
"defs": {
"main": {
"type": "record",
"description": "This lexicon is in a not officially released state. It is subject to change. | A declaration of the status of the actor. Only one can be shown at a time. If there are multiple, the latest record should be picked and earlier records should be deleted or tombstoned.",
"key": "literal:self",
"record": {
"type": "object",
"required": [
"time",
"item"
],
"properties": {
"time": {
"type": "string",
"format": "datetime",
"description": "The unix timestamp of when the item was recorded"
},
"item": {
"type": "ref",
"ref": "fm.teal.alpha.feed.defs#playView"
}
}
}
}
}
}
fm.teal.alpha.feed.defs
This lexicon is in a not officially released state. It is subject to change. | Misc. items related to feeds.
{
"lexicon": 1,
"id": "fm.teal.alpha.feed.defs",
"description": "This lexicon is in a not officially released state. It is subject to change. | Misc. items related to feeds.",
"defs": {
"playView": {
"type": "object",
"required": [
"trackName",
"artistNames"
],
"properties": {
"trackName": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"maxGraphemes": 2560,
"description": "The name of the track"
},
"trackMbId": {
"type": "string",
"description": "The Musicbrainz ID of the track"
},
"recordingMbId": {
"type": "string",
"description": "The Musicbrainz recording ID of the track"
},
"duration": {
"type": "integer",
"description": "The length of the track in seconds"
},
"artistNames": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"maxGraphemes": 2560
},
"description": "Array of artist names in order of original appearance."
},
"artistMbIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of Musicbrainz artist IDs"
},
"releaseName": {
"type": "string",
"maxLength": 256,
"maxGraphemes": 2560,
"description": "The name of the release/album"
},
"releaseMbId": {
"type": "string",
"description": "The Musicbrainz release ID"
},
"isrc": {
"type": "string",
"description": "The ISRC code associated with the recording"
},
"originUrl": {
"type": "string",
"description": "The URL associated with this track"
},
"musicServiceBaseDomain": {
"type": "string",
"description": "The base domain of the music service. e.g. music.apple.com, tidal.com, spotify.com. Defaults to 'local' if not provided."
},
"submissionClientAgent": {
"type": "string",
"maxLength": 256,
"maxGraphemes": 2560,
"description": "A user-agent style string specifying the user agent. e.g. tealtracker/0.0.1b (Linux; Android 13; SM-A715F). Defaults to 'manual/unknown' if not provided."
},
"playedTime": {
"type": "string",
"format": "datetime",
"description": "The unix timestamp of when the track was played"
}
}
}
}
}
fm.teal.alpha.feed.getActorFeed
This lexicon is in a not officially released state. It is subject to change. | Retrieves multiple plays from the index or via an author's DID.
{
"lexicon": 1,
"id": "fm.teal.alpha.feed.getActorFeed",
"description": "This lexicon is in a not officially released state. It is subject to change. | Retrieves multiple plays from the index or via an author's DID.",
"defs": {
"main": {
"type": "query",
"parameters": {
"type": "params",
"required": [
"authorDID"
],
"properties": {
"authorDID": {
"type": "string",
"format": "at-identifier",
"description": "The author's DID for the play"
},
"cursor": {
"type": "string",
"description": "The cursor to start the query from"
},
"limit": {
"type": "integer",
"description": "The upper limit of tracks to get per request. Default is 20, max is 50."
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": [
"plays"
],
"properties": {
"plays": {
"type": "array",
"items": {
"type": "ref",
"ref": "fm.teal.alpha.feed.defs#playView"
}
}
}
}
}
}
}
}
fm.teal.alpha.feed.getPlay
This lexicon is in a not officially released state. It is subject to change. | Retrieves a play given an author DID and record key.
{
"lexicon": 1,
"id": "fm.teal.alpha.feed.getPlay",
"description": "This lexicon is in a not officially released state. It is subject to change. | Retrieves a play given an author DID and record key.",
"defs": {
"main": {
"type": "query",
"parameters": {
"type": "params",
"required": [
"authorDID",
"rkey"
],
"properties": {
"authorDID": {
"type": "string",
"format": "at-identifier",
"description": "The author's DID for the play"
},
"rkey": {
"type": "string",
"description": "The record key of the play"
}
}
},
"output": {
"encoding": "application/json",
"schema": {
"type": "object",
"required": [
"play"
],
"properties": {
"play": {
"type": "ref",
"ref": "fm.teal.alpha.feed.defs#playView"
}
}
}
}
}
}
}
fm.teal.alpha.feed.play
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.
{
"lexicon": 1,
"id": "fm.teal.alpha.feed.play",
"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.",
"defs": {
"main": {
"type": "record",
"key": "tid",
"record": {
"type": "object",
"required": [
"trackName",
"artistNames"
],
"properties": {
"trackName": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"maxGraphemes": 2560,
"description": "The name of the track"
},
"trackMbId": {
"type": "string",
"description": "The Musicbrainz ID of the track"
},
"recordingMbId": {
"type": "string",
"description": "The Musicbrainz recording ID of the track"
},
"duration": {
"type": "integer",
"description": "The length of the track in seconds"
},
"artistNames": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"maxGraphemes": 2560
},
"description": "Array of artist names in order of original appearance."
},
"artistMbIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of Musicbrainz artist IDs"
},
"releaseName": {
"type": "string",
"maxLength": 256,
"maxGraphemes": 2560,
"description": "The name of the release/album"
},
"releaseMbId": {
"type": "string",
"description": "The Musicbrainz release ID"
},
"isrc": {
"type": "string",
"description": "The ISRC code associated with the recording"
},
"originUrl": {
"type": "string",
"description": "The URL associated with this track"
},
"musicServiceBaseDomain": {
"type": "string",
"description": "The base domain of the music service. e.g. music.apple.com, tidal.com, spotify.com. Defaults to 'local' if unavailable or not provided."
},
"submissionClientAgent": {
"type": "string",
"maxLength": 256,
"maxGraphemes": 2560,
"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."
},
"playedTime": {
"type": "string",
"format": "datetime",
"description": "The unix timestamp of when the track was played"
}
}
}
}
}
}
xyz.statusphere.status
{
"lexicon": 1,
"id": "xyz.statusphere.status",
"defs": {
"main": {
"type": "record",
"key": "tid",
"record": {
"type": "object",
"required": [
"status",
"createdAt"
],
"properties": {
"status": {
"type": "string",
"minLength": 1,
"maxGraphemes": 1,
"maxLength": 32
},
"createdAt": {
"type": "string",
"format": "datetime"
}
}
}
}
}
}