{
"id": "place.pod.episode",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"showUri",
"title",
"audioUrl",
"createdAt",
"guid",
"audioMimeType",
"audioSizeBytes"
],
"properties": {
"guid": {
"type": "string",
"maxLength": 255,
"description": "Globally unique, immutable episode identifier required by Apple and PSP."
},
"link": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "Public webpage for the episode, corresponding to the RSS item link."
},
"title": {
"type": "string",
"maxLength": 200,
"description": "Title of the episode."
},
"people": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100
},
"description": "Structured episode credits such as hosts, guests, and producers."
},
"showUri": {
"type": "string",
"format": "uri",
"description": "AT Protocol URI of the parent place.pod.show record."
},
"audioUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "Direct URL to the audio file. Must be publicly accessible and use HTTPS."
},
"explicit": {
"type": "boolean",
"description": "Whether this specific episode contains explicit content."
},
"imageUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "Episode-specific artwork URL. Falls back to show cover if omitted."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "ISO 8601 timestamp of when the episode record was created."
},
"soundbites": {
"type": "array",
"items": {
"type": "string",
"maxLength": 255
},
"description": "Optional Podcasting 2.0 highlights with start times and durations."
},
"chaptersUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "URL to a chapters file."
},
"description": {
"type": "string",
"description": "Summary or show notes for the episode. May contain basic formatting.",
"maxGraphemes": 4000
},
"episodeType": {
"type": "string",
"maxLength": 20,
"description": "Apple episode type. Full is the default when omitted.",
"knownValues": [
"full",
"trailer",
"bonus"
]
},
"publishedAt": {
"type": "string",
"format": "datetime",
"description": "ISO 8601 timestamp when the episode was published. May differ from createdAt."
},
"seasonNumber": {
"type": "integer",
"description": "Season number the episode belongs to."
},
"audioMimeType": {
"type": "string",
"maxLength": 100,
"description": "MIME type for the RSS enclosure, such as audio/mpeg or audio/mp4."
},
"episodeNumber": {
"type": "integer",
"description": "Episode number within the season or series."
},
"transcriptUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "URL to a transcript file."
},
"audioSizeBytes": {
"type": "integer",
"minimum": 0,
"description": "Audio file size in bytes for the RSS enclosure length attribute."
},
"durationSeconds": {
"type": "integer",
"minimum": 0,
"description": "Length of the episode in whole seconds. Strongly recommended for player UX."
},
"chaptersMimeType": {
"type": "string",
"maxLength": 100,
"description": "MIME type for chaptersUrl; required when exporting podcast:chapters."
},
"transcriptMimeType": {
"type": "string",
"maxLength": 100,
"description": "MIME type for transcriptUrl; required when exporting podcast:transcript."
},
"alternateEnclosures": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2048
},
"description": "Optional Podcasting 2.0 alternate media files with technical metadata."
}
}
},
"description": "A single podcast episode."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "A single podcast episode."
}