# Podcast

**Summary:** Endpoints for Podcast

- Role: [Developers](https://www.subrite.no/developers)
- Source: https://www.subrite.no/developers/podcast
- Updated: 2026-10-13
- Markdown index: https://www.subrite.no/developers/llms.txt

<a id="get-api-v1-podcast-generate-link-podcastid"></a>
## Generate link to podcast

`GET /api/v1/podcast/generate-link/{podcastId}`

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `podcastId` (Required) | path | `number` |   |

### Responses

#### 200

Content type: `application/json` · `string`

### Example request

```bash
curl 'https://api.subrite.no/api/v1/podcast/generate-link/{podcastId}'
```

### Example response

200 · `application/json`

```json
"string"
```

<a id="get-api-v1-podcast"></a>
## Get podcasts for member

`GET /api/v1/podcast`

### Responses

#### 200

Content type: `application/json` · `array of PodcastDto`

| Name | Type | Description |
| --- | --- | --- |
| `[].id` (Required when parent is present) | `number` |   |
| `[].podcastUrlSignature` (Required when parent is present) | `string` |   |
| `[].imageUrl` (Required when parent is present) | `string` |   |
| `[].name` (Required when parent is present) | `string` |   |
| `[].description` (Required when parent is present) | `string` |   |
| `[].sortOrder` (Required when parent is present) | `number` |   |
| `[].showUrl` (Required when parent is present) | `string` |   |

### Example request

```bash
curl https://api.subrite.no/api/v1/podcast
```

### Example response

200 · `application/json`

```json
[
  {
    "id": 0,
    "podcastUrlSignature": "<podcastUrlSignature>",
    "imageUrl": "string",
    "name": "string",
    "description": "string",
    "sortOrder": 0,
    "showUrl": "string"
  }
]
```

<a id="post-api-v1-podcast-spotify-link"></a>
## Create a Spotify link

`POST /api/v1/podcast/spotify-link`

### Request body

Content type: `application/json` · Required · `LinkSpotifyDto`

| Name | Type | Description |
| --- | --- | --- |
| `code` (Required) | `string` |   |
| `redirect_uri` (Required) | `string` |   |

**Example request body**

`application/json`

```json
{
  "code": "string",
  "redirect_uri": "string"
}
```

### Responses

#### 201

Content type: `application/json` · `LinkSpotifyResponseDto`

| Name | Type | Description |
| --- | --- | --- |
| `completion_url` (Required) | `string` |   |

#### 400

Content type: `application/json` · `ErrorResponse`

Invalid code

| Name | Type | Description |
| --- | --- | --- |
| `messageCode` (Required) | `string` |   |
| `message` | `string` |   |
| `errors` (Required) | `array of FieldError` |   |
| `errors[].field` (Required when parent is present) | `string` |   |
| `errors[].fieldValue` (Required when parent is present) | `string` |   |
| `errors[].identifier` (Required when parent is present) | `string` |   |
| `errors[].identifierValue` (Required when parent is present) | `string` |   |
| `errors[].messageCode` (Required when parent is present) | `string` |   |
| `errors[].message` | `string` |   |
| `errors[].errorType` (Required when parent is present) | `string` |   |

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

### Example request

```bash
curl https://api.subrite.no/api/v1/podcast/spotify-link \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "code": "string",
  "redirect_uri": "string"
}'
```

### Example response

201 · `application/json`

```json
{
  "completion_url": "string"
}
```

<a id="get-api-v1-podcast-verify-access"></a>
## Verify member has active access to podcast (M2M only)

`GET /api/v1/podcast/verify-access`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `memberId` (Required) | query | `string` |   |
| `podcastId` (Required) | query | `number` |   |

### Responses

#### 200

#### 401

unauthorized

### Example request

```bash
curl 'https://api.subrite.no/api/v1/podcast/verify-access?memberId=%3CmemberId%3E&podcastId=%3CpodcastId%3E' \
  --header 'Authorization: Bearer <token>'
```

<a id="get-api-v1-podcast-episode-url"></a>
## Get original episode URL by episodeId and hash (M2M only)

`GET /api/v1/podcast/episode-url`

**Authentication:** Bearer token (JWT)

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `episodeId` (Required) | query | `string` |   |
| `hash` (Required) | query | `string` | SHA256 hash of original URL (first 16 chars) |
| `podcastId` (Required) | query | `number` |   |
| `memberId` (Required) | query | `string` |   |

### Responses

#### 200

Content type: `application/json` · `EpisodeUrlResponseDto`

| Name | Type | Description |
| --- | --- | --- |
| `originalUrl` (Required) | `string` |   |
| `providerHeaderToken` | `string` | Omny Studio header token. The proxy sends it as X-Proxy-Server-Key to Triton hosts only. |

#### 401

unauthorized

### Example request

```bash
curl 'https://api.subrite.no/api/v1/podcast/episode-url?episodeId=%3CepisodeId%3E&hash=%3Chash%3E&podcastId=%3CpodcastId%3E&memberId=%3CmemberId%3E' \
  --header 'Authorization: Bearer <token>'
```

### Example response

200 · `application/json`

```json
{
  "originalUrl": "string",
  "providerHeaderToken": "<providerHeaderToken>"
}
```

<a id="get-api-v1-podcast-signature"></a>
## Get podcast feed

`GET /api/v1/podcast/{signature}`

### Parameters

| Name | In | Type | Description |
| --- | --- | --- | --- |
| `signature` (Required) | path | `string` |   |

### Responses

#### 200

### Example request

```bash
curl 'https://api.subrite.no/api/v1/podcast/{signature}'
```

<a id="get-api-v1-podcast-spotify-spotify-setup-enabled"></a>
## Check if Spotify setup is enabled

`GET /api/v1/podcast/spotify/spotify-setup-enabled`

### Responses

#### 200

Content type: `application/json` · `boolean`

### Example request

```bash
curl https://api.subrite.no/api/v1/podcast/spotify/spotify-setup-enabled
```

### Example response

200 · `application/json`

```json
true
```

<a id="get-api-v1-podcast-spotify-link-status"></a>
## Get current Spotify link status for the authenticated user

`GET /api/v1/podcast/spotify/link-status`

### Responses

#### 200

Content type: `application/json` · `SpotifyLinkStatusDto`

| Name | Type | Description |
| --- | --- | --- |
| `isLinked` (Required) | `boolean` | Whether the user has a linked Spotify account |
| `partnerUserId` | `string` | Spotify partner user ID if linked |
| `entitlements` | `array of string` | Current entitlements from Spotify |
| `lastUpdated` | `string (date-time)` | Last updated timestamp |
| `hasLocalRecord` | `boolean` | Whether a local SpotifyUser record exists (may differ from isLinked if Spotify API reports broken link) |

### Example request

```bash
curl https://api.subrite.no/api/v1/podcast/spotify/link-status
```

### Example response

200 · `application/json`

```json
{
  "isLinked": true,
  "partnerUserId": "string",
  "entitlements": [
    "string"
  ],
  "lastUpdated": "2019-08-24T14:15:22Z",
  "hasLocalRecord": true
}
```

<a id="post-api-v1-podcast-spotify-unlink"></a>
## Unlink the authenticated user from Spotify

`POST /api/v1/podcast/spotify/unlink`

### Responses

#### 201

Content type: `application/json` · `UnlinkSpotifyResponseDto`

| Name | Type | Description |
| --- | --- | --- |
| `message` (Required) | `string` | Success message |
| `success` (Required) | `boolean` | Whether the unlink was successful |

#### 400

Content type: `application/json` · `ErrorResponse`

No Spotify account linked to unlink

Same fields as [Create a Spotify link (400)](https://www.subrite.no/developers/podcast?md=true#post-api-v1-podcast-spotify-link).

**Example response**

`application/json`

```json
{
  "messageCode": "string",
  "message": "string",
  "errors": [
    {}
  ]
}
```

### Example request

```bash
curl https://api.subrite.no/api/v1/podcast/spotify/unlink \
  --request POST
```

### Example response

201 · `application/json`

```json
{
  "message": "string",
  "success": true
}
```
