Podcasts API

REST endpoints for listing podcasts and fetching podcast details.

Base URL

https://api.studio.inlet.fm

Authentication

All endpoints require authentication via the Authorization header:

Authorization: Token <API_KEY>

Requests without a valid token return 401 Unauthorized. Rate limiting is applied per API key.

Endpoints

1. List Podcasts

GET /podcasts

Returns all podcasts accessible to the authenticated API key, paginated using cursor-based pagination.

Query Parameters

| Parameter | Type | Required | Description |

| --- | --- | --- | --- |

| first | integer | No | Number of results to return (default: 20, max: 100) |

| after | string | No | Pagination cursor from previous response pagination.endCursor |

Response

{
  "success": true,
  "data": [
    {
      "id": "64a1f2b3c4d5e6f7a8b9c0d1",
      "name": "My Podcast",
      "monetizationEnabled": true,
      "analyticsMonitoringEnabled": true
    }
  ],
  "pagination": {
    "hasNextPage": true,
    "endCursor": "NjRhMWYyYjNjNGQ1ZTZmN2E4YjljMGQx",
    "totalCount": 42
  }
}

Field Descriptions

| Field | Description |

| --- | --- |

| monetizationEnabled | Whether ad monetization (Megaphone SPAN) is active for this podcast |

| analyticsMonitoringEnabled | Whether revenue and download analytics are available |

Example Request

curl "https://api.studio.inlet.fm/api/v1/podcasts?first=20" \
  -H "Authorization: Token your-api-key-here"

2. Get Single Podcast

GET /podcasts/:podcastId

Returns one podcast record (same auth scope: owner/co-owner only).

Response

{
  "success": true,
  "data": {
    "id": "64a1f2b3c4d5e6f7a8b9c0d1",
    "name": "My Podcast",
    "slug": "my-podcast",
    "subTitle": "A show about things",
    "description": "Full description...",
    "logo": "https://cdn.example.com/logo.jpg",
    "itunesCategories": ["Technology"],
    "keywords": ["tech", "startup"],
    "monetizationEnabled": true,
    "analyticsMonitoringEnabled": true,
    "audioUrls": {
      "applePodcastUrl": "https://podcasts.apple.com/...",
      "spotifyPodcastUrl": "https://open.spotify.com/...",
      "rssPodcastUrl": "https://feeds.example.com/...",
      "overcastPodcastUrl": null
    },
    "createdAt": "2025-01-01T00:00:00.000Z",
    "updatedAt": "2026-04-30T12:00:00.000Z"
  }
}

Example Request

curl "https://api.studio.inlet.fm/api/v1/podcasts/64a1f2b3c4d5e6f7a8b9c0d1" \
  -H "Authorization: Token your-api-key-here"

Error Cases

  • 400: Invalid podcastId format
  • 403: API key has no access to podcast
  • 404: Podcast does not exist
  • 500: Internal error
  • TypeScript Types

    export interface Podcast {
      id: string;
      name: string;
      monetizationEnabled: boolean;
      analyticsMonitoringEnabled: boolean;
    }
    
    export interface AudioUrls {
      applePodcastUrl: string | null;
      spotifyPodcastUrl: string | null;
      rssPodcastUrl: string | null;
      overcastPodcastUrl: string | null;
    }
    
    export interface PodcastDetail extends Podcast {
      slug: string;
      subTitle: string;
      description: string;
      logo: string | null;
      itunesCategories: string[];
      keywords: string[];
      audioUrls: AudioUrls;
      createdAt: string;
      updatedAt: string;
    }
    
    export interface PaginatedPodcastsResponse {
      success: true;
      data: Podcast[];
      pagination: {
        hasNextPage: boolean;
        endCursor: string | null;
        totalCount: number;
      };
    }
    
    export interface ApiSuccess<T> {
      success: true;
      data: T;
    }

    Common HTTP Status Codes

  • 400: Bad Request
  • 401: Unauthorized (missing or invalid API key)
  • 403: Forbidden
  • 404: Not Found
  • 500: Internal Server Error