{
"id": "org.atpodcasting.episode",
"defs": {
"main": {
"key": "any",
"type": "record",
"record": {
"type": "object",
"required": [
"podcast",
"title",
"media",
"publishedAt",
"duration",
"feedItemGuid",
"createdAt"
],
"properties": {
"link": {
"type": "string",
"format": "uri",
"description": "URL of a companion webpage or show notes page for the episode."
},
"media": {
"ref": "#mediaRef",
"type": "ref",
"description": "The primary media file for the episode."
},
"title": {
"type": "string",
"maxLength": 500,
"description": "The title of the episode."
},
"artwork": {
"type": "blob",
"accept": [
"image/png",
"image/jpeg"
],
"maxSize": 5000000,
"description": "Episode-specific artwork. Overrides the podcast artwork when set. Recommended: 1400x1400 to 3000x3000 pixels, square, no alpha channel."
},
"podcast": {
"ref": "org.atpodcasting.defs#podcastRef",
"type": "ref",
"description": "Identifies the parent podcast. Since episodes live in the same repository as their podcast, the AT URI is always derivable from the episode's DID and the podcastGuid."
},
"chapters": {
"ref": "#chaptersRef",
"type": "ref",
"description": "Reference to an externally hosted chapters file."
},
"duration": {
"type": "integer",
"minimum": 1,
"description": "Duration of the episode in seconds."
},
"explicit": {
"type": "boolean",
"description": "Whether the episode contains explicit content. Overrides the podcast-level setting when set."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When the episode record was created."
},
"transcript": {
"type": "array",
"items": {
"ref": "#transcriptRef",
"type": "ref"
},
"maxLength": 10,
"description": "References to externally hosted transcript files (e.g. VTT, SRT, JSON). Multiple entries allow providing transcripts in different formats."
},
"description": {
"type": "string",
"maxLength": 10000,
"description": "A description or show notes for the episode."
},
"episodeType": {
"type": "string",
"description": "The type of episode. Defaults to full.",
"knownValues": [
"full",
"trailer",
"bonus"
]
},
"publishedAt": {
"type": "string",
"format": "datetime",
"description": "When the episode was published."
},
"feedItemGuid": {
"type": "string",
"maxLength": 2000,
"description": "The original feed item identifier. Must match the <guid> element of the corresponding RSS feed item. The record key (rkey) is derived from this value as uuid5(<podcast:guid>, feedItemGuid)."
},
"seasonNumber": {
"type": "integer",
"minimum": 1,
"description": "Season number of the episode."
},
"episodeNumber": {
"type": "integer",
"minimum": 1,
"description": "Episode number within its season or the overall series."
},
"alternateMedia": {
"type": "array",
"items": {
"ref": "#mediaRef",
"type": "ref"
},
"maxLength": 10,
"description": "Alternate versions of the episode media (e.g. different formats or audio-only versions of video episodes)."
}
}
},
"description": "A podcast episode. Record key is a UUIDv5 derived from the podcast GUID (as namespace) and the episode's feedItemGuid (as name), enabling deterministic lookup from RSS feed metadata."
},
"mediaRef": {
"type": "object",
"required": [
"url",
"mimeType"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL of the media file."
},
"mimeType": {
"type": "string",
"description": "MIME type of the media file (e.g. audio/mpeg, video/mp4)."
}
},
"description": "Reference to an externally hosted media file."
},
"chaptersRef": {
"type": "object",
"required": [
"url",
"mimeType"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL of the chapters file."
},
"mimeType": {
"type": "string",
"description": "MIME type of the chapters file (e.g. application/json+chapters)."
}
},
"description": "Reference to an externally hosted chapters file."
},
"transcriptRef": {
"type": "object",
"required": [
"url",
"mimeType"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL of the transcript file."
},
"language": {
"type": "string",
"format": "language",
"description": "Language of the transcript (ISO 639-1 two-letter code, e.g. 'en', 'es', 'pt')."
},
"mimeType": {
"type": "string",
"description": "MIME type of the transcript file (e.g. text/vtt, application/x-subrip, application/json)."
}
},
"description": "Reference to an externally hosted transcript file."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}