{
  "openapi": "3.0.1",
  "info": {
    "title": "Spotify Podcast Episodes Monitor - New Episodes & Ratings",
    "description": "Latest episodes and show details for Spotify podcasts: title, release time, duration and link of each episode in the public show page, plus publisher, rating average, rating count and episode total. Monitoring mode returns only new episodes and rating changes.",
    "version": "0.1",
    "x-build-id": "4Og0NcAvWeym1TpqH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~spotify-podcast-episodes-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-spotify-podcast-episodes-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/neverempty~spotify-podcast-episodes-monitor/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-spotify-podcast-episodes-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/neverempty~spotify-podcast-episodes-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-spotify-podcast-episodes-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "shows": {
            "title": "Spotify podcast shows",
            "type": "array",
            "description": "Show page URLs (https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk), spotify:show: URIs, or the 22-character show IDs. Only open.spotify.com/show/<id> pages are requested, one request per show. Episode, artist, playlist and embed links are not read and come back as an \"invalid-input\" row that is not charged; an ID Spotify has no show page for comes back as a \"no-such-show\" row that is not charged. Show names are not searched: use the link from the Share menu in Spotify.",
            "items": {
              "type": "string"
            }
          },
          "maxEpisodesPerShow": {
            "title": "Episodes per show",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "With monitoring off, how many of the episodes found in the show page are returned per show, newest first. The public show page carries the most recent episodes only (12 at the time of writing), so a larger number does not return more. 0 = return the show row only. Monitoring mode ignores this and returns every new episode it finds.",
            "default": 12
          },
          "maxShows": {
            "title": "Maximum shows to return",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "With monitoring off, the run stops after this many show rows and lists the lines it did not read in a row that is not charged. Monitoring mode ignores this and checks every show you listed.",
            "default": 100
          },
          "monitoringMode": {
            "title": "Monitoring mode: return only new episodes and rating changes",
            "type": "boolean",
            "description": "Off = return every show you listed with the episodes in its page, charged per show row and per episode row. On = the first run remembers each show (the episode IDs in its page, its rating count and its episode total) and returns nothing for it, free of charge. Later runs return an episode row for each episode that was not there before, and a show row when the rating count changed or when the episode total moved by a number the new episodes in the page do not explain. A show that was compared and had nothing to return is charged as one check (show-checked) instead. Shows are remembered one by one, not per list, so adding a show does not reset the others. Because the page carries only the most recent episodes, run often enough that fewer new episodes than that appear between two runs. Do not put the same show in two schedules that run at the same moment.",
            "default": false
          },
          "watch": {
            "title": "What to watch",
            "enum": [
              "episodes-and-ratings",
              "episodes-only",
              "ratings-only"
            ],
            "type": "string",
            "description": "New episodes and ratings = both are returned. New episodes only = a rating change alone returns nothing (useful for large shows, whose rating count moves every day). Ratings only = new episodes are not returned.",
            "default": "episodes-and-ratings"
          },
          "minRatingCountChange": {
            "title": "Smallest rating-count change to report",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "A show row is returned for a rating change only when the rating count differs from the last reported count by at least this many. Smaller differences are not reported and not remembered, so they add up until the threshold is reached. For shows with 1,000 ratings or more the smallest reported change is 3 even when this is lower, because the public figure of a large show can differ by 1 from one read to the next.",
            "default": 1
          },
          "resetMonitoringState": {
            "title": "Forget the remembered shows and start over",
            "type": "boolean",
            "description": "Clears everything remembered for this Actor on your account, so the next monitoring run treats each show as a first check again. This affects all your monitoring runs, because shows are remembered one by one rather than per list.",
            "default": false
          },
          "useProxy": {
            "title": "Retry once through a residential proxy when Spotify answers 403 or 429",
            "type": "boolean",
            "description": "Requests go directly to Spotify. If Spotify answers HTTP 403 or 429, the page is requested one more time through an Apify residential proxy, at most three times in a run; if it is refused again, or a fourth page is refused, the run stops asking and lists what it did not read. A show that Spotify does not offer in the country of the request (its \"not currently available\" page) is reported as such and is not retried. Turn this off to never use a proxy.",
            "default": true
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}