gpodder.net API

gpodder.net API as documented publicly: 18 operations. Contract generated from the documentation by API Evangelist (2026-10-28); not the provider's own document.

Operations 18

GET /api/2/data/podcast.json Retrieve Podcast Data #
POST /api/2/devices/a-user/somedevice-123.json Update Device Data #
POST /api/2/episodes/some-user.json Episode Actions API — gpodder.net documentation #
GET /api/2/favorites Get Favorite Episodes #
GET /api/2/settings Get Settings #
POST /api/2/settings Save Settings #
GET /api/2/sync-devices/ ( username ) .json Get Sync Status #
POST /api/2/sync-devices/ ( username ) .json Start / Stop Sync #
GET /search.json Carries out a service-wide search for podcasts that match the given query. #
GET /search.opml Carries out a service-wide search for podcasts that match the given query. #
GET /search.txt Carries out a service-wide search for podcasts that match the given query. #
GET /subscriptions/bob.opml Get All Subscriptions #
GET /subscriptions/bob/asdf.opml Get Subscriptions of Device #
PUT /subscriptions/john/e9c4ea4ae004efac40.txt Upload Subscriptions of Device #
GET /suggestions Retrieve Suggested Podcasts #
GET /suggestions/10.opml Retrieve Suggested Podcasts #
GET /toplist/50.json Get the top 50 list in JSON format #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/gpodder:gpodder-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

gpodder-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: gpodder.net API
  version: '2026-10-28'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-10-28: 18 operation(s) read from 11 public documentation page(s) (each
    operation names its page in x-source). This is not the provider''s published contract; gpodder.net has published no machine-readable contract
    that the pipeline could find. Engine: local.'
  x-evidence-tiers:
    code-example: 0
    documentation: 18
    pages-with-code: 0
    pages-read: 11
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-10-28'
  x-generator: generate-contract-from-docs.py
  x-engine: local
  x-sources:
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/auth.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/directory.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/suggestions.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/devices.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/subscriptions.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/events.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/podcastlists.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/settings.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/favorites.html
  - https://gpoddernet.readthedocs.io/en/latest/api/reference/sync.html
  - https://gpoddernet.readthedocs.io/en/latest/api/api1.html
servers:
- url: https://gpodder.net
paths:
  /api/2/data/podcast.json:
    get:
      operationId: get_api_2_data_podcast_json
      tags:
      - Api
      summary: Retrieve Podcast Data
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/directory.html
      parameters:
      - name: url
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApi2DataPodcastJsonResponse'
      x-evidence:
        kind: documentation
  /api/2/devices/a-user/somedevice-123.json:
    post:
      operationId: post_api_2_devices_a_user_somedevice_123_json
      tags:
      - Api
      summary: Update Device Data
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/devices.html
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApi2DevicesAUserSomedevice123JsonRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApi2DevicesAUserSomedevice123JsonResponse'
      x-evidence:
        kind: documentation
  /api/2/episodes/some-user.json:
    post:
      operationId: post_api_2_episodes_some_user_json
      tags:
      - Api
      summary: Episode Actions API — gpodder.net documentation
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/events.html
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApi2EpisodesSomeUserJsonRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApi2EpisodesSomeUserJsonResponse'
      x-evidence:
        kind: documentation
  /api/2/favorites:
    get:
      operationId: get_api_2_favorites
      tags:
      - Api
      summary: Get Favorite Episodes
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/favorites.html
      parameters:
      - name: username
        in: query
        required: true
        schema:
          type: string
        description: username for which the favorites should be returned
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApi2FavoritesResponse'
      x-evidence:
        kind: documentation
  /api/2/settings:
    get:
      operationId: get_api_2_settings
      tags:
      - Api
      summary: Get Settings
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/settings.html
      parameters:
      - name: podcast
        in: query
        required: false
        schema:
          type: string
        description: Feed URL of a podcast (required for scope podcast and episode)
      - name: device
        in: query
        required: false
        schema:
          type: string
        description: Device id (required for scope device)
      - name: episode
        in: query
        required: false
        schema:
          type: string
        description: media URL of the episode (required for scope episode)
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApi2SettingsResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_2_settings
      tags:
      - Api
      summary: Save Settings
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/settings.html
      parameters:
      - name: podcast
        in: query
        required: false
        schema:
          type: string
        description: Feed URL of a podcast (required for scope podcast and episode)
      - name: device
        in: query
        required: false
        schema:
          type: string
        description: Device id (required for scope device)
      - name: episode
        in: query
        required: false
        schema:
          type: string
        description: media URL of the episode (required for scope episode)
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApi2SettingsRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApi2SettingsResponse'
      x-evidence:
        kind: documentation
  /api/2/sync-devices/ ( username ) .json:
    get:
      operationId: get_api_2_sync_devices_username_json
      tags:
      - Api
      summary: Get Sync Status
      description: Returns the synchronization status for the given user.
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/sync.html
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApi2SyncDevicesUsernameJsonResponse'
      x-evidence:
        kind: documentation
    post:
      operationId: post_api_2_sync_devices_username_json
      tags:
      - Api
      summary: Start / Stop Sync
      description: Sets up or stops synchronization between devices and returns the updated status.
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/sync.html
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApi2SyncDevicesUsernameJsonRequest'
      responses:
        '201':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApi2SyncDevicesUsernameJsonResponse'
      x-evidence:
        kind: documentation
  /search:
    get:
      operationId: get_search
      tags:
      - Search
      summary: Podcast Search
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/directory.html
      parameters:
      - name: q
        in: query
        required: false
        schema:
          type: string
      - name: jsonp
        in: query
        required: false
        schema:
          type: string
      - name: scale_logo
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /search.json:
    get:
      operationId: get_search_json
      tags:
      - Search
      summary: Carries out a service-wide search for podcasts that match the given query.
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/api1.html
      parameters:
      - name: q
        in: query
        required: true
        schema:
          type: string
        description: Search query
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSearchJsonResponse'
      x-evidence:
        kind: documentation
  /search.opml:
    get:
      operationId: get_search_opml
      tags:
      - Search
      summary: Carries out a service-wide search for podcasts that match the given query.
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/api1.html
      parameters:
      - name: q
        in: query
        required: true
        schema:
          type: string
        description: Search query
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /search.txt:
    get:
      operationId: get_search_txt
      tags:
      - Search
      summary: Carries out a service-wide search for podcasts that match the given query.
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/api1.html
      parameters:
      - name: q
        in: query
        required: true
        schema:
          type: string
        description: Search query
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /subscriptions/bob.opml:
    get:
      operationId: get_subscriptions_bob_opml
      tags:
      - Subscriptions
      summary: Get All Subscriptions
      description: Returns all subscriptions for the user in the requested format.
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/subscriptions.html
      parameters:
      - name: jsonp
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /subscriptions/bob/asdf.opml:
    get:
      operationId: get_subscriptions_bob_asdf_opml
      tags:
      - Subscriptions
      summary: Get Subscriptions of Device
      description: Returns the subscriptions of the specified device in the requested format.
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/subscriptions.html
      parameters:
      - name: jsonp
        in: query
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /subscriptions/john/e9c4ea4ae004efac40.txt:
    put:
      operationId: put_subscriptions_john_e9c4ea4ae004efac40_txt
      tags:
      - Subscriptions
      summary: Upload Subscriptions of Device
      description: Uploads the current subscription list for the given user/device.
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/subscriptions.html
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /suggestions:
    get:
      operationId: get_suggestions
      tags:
      - Suggestions
      summary: Retrieve Suggested Podcasts
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/suggestions.html
      parameters:
      - name: jsonp
        in: query
        required: false
        schema:
          type: string
        description: function name for the JSONP format (since 2.8)
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSuggestionsResponse'
      x-evidence:
        kind: documentation
  /suggestions/10.opml:
    get:
      operationId: get_suggestions_10_opml
      tags:
      - Suggestions
      summary: Retrieve Suggested Podcasts
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/reference/suggestions.html
      parameters:
      - name: jsonp
        in: query
        required: false
        schema:
          type: string
        description: function name for the JSONP format (since 2.8)
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSuggestions10OpmlResponse'
      x-evidence:
        kind: documentation
  /toplist/50.json:
    get:
      operationId: get_toplist_50_json
      tags:
      - Toplist
      summary: Get the top 50 list in JSON format
      x-source: https://gpoddernet.readthedocs.io/en/latest/api/api1.html
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetToplist50JsonResponse'
      x-evidence:
        kind: documentation
components:
  schemas:
    GetApi2DataPodcastJsonResponse:
      type: object
      properties:
        website:
          type: string
        mygpo_link:
          type: string
        description:
          type: string
        subscribers:
          type: integer
        title:
          type: string
        author:
          type: string
        url:
          type: string
        logo_url:
          type: string
    PostApi2DevicesAUserSomedevice123JsonRequest:
      type: object
      properties:
        caption:
          type: string
          description: human readable label for the device
        type:
          type: string
          description: type of the device (desktop, laptop, mobile, server, other)
    PostApi2DevicesAUserSomedevice123JsonResponse:
      type: object
      properties:
        caption:
          type: string
          description: The new human readable label for the device
        type:
          type: string
          description: 'The type of the device. Possible values: desktop, laptop, mobile, server, other'
    PostApi2EpisodesSomeUserJsonRequest:
      type: object
      properties:
        podcast:
          type: string
          description: The feed URL to the podcast feed the episode belongs to
        episode:
          type: string
          description: The media URL of the episode
        device:
          type: string
          description: The device ID on which the action has taken place
        action:
          type: string
          description: 'One of: download, play, delete, new'
        timestamp:
          type: string
          description: A UTC timestamp when the action took place, in ISO 8601 format
        started:
          type: integer
          description: Only valid for “play”. the position (in seconds) at which the client started playback. Requires position and total to be
            set.
        position:
          type: integer
          description: Only valid for “play”. the position (in seconds) at which the client stopped playback
        total:
          type: integer
          description: Only valid for “play”. the total length of the file in seconds. Requires position and started to be set.
      required:
      - podcast
      - episode
      - action
    PostApi2EpisodesSomeUserJsonResponse:
      type: object
      properties:
        timestamp:
          type: integer
          description: The server timestamp returned in the response
        update_urls:
          type: array
          description: List of tuples with original and sanitized URLs
    GetApi2FavoritesResponse:
      type: object
      properties:
        title:
          type: string
          description: episode title
        url:
          type: string
          description: URL of the episode media
        podcast_title:
          type: string
          description: title of the podcast
        podcast_url:
          type: string
          description: URL of the podcast
        description:
          type: string
          description: episode description
        website:
          type: string
          description: website link for the episode
        released:
          type: string
          description: release date-time of the episode
        mygpo_link:
          type: string
          description: link to the episode on gpodder.net
    GetApi2SettingsResponse:
      type: object
      properties:
        '*':
          type: object
          description: All settings that the scope currently has
    PostApi2SettingsRequest:
      type: object
      properties:
        set:
          type: object
          description: dictionary of settings to add or update
        remove:
          type: array
          description: list of keys that shall be removed from the scope
    PostApi2SettingsResponse:
      type: object
      properties:
        '*':
          type: object
          description: All settings that the scope has after the update
    GetApi2SyncDevicesUsernameJsonResponse:
      type: object
      properties:
        synchronized:
          type: array
          description: list of synchronized device pairs
        not-synchronized:
          type: array
          description: list of devices not synchronized
    PostApi2SyncDevicesUsernameJsonRequest:
      type: object
      properties:
        synchronize:
          type: array
          description: list of device pairs to start synchronizing
        stop-synchronize:
          type: array
          description: list of devices to stop synchronizing
    PostApi2SyncDevicesUsernameJsonResponse:
      type: object
      properties:
        synchronized:
          type: array
          description: list of synchronized device groups after the operation
        not-synchronized:
          type: array
          description: list of devices not synchronized after the operation
    GetSearchJsonResponse:
      type: object
      properties:
        url:
          type: string
          description: Podcast feed URL
        title:
          type: string
          description: Podcast title
        description:
          type: string
          description: Podcast description
    GetSuggestionsResponse:
      type: object
      properties:
        website:
          type: string
        mygpo_link:
          type: string
        description:
          type: string
        subscribers:
          type: integer
        title:
          type: string
        author:
          type: string
        url:
          type: string
        logo_url:
          type: string
          description: nullable
    GetSuggestions10OpmlResponse:
      type: object
      properties:
        website:
          type: string
        mygpo_link:
          type: string
        description:
          type: string
        subscribers:
          type: integer
        title:
          type: string
        author:
          type: string
        url:
          type: string
        logo_url:
          type: string
          description: nullable
    GetToplist50JsonResponse:
      type: object
      properties:
        url:
          type: string
          description: Podcast feed URL
        title:
          type: string
          description: Podcast title
        description:
          type: string
          description: Podcast description (may be empty)
        subscribers:
          type: integer
          description: Number of subscribers
tags:
- name: Api
- name: Search
- name: Subscriptions
- name: Suggestions
- name: Toplist