Podcast Index Namespace Reference
The Podcast Index namespace implements the Podcasting 2.0 specification, providing advanced features for modern podcasting including transcripts, chapters, value streaming, and enhanced metadata.
| Namespace URI | https://podcastindex.org/namespace/1.0 |
|---|---|
| Specification | Podcast Namespace 2.0 |
| Prefix | <podcast:*> |
| Available in | RSS |
| Property | podcast |
Types
INFO
For details on type parameters (TDate, TStrict) and Requirable<T> markers, see TypeScript Reference.
ts
export namespace PodcastNs {
/** @internal Common properties shared by Item and LiveItem. */
export type BaseItem<TStrict extends boolean = false> = {
transcripts?: Array<Transcript<TStrict>>
chapters?: Chapters<TStrict>
soundbites?: Array<Soundbite<TStrict>>
persons?: Array<Person<TStrict>>
locations?: Array<Location<TStrict>>
season?: Season<TStrict>
episode?: Episode<TStrict>
license?: License<TStrict>
alternateEnclosures?: Array<AlternateEnclosure<TStrict>>
values?: Array<Value<TStrict>>
images?: Array<Image<TStrict>>
socialInteracts?: Array<SocialInteract<TStrict>>
txts?: Array<Txt<TStrict>>
chat?: Chat<TStrict>
}
export type Transcript<TStrict extends boolean = false> = Strict<
{
url: Requirable<string> // Required in spec.
type: Requirable<string> // Required in spec.
language?: string
rel?: string
},
TStrict
>
export type Locked<TStrict extends boolean = false> = Strict<
{
value: Requirable<boolean> // Required in spec.
owner?: string
},
TStrict
>
export type Funding<TStrict extends boolean = false> = Strict<
{
url: Requirable<string> // Required in spec.
display?: string
},
TStrict
>
export type Chapters<TStrict extends boolean = false> = Strict<
{
url: Requirable<string> // Required in spec.
type: Requirable<string> // Required in spec.
},
TStrict
>
export type Soundbite<TStrict extends boolean = false> = Strict<
{
startTime: Requirable<number> // Required in spec.
duration: Requirable<number> // Required in spec.
display?: string
},
TStrict
>
export type Person<TStrict extends boolean = false> = Strict<
{
display: Requirable<string> // Required in spec.
role?: string
group?: string
img?: string
href?: string
},
TStrict
>
export type Location<TStrict extends boolean = false> = Strict<
{
display: Requirable<string> // Required in spec.
rel?: string
geo?: string
osm?: string
country?: string
},
TStrict
>
export type Season<TStrict extends boolean = false> = Strict<
{
number: Requirable<number> // Required in spec.
name?: string
},
TStrict
>
export type Episode<TStrict extends boolean = false> = Strict<
{
number: Requirable<number> // Required in spec.
display?: string
},
TStrict
>
export type Trailer<TDate extends DateLike, TStrict extends boolean = false> = Strict<
{
display: Requirable<string> // Required in spec.
url: Requirable<string> // Required in spec.
pubDate: Requirable<TDate> // Required in spec.
length?: number
type?: string
season?: number
},
TStrict
>
export type License<TStrict extends boolean = false> = Strict<
{
display: Requirable<string> // Required in spec.
url?: string
},
TStrict
>
export type AlternateEnclosure<TStrict extends boolean = false> = Strict<
{
type: Requirable<string> // Required in spec.
length?: number
bitrate?: number
height?: number
lang?: string
title?: string
rel?: string
codecs?: string
default?: boolean
sources?: Array<Source<TStrict>>
integrity?: Integrity<TStrict>
},
TStrict
>
export type Source<TStrict extends boolean = false> = Strict<
{
uri: Requirable<string> // Required in spec.
contentType?: string
},
TStrict
>
export type Integrity<TStrict extends boolean = false> = Strict<
{
type: Requirable<string> // Required in spec.
value: Requirable<string> // Required in spec.
},
TStrict
>
export type Value<TStrict extends boolean = false> = Strict<
{
type: Requirable<string> // Required in spec.
method: Requirable<string> // Required in spec.
suggested?: number
valueRecipients?: Array<ValueRecipient<TStrict>>
valueTimeSplits?: Array<ValueTimeSplit<TStrict>>
},
TStrict
>
export type ValueRecipient<TStrict extends boolean = false> = Strict<
{
name?: string
customKey?: string
customValue?: string
type: Requirable<string> // Required in spec.
address: Requirable<string> // Required in spec.
split: Requirable<number> // Required in spec.
fee?: boolean
},
TStrict
>
/** @internal Legacy type for parsing podcast:images with srcset attribute. */
export type Images = {
srcset?: string
}
export type Image<TStrict extends boolean = false> = Strict<
{
href: Requirable<string> // Required in spec.
alt?: string
aspectRatio?: string
width?: number
height?: number
type?: string
purpose?: string
},
TStrict
>
export type LiveItem<
TDate extends DateLike,
TStrict extends boolean = false,
> = BaseItem<TStrict> &
Strict<
{
status: Requirable<string> // Required in spec.
start: Requirable<TDate> // Required in spec. Date: ISO 8601.
end?: TDate // Date: ISO 8601.
contentLinks?: Array<ContentLink<TStrict>>
},
TStrict
>
export type ContentLink<TStrict extends boolean = false> = Strict<
{
href: Requirable<string> // Required in spec.
display?: string
},
TStrict
>
export type SocialInteract<TStrict extends boolean = false> = Strict<
{
// INFO: The specification states that the `uri` is required. However, if the protocol is set
// to `disabled`, no other attributes are necessary. To bypass the protocol value check, which
// may be invalid, only the protocol is required to ensure consistent behavior.
uri?: string
protocol: Requirable<string> // Required in spec.
accountId?: string
accountUrl?: string
priority?: number
},
TStrict
>
export type Chat<TStrict extends boolean = false> = Strict<
{
server: Requirable<string> // Required in spec.
protocol: Requirable<string> // Required in spec.
accountId?: string
space?: string
},
TStrict
>
export type Block<TStrict extends boolean = false> = Strict<
{
value: Requirable<boolean> // Required in spec.
id?: string
},
TStrict
>
export type Txt<TStrict extends boolean = false> = Strict<
{
display: Requirable<string> // Required in spec.
purpose?: string
},
TStrict
>
export type RemoteItem<TStrict extends boolean = false> = Strict<
{
feedGuid: Requirable<string> // Required in spec.
feedUrl?: string
itemGuid?: string
medium?: string
title?: string
},
TStrict
>
export type Podroll<TStrict extends boolean = false> = {
remoteItems?: Array<RemoteItem<TStrict>>
}
export type UpdateFrequency<TDate extends DateLike, TStrict extends boolean = false> = Strict<
{
display: Requirable<string> // Required in spec.
complete?: boolean
dtstart?: TDate
rrule?: string
},
TStrict
>
export type Podping = {
usesPodping?: boolean
}
export type Publisher<TStrict extends boolean = false> = {
remoteItem?: RemoteItem<TStrict>
}
export type ValueTimeSplit<TStrict extends boolean = false> = Strict<
{
startTime: Requirable<number> // Required in spec.
duration: Requirable<number> // Required in spec.
remoteStartTime?: number
remotePercentage?: number
remoteItem?: RemoteItem<TStrict>
valueRecipients?: Array<ValueRecipient<TStrict>>
},
TStrict
>
export type Item<TStrict extends boolean = false> = BaseItem<TStrict>
export type Feed<TDate extends DateLike, TStrict extends boolean = false> = {
locked?: Locked<TStrict>
fundings?: Array<Funding<TStrict>>
persons?: Array<Person<TStrict>>
locations?: Array<Location<TStrict>>
trailers?: Array<Trailer<TDate, TStrict>>
license?: License<TStrict>
guid?: string
values?: Array<Value<TStrict>>
medium?: string
images?: Array<Image<TStrict>>
liveItems?: Array<LiveItem<TDate, TStrict>>
blocks?: Array<Block<TStrict>>
txts?: Array<Txt<TStrict>>
remoteItems?: Array<RemoteItem<TStrict>>
podroll?: Podroll<TStrict>
updateFrequency?: UpdateFrequency<TDate, TStrict>
podping?: Podping
chat?: Chat<TStrict>
publisher?: Publisher<TStrict>
}
}Related
- iTunes Namespace - Traditional podcast metadata
- Parsing Namespaces - How namespace parsing works