Kajabi Podcasts API

The Podcasts API from Kajabi — 2 operation(s) for podcasts.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

kajabi-podcasts-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Kajabi API V1 Authentication Podcasts API
  version: 1.1.0
  description: "## Public API\n* Server URL `https://api.kajabi.com`\n* Endpoint paths are prefixed with `/v1`\n* Version endpoint `GET https://api.kajabi.com/v1/version`\n* See the [Developers Site](https://developers.kajabi.com) for documentation and examples.\n* Try the demo [Postman collection](https://www.postman.com/kajabi-apis/beta-public-api-demo/collection/fg4iyaz/kajabi-public-api-v1)\n## API Keys\n* Your API `client_id` and `client_secret` are available on the [User API Keys](https://app.kajabi.com/admin/settings/security) section of the Kajabi Admin Portal.\n  * Custom API Keys can be created with specific permissions.\n  * Click the \"Create User API Key\" button, enter a name (e.g. \"My project\"), select the user and permissions, and click \"Create\".\n  * For security purposes, you may \"Delete\" or \"Rotate\" the api credentials at any time; which will invalidate any access tokens granted with the credentials.\n## Video Walkthroughs\n* [Capabilities](https://drive.google.com/file/d/1Puc9B2sSdA-RQb7YMxmUXg4FVoEXytoc/view?usp=sharing)\n* [Getting Started](https://drive.google.com/file/d/1hbGRShkxven_QMWvgYrerHKURbcZrnvJ/view?usp=sharing)\n* [Error Examples](https://drive.google.com/file/d/1i0wQK71I1jpaZVsxYwsn62gVj40S_E7Y/view?usp=sharing)\n* [External Contact Form](https://drive.google.com/file/d/1HqpULXvan5TOK3LvM7nILCuCkCaX0kFT/view?usp=sharing)\n"
  contact:
    email: support@kajabi.com
    name: Support
    url: https://help.kajabi.com/hc/en-us/articles/4404549690523-How-to-Get-Help-From-Kajabi-Live-Agents
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: https://api.kajabi.com
  description: Production
tags:
- name: Podcasts
paths:
  /v1/podcasts:
    get:
      summary: List podcasts
      description: "Podcasts for a site\n## Pagination\nUse `page[number]` and `page[size]` parameters to paginate results:\n### Get first page of 10 items\n* `GET /v1/podcasts?page[number]=1&page[size]=10`\n### Get second page of 25 items\n* `GET /v1/podcasts?page[number]=2&page[size]=25`\n\nThe response includes pagination links and meta data:\n```json\n{\n  \"links\": {\n    \"self\": \"https://api.kajabi.com/v1/podcasts?page[number]=2&page[size]=10\",\n    \"first\": \"https://api.kajabi.com/v1/podcasts?page[number]=1&page[size]=10\",\n    \"prev\": \"https://api.kajabi.com/v1/podcasts?page[number]=1&page[size]=10\",\n    \"next\": \"https://api.kajabi.com/v1/podcasts?page[number]=3&page[size]=10\",\n    \"last\": \"https://api.kajabi.com/v1/podcasts?page[number]=5&page[size]=10\"\n  },\n  \"meta\": {\n    \"total_pages\": 5,\n    \"total_count\": 50,\n    \"current_page\": 2\n  }\n}\n```\n## Sorting\nUse the `sort` parameter to sort the results:\n### Sort by title in ascending order\n* `GET /v1/podcasts?sort=title`\n### Sort by title in descending order\n* `GET /v1/podcasts?sort=-title`\n\nResponse will include podcasts sorted by the specified field\n```json\n{\n  \"data\": [\n    {\n      \"id\": \"123\",\n      \"type\": \"podcasts\",\n      \"attributes\": {\n        \"title\": \"My Podcast A\",\n        \"description\": \"A great podcast about technology\"\n      }\n    },\n    {\n      \"id\": \"456\",\n      \"type\": \"podcasts\",\n      \"attributes\": {\n        \"title\": \"My Podcast B\",\n        \"description\": \"Another great podcast about business\"\n      }\n    }\n  ]\n}\n```\n## Sparse Fields\nUse the `fields[podcasts]` parameter to request only specific attributes:\n### Only return title and description attributes\n* `GET /v1/podcasts?fields[podcasts]=title,description`\n\nResponse will only include requested fields\n```json\n{\n  \"data\": [{\n    \"id\": \"123\",\n    \"type\": \"podcasts\",\n    \"attributes\": {\n      \"title\": \"My Podcast A\",\n      \"description\": \"A great podcast about technology\"\n    }\n  }]\n}\n```\n## Filter by Site ID\nUse the `filter[site_id]` parameter to get podcasts for a specific site:\n### Get podcasts for site with ID 123\n* `GET /v1/podcasts?filter[site_id]=123`\n\nResponse will only include podcasts for that site\n```json\n{\n  \"data\": [{\n    \"id\": \"456\",\n    \"type\": \"podcasts\",\n    \"attributes\": {\n      \"title\": \"My Podcast\",\n      \"description\": \"A great podcast\"\n    }\n  }]\n}\n```\n"
      tags:
      - Podcasts
      security:
      - Bearer: []
      parameters:
      - name: filter[site_id]
        in: query
        required: false
        description: Filter by site ID, for example ?filter[site_id]=123
        schema:
          type: string
      - name: filter[title_eq]
        in: query
        required: false
        description: Filter by exact title match, for example ?filter[title_eq]=My Podcast
        schema:
          type: string
      - name: filter[title_cont]
        in: query
        required: false
        description: Filter by title containing text, for example ?filter[title_cont]=technology
        schema:
          type: string
      - name: filter[status_eq]
        in: query
        required: false
        description: Filter by status, for example ?filter[status_eq]=ready
        schema:
          type: string
      - name: filter[show_type_eq]
        in: query
        required: false
        description: Filter by show type, for example ?filter[show_type_eq]=episodic
        schema:
          type: string
      - name: sort
        in: query
        required: false
        description: Sort results by field, for example ?sort=title or ?sort=-title (descending)
        schema:
          type: string
      - name: page[number]
        in: query
        required: false
        description: Page number for pagination, for example ?page[number]=1
        schema:
          type: integer
      - name: page[size]
        in: query
        required: false
        description: Number of items per page, for example ?page[size]=10
        schema:
          type: integer
      - name: fields[podcasts]
        in: query
        required: false
        description: Comma-separated list of fields to include, for example ?fields[podcasts]=title,description
        schema:
          type: string
      responses:
        '200':
          description: List of podcasts
          content:
            application/vnd.api+json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        type:
                          type: string
                          enum:
                          - podcasts
                        attributes:
                          $ref: '#/components/schemas/podcasts_attributes'
                        relationships:
                          type: object
                          properties:
                            site:
                              type: object
                              properties:
                                data:
                                  $ref: '#/components/schemas/resource_identifier'
                  links:
                    type: object
                    properties:
                      self:
                        type: string
                      first:
                        type: string
                      prev:
                        type: string
                      next:
                        type: string
                      last:
                        type: string
                  meta:
                    type: object
                    properties:
                      total_pages:
                        type: integer
                      total_count:
                        type: integer
                      current_page:
                        type: integer
        '401':
          description: Unauthorized
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
  /v1/podcasts/{id}:
    get:
      summary: Show podcast
      description: 'Get details for a specific podcast

        ## Attributes

        - **title**: The podcast title

        - **description**: The podcast description

        - **language**: The podcast language (e.g., "en", "es")

        - **owner_email**: The podcast owner''s email address

        - **owner_name**: The podcast owner''s name

        - **status**: The podcast status (ready, importing, failed)

        - **show_type**: The show type (episodic, serial)

        - **thumbnail_url**: URL to the podcast thumbnail image

        - **cover_art_url**: URL to the podcast cover art image

        - **categories**: Array of podcast categories

        - **directories**: Array of podcast directories

        - **migrated_to_url**: URL if podcast has been migrated

        - **migrated**: Boolean indicating if podcast has been migrated

        - **public**: Boolean indicating if podcast is public

        - **ready**: Boolean indicating if podcast is ready

        - **distribution_ready**: Boolean indicating if podcast is ready for distribution

        - **created_at**: ISO 8601 date-time when podcast was created (read-only)

        - **updated_at**: ISO 8601 date-time when podcast was last updated (read-only)

        '
      tags:
      - Podcasts
      security:
      - Bearer: []
      parameters:
      - name: id
        in: path
        required: true
        description: Podcast ID
        schema:
          type: string
      responses:
        '200':
          description: Podcast details
          content:
            application/vnd.api+json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                      type:
                        type: string
                        enum:
                        - podcasts
                      attributes:
                        $ref: '#/components/schemas/podcasts_attributes'
                      relationships:
                        type: object
                        properties:
                          site:
                            type: object
                            properties:
                              data:
                                $ref: '#/components/schemas/resource_identifier'
        '401':
          description: Unauthorized
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_unauthorized'
        '403':
          description: Forbidden
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_forbidden'
        '404':
          description: Not Found
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/errors_not_found'
components:
  schemas:
    podcasts_attributes:
      type: object
      properties:
        title:
          type: string
        description:
          type: string
        language:
          type: string
        owner_email:
          type: string
        author:
          type: string
          nullable: true
        status:
          type: string
          enum:
          - ready
          - importing
          - failed
        show_type:
          type: string
          enum:
          - episodic
          - serial
        thumbnail_url:
          type: string
          nullable: true
        cover_art_url:
          type: string
          nullable: true
        categories:
          type: array
          items:
            type: string
        directories:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              url:
                type: string
              config:
                type: object
        migrated_to_url:
          type: string
          nullable: true
        migrated:
          type: boolean
        public:
          type: boolean
        ready:
          type: boolean
        distribution_ready:
          type: boolean
        url:
          type: string
          description: Public URL for the podcast
        created_at:
          type: string
          format: date-time
          readOnly: true
          description: ISO 8601 date-time, read only
        updated_at:
          type: string
          format: date-time
          readOnly: true
          description: ISO 8601 date-time, read only
    errors_not_found:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/errors_attributes'
    resource_identifier:
      type: object
      properties:
        id:
          type: string
        type:
          type: string
      required:
      - id
      - type
    errors_attributes:
      type: object
      properties:
        status:
          type: string
        source:
          type: object
          nullable: true
          properties:
            pointer:
              type: string
        title:
          type: string
        detail:
          type: string
    errors_unauthorized:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/errors_attributes'
    errors_forbidden:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/errors_attributes'
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
x-mint:
  mcp:
    enabled: true