diff --git a/.editorconfig b/.editorconfig index 5aa0d16..b6a3f17 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,6 +8,7 @@ indent_style = space insert_final_newline = true max_line_length = 120 tab_width = 4 +trim_trailing_whitespace = true [{*.yaml,*.yml}] indent_size = 2 diff --git a/Postman Docs/PodcastIndex.postman_collection.json b/Postman Docs/PodcastIndex.postman_collection.json index f759ba1..83361c3 100644 --- a/Postman Docs/PodcastIndex.postman_collection.json +++ b/Postman Docs/PodcastIndex.postman_collection.json @@ -2,7 +2,7 @@ "info": { "_postman_id": "2b24a533-e8b5-4ae0-973c-94c55ec56a81", "name": "PodcastIndex", - "description": "Download the openapi spec in [json](pi_api.json) or [yaml](pi_api.yaml) format.\n\n# Overview\n\nThe Podcast Index (Podcast Index LLC) is a software developer focused partnership that provides tools and data to\nanyone who aspires to create new and exciting Podcast experiences without the heavy lifting of indexing,\naggregation and data management.\n\n# Example Code\n\nUsers have provided example code for working the API in the following languages:\n\n - [AWS Lambda - python](https://github.com/tbowers/python-podcastindex-org-lambda)\n - [Bash](https://github.com/suorcd/Bash-podcastindex-org-example)\n - [C#](https://github.com/ComicStrip/csharp-podcastindex-org-example)\n - [Elisp](https://github.com/sabexx/elisp-example)\n - [Flutter/Dart](https://github.com/crediblecreative/flutter-dart-podcastindex-org-example)\n - [Go](https://github.com/ComicStrip/Go-podcastindex-org-example)\n - [Go](https://github.com/kilobit/podcast-index-client)\n - [Java](https://github.com/ComicStrip/Java-podcastindex-org-example)\n - [Java](https://github.com/stucoates/PodcastIndexJavaClient)\n - [Node.js](https://github.com/ComicStrip/node.js-podcastindex-org-example)\n - [PHP](https://github.com/Podcastindex-org/example-code)\n - [Python](https://github.com/tbowers/python-podcastindex-org-example)\n - [Swift](https://github.com/ComicStrip/Swift-podcastindex-org-example)\n - ... [More](https://github.com/Podcastindex-org-Examples)\n\nDon't see your desired language, create an example repo and create a\n[Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to your example code project!\n\n# Libraries\n\nUser created libraries for working with the API:\n\n - Java\n - [podcast4j](https://github.com/yusufyilmazfr/podcast4j)\n - .NET\n - [PodcastIndexSharp](https://www.nuget.org/packages/PodcastIndexSharp)\n - Node.js/npm/yarn\n - [podcast-index-api](https://www.npmjs.com/package/podcast-index-api)\n - [podcastdx-client](https://www.npmjs.com/package/podcastdx-client)\n - PHP\n - [podcastindex-php](https://github.com/LowSociety/podcastindex-php)\n - Python/pip\n - [python-podcastindex](https://pypi.org/project/python-podcastindex/)\n - R\n - [podindexr](https://github.com/rpodcast/podindexr)\n - Ruby\n - [podcast-index](https://github.com/jasonyork/podcast-index)\n - Swift\n - [PodcastIndexKit](https://github.com/SparrowTek/PodcastIndexKit)\n - Kotlin\n - [PodcastIndex-SDK](https://github.com/mr3y-the-programmer/PodcastIndex-SDK)\nAre we missing a library? Did you create one for a different language? Create a\n[Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to the new library!\n\n# Postman\n\nA collection file for use in the [Postman](https://www.postman.com/) application is available for this API.\n\n 1. Download the contents of the [Postman Docs](https://github.com/Podcastindex-org/docs-api/tree/master/Postman%20Docs) folder.\n 2. Import the `PodcastIndex.postman_collection.json` collection to Postman\n 3. Import the `PodcastIndexOrgEnvironment.postman_environment.json` to Postman\n 4. Click \"Environments\" on the left sidebar\n 5. Select the checkbox next to the PodcastIndexOrgEnvironment entry\n 6. Set `AuthKey` and `SeceretKey` values under the \"Current Value\" column using your API information \n 7. Click \"Collections\" from the sidebar\n 8. Select PodcastIndex\n 9. Select and run the endpoint to test\n\n# Contributing\n\nThe source for this API documentation is available at\n[https://github.com/Podcastindex-org/docs-api](https://github.com/Podcastindex-org/docs-api).\nSubmit an Issue or create a Pull Request.\n\n# Authentication Details\n\nSending an API request is easy. We use an Amazon-style request authorization token to secure each request.\n\nRegister for a free API key at https://api.podcastindex.org/\n\nThese headers parameters are required for each request: `User-Agent`, `X-Auth-Date`, `X-Auth-Key`, `Authorization`\n\nSee [Authentication](#auth) for description of parameters.\n\n# Legal\n\nLegal\n\n - [Privacy Policy](https://github.com/Podcastindex-org/legal/blob/main/PrivacyPolicy.md)\n - [Terms of Service](https://github.com/Podcastindex-org/legal/blob/main/TermsOfService.md)\n - [License](https://github.com/Podcastindex-org/docs-api/blob/master/LICENSE)\n", + "description": "Download the openapi spec in [json](pi_api.json) or [yaml](pi_api.yaml) format.\n\n# Overview\n\nThe Podcast Index (Podcast Index LLC) is a software developer focused partnership that provides tools and data to\nanyone who aspires to create new and exciting Podcast experiences without the heavy lifting of indexing,\naggregation and data management.\n\n# Example Code\n\nUsers have provided example code for working the API in the following languages:\n\n - [AWS Lambda - python](https://github.com/tbowers/python-podcastindex-org-lambda)\n - [Bash](https://github.com/suorcd/Bash-podcastindex-org-example)\n - [C#](https://github.com/ComicStrip/csharp-podcastindex-org-example)\n - [Elisp](https://github.com/sabexx/elisp-example)\n - [Flutter/Dart](https://github.com/crediblecreative/flutter-dart-podcastindex-org-example)\n - [Go](https://github.com/ComicStrip/Go-podcastindex-org-example)\n - [Go](https://github.com/kilobit/podcast-index-client)\n - [Java](https://github.com/ComicStrip/Java-podcastindex-org-example)\n - [Java](https://github.com/stucoates/PodcastIndexJavaClient)\n - [Node.js](https://github.com/ComicStrip/node.js-podcastindex-org-example)\n - [PHP](https://github.com/Podcastindex-org/example-code)\n - [Python](https://github.com/tbowers/python-podcastindex-org-example)\n - [Swift](https://github.com/ComicStrip/Swift-podcastindex-org-example)\n - ... [More](https://github.com/Podcastindex-org-Examples)\n\nDon't see your desired language, create an example repo and create a\n[Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to your example code project!\n\n# Libraries\n\nUser created libraries for working with the API:\n\n - Java\n - [podcast4j](https://github.com/yusufyilmazfr/podcast4j)\n - .NET\n - [PodcastIndexSharp](https://www.nuget.org/packages/PodcastIndexSharp)\n - Node.js/npm/yarn\n - [podcast-index-api](https://www.npmjs.com/package/podcast-index-api)\n - [podcastdx-client](https://www.npmjs.com/package/podcastdx-client)\n - PHP\n - [podcastindex-php](https://github.com/LowSociety/podcastindex-php)\n - Python/pip\n - [python-podcastindex](https://pypi.org/project/python-podcastindex/)\n - R\n - [podindexr](https://github.com/rpodcast/podindexr)\n - Ruby\n - [podcast-index](https://github.com/jasonyork/podcast-index)\n - Swift\n - [PodcastIndexKit](https://github.com/SparrowTek/PodcastIndexKit)\n - Kotlin\n - [PodcastIndex-SDK](https://github.com/mr3y-the-programmer/PodcastIndex-SDK)\n - Go\n - [podcastindex](https://github.com/jjgmckenzie/podcastindex)\n - [podcastindex-go](https://github.com/koalahl/podcastindex-go)\nAre we missing a library? Did you create one for a different language? Create a\n[Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to the new library!\n\n# Postman\n\nA collection file for use in the [Postman](https://www.postman.com/) application is available for this API.\n\n 1. Download the contents of the [Postman Docs](https://github.com/Podcastindex-org/docs-api/tree/master/Postman%20Docs) folder.\n 2. Import the `PodcastIndex.postman_collection.json` collection to Postman\n 3. Import the `PodcastIndexOrgEnvironment.postman_environment.json` to Postman\n 4. Click \"Environments\" on the left sidebar\n 5. Select the checkbox next to the PodcastIndexOrgEnvironment entry\n 6. Set `AuthKey` and `SeceretKey` values under the \"Current Value\" column using your API information \n 7. Click \"Collections\" from the sidebar\n 8. Select PodcastIndex\n 9. Select and run the endpoint to test\n\n# Contributing\n\nThe source for this API documentation is available at\n[https://github.com/Podcastindex-org/docs-api](https://github.com/Podcastindex-org/docs-api).\nSubmit an Issue or create a Pull Request.\n\n# Authentication Details\n\nSending an API request is easy. We use an Amazon-style request authorization token to secure each request.\n\nRegister for a free API key at https://api.podcastindex.org/\n\nThese headers parameters are required for each request: `User-Agent`, `X-Auth-Date`, `X-Auth-Key`, `Authorization`\n\nSee [Authentication](#auth) for description of parameters.\n\n# Legal\n\nLegal\n\n - [Privacy Policy](https://github.com/Podcastindex-org/legal/blob/main/PrivacyPolicy.md)\n - [Terms of Service](https://github.com/Podcastindex-org/legal/blob/main/TermsOfService.md)\n - [License](https://github.com/Podcastindex-org/docs-api/blob/master/LICENSE)\n", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ @@ -546,7 +546,44 @@ } ] }, - "description": "This call returns all feeds that have been marked dead (`dead` == 1)\n\nDead feeds can also be accessed from object storage at https://public.podcastindex.org/podcastindex_dead_feeds.csv\n\nExample: https://api.podcastindex.org/api/1.0/podcasts/dead?pretty\n" + "description": "This call returns all feeds that have been marked dead (`dead` == 1)\n\n\nHourly statistics can also be access at https://public.podcastindex.org/podcastindex_dead_feeds.csv\nFor details, see [Dead Feeds](#get-/static/public/podcastindex_dead_feeds.csv).\n\n\nExample: https://api.podcastindex.org/api/1.0/podcasts/dead?pretty" + }, + "response": [] + }, + { + "name": "Batch By Feed GUID", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "[\n \"856cd618-7f34-57ea-9b84-3600f1f65e7f\",\n \"917393e3-1b1e-5cef-ace4-edaa54e1f810\"\n]", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{baseUrl}}/podcasts/batch/byguid", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "podcasts", + "batch", + "byguid" + ], + "query": [ + { + "key": "pretty", + "value": "", + "description": "If present, makes the output “pretty” to help with debugging.\n\nParameter shall not have a value\n", + "disabled": true + } + ] + }, + "description": "This call returns everything we know about the feed from the feed's GUID provided in JSON array in the body of the request.\n\n\nThe GUID is a unique, global identifier for the podcast. See the namespace spec for\n[guid](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid) for details." }, "response": [] } @@ -599,6 +636,12 @@ "description": "If present, return the full text value of any text fields (ex: `description`). If not provided, field value is truncated to 100 words.\n\nParameter shall not have a value\n", "disabled": true }, + { + "key": "newest", + "value": "", + "description": "If present, returns only the most recent (newest) episode for each specified feed id.\n\nParameter shall not have a value\n", + "disabled": true + }, { "key": "pretty", "value": "", @@ -607,7 +650,7 @@ } ] }, - "description": "This call returns all the episodes we know about for this feed from the PodcastIndex ID.\nEpisodes are in reverse chronological order.\n\nWhen using the `enclosure` parameter, only the episode matching the URL is returned.\n\nExamples:\n\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&pretty\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&pretty\n - Includes `persons`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=169991&pretty\n - Includes `value`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=4058673&pretty\n - Using `enclosure`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504&enclosure=https://op3.dev/e/mp3s.nashownotes.com/NA-1551-2023-04-30-Final.mp3&pretty\n" + "description": "This call returns all the episodes we know about for this feed from the PodcastIndex ID.\nEpisodes are in reverse chronological order.\n\nWhen using the `enclosure` parameter, only the episode matching the URL is returned.\n\nExamples:\n\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&pretty\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&pretty\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&newest&pretty\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&newest&pretty\n - Includes `persons`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=169991&pretty\n - Includes `value`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=4058673&pretty\n - Using `enclosure`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504&enclosure=https://op3.dev/e/mp3s.nashownotes.com/NA-1551-2023-04-30-Final.mp3&pretty\n" }, "response": [] }, @@ -1188,7 +1231,7 @@ } ] }, - "description": "This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order.\n\nThis is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's\ninternal timestamp.\n\nSimilar data can also be accessed using object storage root url https://tracking.podcastindex.org/current\n\nExamples:\n\n - https://api.podcastindex.org/api/1.0/recent/data?pretty\n - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10\n - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10&since=1671164867\n" + "description": "This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order.\n\n\nThis is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's\ninternal timestamp.\n\n\nSimilar data can also be accessed using object storage root url https://tracking.podcastindex.org/current\nFor details, see [Current](#get-/static/tracking/current).\n\n\nExamples:\n\n - https://api.podcastindex.org/api/1.0/recent/data?pretty\n - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10\n - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10&since=1671164867" }, "response": [] }, @@ -1443,7 +1486,7 @@ } ] }, - "description": "Return the most recent index statistics.\n\nHourly statistics can also be access at https://stats.podcastindex.org/daily_counts.json\n\nExample: https://api.podcastindex.org/api/1.0/stats/current?pretty\n" + "description": "Return the most recent index statistics.\n\n\nHourly statistics can also be access at https://stats.podcastindex.org/hourly_counts.json\nFor details, see [Stats Hourly Counts](#get-/static/stats/hourly_counts.json).\n\n\nDaily statistics can also be access at https://stats.podcastindex.org/daily_counts.json.\nFor details, see [Stats Daily Counts](#get-/static/stats/daily_counts.json).\n\n\nExample: https://api.podcastindex.org/api/1.0/stats/current?pretty" }, "response": [] } @@ -1701,9 +1744,9 @@ "method": "GET", "header": [], "url": { - "raw": "{{baseAppleUrl}}/search?term=batman", + "raw": "https://api.podcastindex.org/search?term=batman", "host": [ - "{{baseAppleUrl}}" + "https://api.podcastindex.org" ], "path": [ "search" @@ -1735,9 +1778,9 @@ "method": "GET", "header": [], "url": { - "raw": "{{baseAppleUrl}}/lookup?id=1441923632&entity=podcast", + "raw": "https://api.podcastindex.org/lookup?id=1441923632&entity=podcast", "host": [ - "{{baseAppleUrl}}" + "https://api.podcastindex.org" ], "path": [ "lookup" @@ -1766,6 +1809,264 @@ "response": [] } ] + }, + { + "name": "Static Data", + "item": [ + { + "name": "Dead Feeds", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://public.podcastindex.org/podcastindex_dead_feeds.csv", + "host": [ + "https://public.podcastindex.org" + ], + "path": [ + "podcastindex_dead_feeds.csv" + ], + "query": [ + ] + }, + "description": "Lists all feed Ids that have been marked dead in the Podcast Index database. The list is updated every X hours.\n\n\nA subset of stats can be retrieved using the API endpoint [podcasts/dead](#get-/podcasts/dead).\n\n\nDownload from: https://public.podcastindex.org/podcastindex_dead_feeds.csv" + }, + "response": [] + }, + { + "name": "Feeds Database", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://public.podcastindex.org/podcastindex_feeds.db.tgz", + "host": [ + "https://public.podcastindex.org" + ], + "path": [ + "podcastindex_feeds.db.tgz" + ], + "query": [ + ] + }, + "description": "Compressed database of all non-dead feeds in the Podcast Index database.\n\n\nUpdated daily. Some attributes excluded. No episodes included.\n\n\nDownload from: https://public.podcastindex.org/podcastindex_feeds.db.tgz" + }, + "response": [] + }, + { + "name": "Stats Daily Counts", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://stats.podcastindex.org/daily_counts.json", + "host": [ + "https://stats.podcastindex.org" + ], + "path": [ + "daily_counts.json" + ], + "query": [ + ] + }, + "description": "Report a number of statistics about the feeds in Podcast Index's database. Updated daily.\n\n\nA subset of stats can be retrieved using the API endpoint [stats/current](#get-/stats/current).\n\n\nView at: https://stats.podcastindex.org/daily_counts.json" + }, + "response": [] + }, + { + "name": "Stats Hourly Counts", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://stats.podcastindex.org/hourly_counts.json", + "host": [ + "https://stats.podcastindex.org" + ], + "path": [ + "hourly_counts.json" + ], + "query": [ + ] + }, + "description": "Report a number of statistics about the feeds in Podcast Index's database. Updated hourly.\n\n\nA subset of stats can be retrieved using the API endpoint [stats/current](#get-/stats/current).\n\n\nView at: https://stats.podcastindex.org/hourly_counts.json" + }, + "response": [] + }, + { + "name": "v4v Music Chart JSON", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://stats.podcastindex.org/v4vmusic.json", + "host": [ + "https://stats.podcastindex.org" + ], + "path": [ + "v4vmusic.json" + ], + "query": [ + ] + }, + "description": "Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days.\n\nEach entry shows the number of listener boosts sent over this time period. The chart is updated hourly.\n\n\nCan be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html).\n\n\nView at: https://stats.podcastindex.org/v4vmusic.json\n\n\nAlso available in [OPML](#get-/static/stats/v4vmusic.opml) and [RSS](#get-/static/stats/v4vmusic.rss)." + }, + "response": [] + }, + { + "name": "v4v Music Chart OPML", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://stats.podcastindex.org/v4vmusic.opml", + "host": [ + "https://stats.podcastindex.org" + ], + "path": [ + "v4vmusic.opml" + ], + "query": [ + ] + }, + "description": "Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days.\n\nEach entry shows the number of listener boosts sent over this time period. The chart is updated hourly.\n\n\nCan be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html).\n\n\nView at: https://stats.podcastindex.org/v4vmusic.opml\n\n\nAlso available in [JSON](#get-/static/stats/v4vmusic.json) and [RSS](#get-/static/stats/v4vmusic.rss)." + }, + "response": [] + }, + { + "name": "v4v Music Chart RSS", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://stats.podcastindex.org/v4vmusic.rss", + "host": [ + "https://stats.podcastindex.org" + ], + "path": [ + "v4vmusic.rss" + ], + "query": [ + ] + }, + "description": "Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days.\n\nEach entry shows the number of listener boosts sent over this time period. The chart is updated hourly.\n\n\nCan be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html).\n\n\nView at: https://stats.podcastindex.org/v4vmusic.rss\n\n\nAlso available in [JSON](#get-/static/stats/v4vmusic.json) and [OPML](#get-/static/stats/v4vmusic.opml)." + }, + "response": [] + }, + { + "name": "v4v Sats", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://stats.podcastindex.org/chart-data.json", + "host": [ + "https://stats.podcastindex.org" + ], + "path": [ + "chart-data.json" + ], + "query": [ + ] + }, + "description": "Contains the raw data used to populate the graphs at https://stats.podcastindex.org/v4v.\n\nThis is a look at the total [sats](https://www.investopedia.com/terms/s/satoshi.asp) flowing through the Value4Value\nLightning podcasting economy over various periods of time.\n\nWe calculate this data based on our visibility as a one percent voluntary split on Podcastindex.org api\ncalls. Therefore, the true numbers could be higher, but they cannot be lower than listed here. This represents our\nbest approximation of how many sats are flowing across the entire ecosystem from listeners to creators, guests (via\nepisode splits), platforms, services and apps.\n\n\nView at: https://stats.podcastindex.org/chart-data.json" + }, + "response": [] + }, + { + "name": "Current", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://tracking.podcastindex.org/current", + "host": [ + "https://tracking.podcastindex.org" + ], + "path": [ + "current" + ], + "query": [ + ] + }, + "description": "This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order.\n\n\nThis is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's\ninternal timestamp.\n\n\nSimilar data can also be retrieved using the API endpoint [recent/data](#get-/recent/data).\n\n\nAccess at: https://tracking.podcastindex.org/current\n\n\nThe prior 24 hours of data (going backwards until all tracked data is received) can be accessed using the timestamp\nof the previous data set. This is found in the `previousTrackingUrl`.\nThe format of these prior data sets follows the format described below." + }, + "response": [] + }, + { + "name": "Episode Value Blocks", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://tracking.podcastindex.org/episodeValueBlocks.json", + "host": [ + "https://tracking.podcastindex.org" + ], + "path": [ + "episodeValueBlocks.json" + ], + "query": [ + ] + }, + "description": "Get all episodes with value blocks.\n\n\nAccess at: https://tracking.podcastindex.org/episodeValueBlocks.json" + }, + "response": [] + }, + { + "name": "Feed Value Blocks", + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "url": { + "raw": "https://tracking.podcastindex.org/feedValueBlocks.json", + "host": [ + "https://tracking.podcastindex.org" + ], + "path": [ + "feedValueBlocks.json" + ], + "query": [ + ] + }, + "description": "Get all feeds with value blocks.\n\n\nAccess at: https://tracking.podcastindex.org/feedValueBlocks.json" + }, + "response": [] + } + ] } ], "event": [ @@ -1803,10 +2104,6 @@ { "key": "baseUrl", "value": "https://api.podcastindex.org/api/1.0" - }, - { - "key": "baseAppleUrl", - "value": "https://api.podcastindex.org/" } ] } diff --git a/api_src/components/parameters/newest.yaml b/api_src/components/parameters/newest.yaml new file mode 100644 index 0000000..02b7479 --- /dev/null +++ b/api_src/components/parameters/newest.yaml @@ -0,0 +1,11 @@ +name: newest +in: query +# language=Markdown +description: | + If present, returns only the most recent (newest) episode for each specified feed id. + + + Parameter shall not have a value +schema: + type: boolean +allowEmptyValue: true diff --git a/api_src/components/properties/createdOn.yaml b/api_src/components/properties/createdOn.yaml new file mode 100644 index 0000000..d9da285 --- /dev/null +++ b/api_src/components/properties/createdOn.yaml @@ -0,0 +1,6 @@ + # language=Markdown +description: | + The first time the feed was seen by Podcast Index +type: integer +format: Unix Epoch +example: 1613394034 diff --git a/api_src/components/properties/data_static.yaml b/api_src/components/properties/data_static.yaml new file mode 100644 index 0000000..f4a8547 --- /dev/null +++ b/api_src/components/properties/data_static.yaml @@ -0,0 +1,18 @@ + # language=Markdown +description: | + Object containing the recent data +type: object +properties: + nextSince: + # language=Markdown + description: | + Value of `since` in next block of data + type: integer + format: Unix Epoch + example: 1613805249 + position: + $ref: '../properties/position.yaml' + feeds: + $ref: '../properties/feeds_data.yaml' + items: + $ref: '../properties/items_data.yaml' diff --git a/api_src/components/properties/episodeCountTotal.yaml b/api_src/components/properties/episodeCountTotal.yaml new file mode 100644 index 0000000..a9c3487 --- /dev/null +++ b/api_src/components/properties/episodeCountTotal.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Total individual podcast episodes in the index. +type: integer +example: 143953477 diff --git a/api_src/components/properties/episodesWithChapters.yaml b/api_src/components/properties/episodesWithChapters.yaml new file mode 100644 index 0000000..4cfd1d0 --- /dev/null +++ b/api_src/components/properties/episodesWithChapters.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Number of episodes with [`podcast:chapters`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#chapters) +type: integer +example: 652781 diff --git a/api_src/components/properties/episodesWithTranscripts.yaml b/api_src/components/properties/episodesWithTranscripts.yaml new file mode 100644 index 0000000..836301c --- /dev/null +++ b/api_src/components/properties/episodesWithTranscripts.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Episodes with a + [`podcast:transcript`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#transcript) + tag. +type: integer +example: 3198597 diff --git a/api_src/components/properties/feedCountTotal.yaml b/api_src/components/properties/feedCountTotal.yaml new file mode 100644 index 0000000..bd1f953 --- /dev/null +++ b/api_src/components/properties/feedCountTotal.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Total podcast feeds in the index. +type: integer +example: 4257865 diff --git a/api_src/components/properties/feed_podcast_batch.yaml b/api_src/components/properties/feed_podcast_batch.yaml new file mode 100644 index 0000000..761bde4 --- /dev/null +++ b/api_src/components/properties/feed_podcast_batch.yaml @@ -0,0 +1,75 @@ + # language=Markdown +description: | + Known details of podcast feed +type: object +properties: + id: + $ref: '../properties/id_feed.yaml' + title: + $ref: '../properties/title_feed.yaml' + url: + $ref: '../properties/url_feed.yaml' + originalUrl: + $ref: '../properties/originalUrl.yaml' + link: + $ref: '../properties/link_feed.yaml' + description: + $ref: '../properties/description_feed.yaml' + author: + $ref: '../properties/author.yaml' + ownerName: + $ref: '../properties/ownerName.yaml' + image: + $ref: '../properties/image_feed.yaml' + artwork: + $ref: '../properties/artwork.yaml' + lastUpdateTime: + $ref: '../properties/lastUpdateTime.yaml' + lastCrawlTime: + $ref: '../properties/lastCrawlTime.yaml' + lastParseTime: + $ref: '../properties/lastParseTime.yaml' + inPollingQueue: + $ref: '../properties/inPollingQueue.yaml' + priority: + $ref: '../properties/priority.yaml' + lastGoodHttpStatusTime: + $ref: '../properties/lastGoodHttpStatusTime.yaml' + lastHttpStatus: + $ref: '../properties/lastHttpStatus.yaml' + contentType: + $ref: '../properties/contentType.yaml' + itunesId: + $ref: '../properties/itunesId_feed.yaml' + generator: + $ref: '../properties/generator.yaml' + createdOn: + $ref: '../properties/createdOn.yaml' + language: + $ref: '../properties/language.yaml' + type: + $ref: '../properties/type.yaml' + dead: + $ref: '../properties/dead.yaml' + crawlErrors: + $ref: '../properties/crawlErrors.yaml' + parseErrors: + $ref: '../properties/parseErrors.yaml' + categories: + $ref: '../properties/categories.yaml' + locked: + $ref: '../properties/locked.yaml' + explicit: + $ref: '../properties/explicit_feed.yaml' + podcastGuid: + $ref: '../properties/podcastguid.yaml' + medium: + $ref: '../properties/medium_feed.yaml' + episodeCount: + $ref: '../properties/episodeCount.yaml' + imageUrlHash: + $ref: '../properties/imageUrlHash.yaml' + newestItemPubdate: + $ref: '../properties/newestItemPublishTime.yaml' + valueBlock: + $ref: '../properties/valueBlock.yaml' diff --git a/api_src/components/properties/feedsWithChapters.yaml b/api_src/components/properties/feedsWithChapters.yaml new file mode 100644 index 0000000..daf4c96 --- /dev/null +++ b/api_src/components/properties/feedsWithChapters.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a + [`podcast:chapters`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#chapters) + tag in at least 1 episode. +type: integer +example: 35582 diff --git a/api_src/components/properties/feedsWithFundingTag.yaml b/api_src/components/properties/feedsWithFundingTag.yaml new file mode 100644 index 0000000..b422e49 --- /dev/null +++ b/api_src/components/properties/feedsWithFundingTag.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a + [`podcast:funding`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#funding) + tag in at least 1 episode. +type: integer +example: 57582 diff --git a/api_src/components/properties/feedsWithMediumMusic.yaml b/api_src/components/properties/feedsWithMediumMusic.yaml new file mode 100644 index 0000000..d393b71 --- /dev/null +++ b/api_src/components/properties/feedsWithMediumMusic.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a + [`podcast:medium`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#medium) + tag with a value of `music`. +type: integer +example: 3700 diff --git a/api_src/components/properties/feedsWithMediumVideo.yaml b/api_src/components/properties/feedsWithMediumVideo.yaml new file mode 100644 index 0000000..8edbef7 --- /dev/null +++ b/api_src/components/properties/feedsWithMediumVideo.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a + [`podcast:medium`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#medium) + tag with a value of `video`. +type: integer +example: 1288 diff --git a/api_src/components/properties/feedsWithNewEpisodes10days.yaml b/api_src/components/properties/feedsWithNewEpisodes10days.yaml new file mode 100644 index 0000000..2a3d025 --- /dev/null +++ b/api_src/components/properties/feedsWithNewEpisodes10days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode released in the last 10 days. +type: integer +example: 212322 diff --git a/api_src/components/properties/feedsWithNewEpisodes14days.yaml b/api_src/components/properties/feedsWithNewEpisodes14days.yaml new file mode 100644 index 0000000..c6ff5fc --- /dev/null +++ b/api_src/components/properties/feedsWithNewEpisodes14days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode released in the last 14 days. +type: integer +example: 239664 diff --git a/api_src/components/properties/feedsWithNewEpisodes30days.yaml b/api_src/components/properties/feedsWithNewEpisodes30days.yaml new file mode 100644 index 0000000..a2b210f --- /dev/null +++ b/api_src/components/properties/feedsWithNewEpisodes30days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode released in the last 30 days. +type: integer +example: 306748 diff --git a/api_src/components/properties/feedsWithNewEpisodes3days.yaml b/api_src/components/properties/feedsWithNewEpisodes3days.yaml new file mode 100644 index 0000000..7fe5075 --- /dev/null +++ b/api_src/components/properties/feedsWithNewEpisodes3days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode released in the last 3 days. +type: integer +example: 97522 diff --git a/api_src/components/properties/feedsWithNewEpisodes60days.yaml b/api_src/components/properties/feedsWithNewEpisodes60days.yaml new file mode 100644 index 0000000..d6b24b8 --- /dev/null +++ b/api_src/components/properties/feedsWithNewEpisodes60days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode released in the last 60 days. +type: integer +example: 382945 diff --git a/api_src/components/properties/feedsWithNewEpisodes7days.yaml b/api_src/components/properties/feedsWithNewEpisodes7days.yaml new file mode 100644 index 0000000..d3e877b --- /dev/null +++ b/api_src/components/properties/feedsWithNewEpisodes7days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode released in the last 7 days. +type: integer +example: 179043 diff --git a/api_src/components/properties/feedsWithNewEpisodes90days.yaml b/api_src/components/properties/feedsWithNewEpisodes90days.yaml new file mode 100644 index 0000000..2145e98 --- /dev/null +++ b/api_src/components/properties/feedsWithNewEpisodes90days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode released in the last 90 days. +type: integer +example: 436933 diff --git a/api_src/components/properties/feedsWithTranscripts.yaml b/api_src/components/properties/feedsWithTranscripts.yaml new file mode 100644 index 0000000..71768e9 --- /dev/null +++ b/api_src/components/properties/feedsWithTranscripts.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a + [`podcast:transcript`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#transcript) + tag in at least 1 episode. +type: integer +example: 61385 diff --git a/api_src/components/properties/feedsWithValueBlocks.yaml b/api_src/components/properties/feedsWithValueBlocks.yaml new file mode 100644 index 0000000..9ba3147 --- /dev/null +++ b/api_src/components/properties/feedsWithValueBlocks.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + tag in at least 1 episode. +type: integer +example: 21916 diff --git a/api_src/components/properties/feeds_batch.yaml b/api_src/components/properties/feeds_batch.yaml new file mode 100644 index 0000000..f7f34ff --- /dev/null +++ b/api_src/components/properties/feeds_batch.yaml @@ -0,0 +1,6 @@ + # language=Markdown +description: | + List of feeds with matching GUID +type: array +items: + $ref: 'feed_podcast_batch.yaml' diff --git a/api_src/components/properties/imageUrlHash.yaml b/api_src/components/properties/imageUrlHash.yaml index 200ce33..2423173 100644 --- a/api_src/components/properties/imageUrlHash.yaml +++ b/api_src/components/properties/imageUrlHash.yaml @@ -1,5 +1,5 @@ # language=Markdown description: | - A CRC32 hash of the `image` URL with the protocol (`http://`, `https://`) removed. + A CRC32 hash of the `image` URL with the protocol (`http://`, `https://`) removed. 64bit integer. type: integer -example: 1639321931 +example: 3969216649 diff --git a/api_src/components/properties/inPollingQueue.yaml b/api_src/components/properties/inPollingQueue.yaml new file mode 100644 index 0000000..ab2dac3 --- /dev/null +++ b/api_src/components/properties/inPollingQueue.yaml @@ -0,0 +1,6 @@ + # language=Markdown +description: | + Indicates if feed is currently scheduled to be polled/checked for new episodes. +type: integer +nullable: true +example: 1 diff --git a/api_src/components/properties/newEpisodes10days.yaml b/api_src/components/properties/newEpisodes10days.yaml new file mode 100644 index 0000000..d1d1311 --- /dev/null +++ b/api_src/components/properties/newEpisodes10days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a released in the last 10 days. +type: integer +example: 684833 diff --git a/api_src/components/properties/newEpisodes14days.yaml b/api_src/components/properties/newEpisodes14days.yaml new file mode 100644 index 0000000..37bb8dd --- /dev/null +++ b/api_src/components/properties/newEpisodes14days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a released in the last 14 days. +type: integer +example: 907203 diff --git a/api_src/components/properties/newEpisodes30days.yaml b/api_src/components/properties/newEpisodes30days.yaml new file mode 100644 index 0000000..6d79911 --- /dev/null +++ b/api_src/components/properties/newEpisodes30days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a released in the last 30 days. +type: integer +example: 1901547 diff --git a/api_src/components/properties/newEpisodes3days.yaml b/api_src/components/properties/newEpisodes3days.yaml new file mode 100644 index 0000000..bd350a6 --- /dev/null +++ b/api_src/components/properties/newEpisodes3days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a released in the last 3 days. +type: integer +example: 212324 diff --git a/api_src/components/properties/newEpisodes60days.yaml b/api_src/components/properties/newEpisodes60days.yaml new file mode 100644 index 0000000..859ba73 --- /dev/null +++ b/api_src/components/properties/newEpisodes60days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a released in the last 60 days. +type: integer +example: 3710750 diff --git a/api_src/components/properties/newEpisodes7days.yaml b/api_src/components/properties/newEpisodes7days.yaml new file mode 100644 index 0000000..e07875a --- /dev/null +++ b/api_src/components/properties/newEpisodes7days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a released in the last 7 days. +type: integer +example: 442061 diff --git a/api_src/components/properties/newEpisodes90days.yaml b/api_src/components/properties/newEpisodes90days.yaml new file mode 100644 index 0000000..4dbf144 --- /dev/null +++ b/api_src/components/properties/newEpisodes90days.yaml @@ -0,0 +1,5 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a released in the last 90 days. +type: integer +example: 5498580 diff --git a/api_src/components/properties/paidFeedsWithNewEpisodes10days.yaml b/api_src/components/properties/paidFeedsWithNewEpisodes10days.yaml new file mode 100644 index 0000000..9c2f5ec --- /dev/null +++ b/api_src/components/properties/paidFeedsWithNewEpisodes10days.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 10 days. +type: integer +example: 165789 diff --git a/api_src/components/properties/paidFeedsWithNewEpisodes14days.yaml b/api_src/components/properties/paidFeedsWithNewEpisodes14days.yaml new file mode 100644 index 0000000..bba0a7d --- /dev/null +++ b/api_src/components/properties/paidFeedsWithNewEpisodes14days.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 14 days. +type: integer +example: 186602 diff --git a/api_src/components/properties/paidFeedsWithNewEpisodes30days.yaml b/api_src/components/properties/paidFeedsWithNewEpisodes30days.yaml new file mode 100644 index 0000000..86186d8 --- /dev/null +++ b/api_src/components/properties/paidFeedsWithNewEpisodes30days.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 30 days. +type: integer +example: 237389 diff --git a/api_src/components/properties/paidFeedsWithNewEpisodes3days.yaml b/api_src/components/properties/paidFeedsWithNewEpisodes3days.yaml new file mode 100644 index 0000000..824f9f8 --- /dev/null +++ b/api_src/components/properties/paidFeedsWithNewEpisodes3days.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 3 days. +type: integer +example: 77638 diff --git a/api_src/components/properties/paidFeedsWithNewEpisodes60days.yaml b/api_src/components/properties/paidFeedsWithNewEpisodes60days.yaml new file mode 100644 index 0000000..ca93291 --- /dev/null +++ b/api_src/components/properties/paidFeedsWithNewEpisodes60days.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 60 days. +type: integer +example: 77632 diff --git a/api_src/components/properties/paidFeedsWithNewEpisodes7days.yaml b/api_src/components/properties/paidFeedsWithNewEpisodes7days.yaml new file mode 100644 index 0000000..0b48728 --- /dev/null +++ b/api_src/components/properties/paidFeedsWithNewEpisodes7days.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 7 days. +type: integer +example: 140275 diff --git a/api_src/components/properties/paidFeedsWithNewEpisodes90days.yaml b/api_src/components/properties/paidFeedsWithNewEpisodes90days.yaml new file mode 100644 index 0000000..ebf4f18 --- /dev/null +++ b/api_src/components/properties/paidFeedsWithNewEpisodes90days.yaml @@ -0,0 +1,7 @@ + # language=Markdown +description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 90 days. +type: integer +example: 335380 diff --git a/api_src/components/properties/priority.yaml b/api_src/components/properties/priority.yaml new file mode 100644 index 0000000..a55d2d5 --- /dev/null +++ b/api_src/components/properties/priority.yaml @@ -0,0 +1,15 @@ + # language=Markdown +description: | + How often the feed is checked for updates and new episodes + + A value of -1 means never check. A value of 5 means check the most. +type: integer +enum: + - -1 + - 0 + - 1 + - 2 + - 3 + - 4 + - 5 +example: 5 diff --git a/api_src/components/properties/stats.yaml b/api_src/components/properties/stats.yaml index 57c3f57..5e593c0 100644 --- a/api_src/components/properties/stats.yaml +++ b/api_src/components/properties/stats.yaml @@ -4,37 +4,16 @@ description: | type: object properties: feedCountTotal: - # language=Markdown - description: Total podcast feeds in the index. - type: integer - example: 4048514 + $ref: "feedCountTotal.yaml" episodeCountTotal: - # language=Markdown - description: Total individual podcast episodes in the index. - type: integer - example: 112890355 + $ref: "episodeCountTotal.yaml" feedsWithNewEpisodes3days: - # language=Markdown - description: Podcast feeds with a new episode released in the last 3 days. - type: integer - example: 87369 + $ref: "feedsWithNewEpisodes3days.yaml" feedsWithNewEpisodes10days: - # language=Markdown - description: Podcast feeds with a new episode released in the last 10 days. - type: integer - example: 242922 + $ref: "feedsWithNewEpisodes10days.yaml" feedsWithNewEpisodes30days: - # language=Markdown - description: Podcast feeds with a new episode released in the last 30 days. - type: integer - example: 352744 + $ref: "feedsWithNewEpisodes30days.yaml" feedsWithNewEpisodes90days: - # language=Markdown - description: Podcast feeds with a new episode released in the last 90 days. - type: integer - example: 478568 + $ref: "feedsWithNewEpisodes90days.yaml" feedsWithValueBlocks: - # language=Markdown - description: Podcast feeds with a value block - type: integer - example: 9772 + $ref: "feedsWithValueBlocks.yaml" diff --git a/api_src/components/properties/valueBlock.yaml b/api_src/components/properties/valueBlock.yaml new file mode 100644 index 0000000..fc7b61d --- /dev/null +++ b/api_src/components/properties/valueBlock.yaml @@ -0,0 +1,13 @@ + # language=Markdown +description: | + Information for supporting the podcast via one of the "Value for Value" methods. May not be reported. + + + Value is a string of JSON data representing the feed value block data. + + + Examples: + - `lightning` value type: https://api.podcastindex.org/api/1.0/podcasts/byfeedid?id=169991&pretty + - `webmonetization` value type: https://api.podcastindex.org/api/1.0/podcasts/byfeedid?id=779873&pretty +type: string +# TODO: waiting for clarification on format https://podcastindex.social/@steven/113014028344047257 diff --git a/api_src/components/responses/400_static.yaml b/api_src/components/responses/400_static.yaml new file mode 100644 index 0000000..ca9ad99 --- /dev/null +++ b/api_src/components/responses/400_static.yaml @@ -0,0 +1,18 @@ +description: Invalid request +content: + application/xml: + schema: + type: object + properties: + Error: + type: object + properties: + Code: + type: string + RequestId: + type: string + HostId: + type: string + example: + status: "false" + description: "Invalid parameters" diff --git a/api_src/components/responses/404.yaml b/api_src/components/responses/404.yaml new file mode 100644 index 0000000..9f81352 --- /dev/null +++ b/api_src/components/responses/404.yaml @@ -0,0 +1 @@ +description: Not found diff --git a/api_src/components/responses/podcasts_batch_byguid.yaml b/api_src/components/responses/podcasts_batch_byguid.yaml new file mode 100644 index 0000000..eadcb66 --- /dev/null +++ b/api_src/components/responses/podcasts_batch_byguid.yaml @@ -0,0 +1,16 @@ +description: Success +content: + application/json: + schema: + type: object + properties: + status: + $ref: '../properties/status.yaml' + allFound: + $ref: '../properties/allfound.yaml' + found: + $ref: '../properties/found.yaml' + feeds: + $ref: '../properties/feeds_batch.yaml' + description: + $ref: '../properties/description_response.yaml' diff --git a/api_src/components/responses/static_current.yaml b/api_src/components/responses/static_current.yaml new file mode 100644 index 0000000..f00aec9 --- /dev/null +++ b/api_src/components/responses/static_current.yaml @@ -0,0 +1,24 @@ + # language=markdown +description: | + The feed and episode data seen by the Podcast Index. +content: + application/json: + schema: + type: object + properties: + status: + $ref: '../properties/status.yaml' + feedCount: + $ref: '../properties/feedCount.yaml' + itemCount: + $ref: '../properties/itemCount.yaml' + max: + $ref: '../properties/max.yaml' + since: + $ref: '../properties/since.yaml' + previousTrackingUrl: + description: URL to previous set of data + type: string + example: "https://tracking.podcastindex.org/1724468201" + data: + $ref: '../properties/data_static.yaml' diff --git a/api_src/components/responses/static_dead_feeds.yaml b/api_src/components/responses/static_dead_feeds.yaml new file mode 100644 index 0000000..e5b795e --- /dev/null +++ b/api_src/components/responses/static_dead_feeds.yaml @@ -0,0 +1,22 @@ + # language=markdown +description: | + Feed Ids in CSV file format. + + + Each row is the feed id. No Header. + + + Example: + + + ```csv + 3, + 38, + 43, + 45, + 56, + ``` +content: + application/csv: + schema: + type: object diff --git a/api_src/components/responses/static_feeds_db.yaml b/api_src/components/responses/static_feeds_db.yaml new file mode 100644 index 0000000..3687af9 --- /dev/null +++ b/api_src/components/responses/static_feeds_db.yaml @@ -0,0 +1,7 @@ + # language=markdown +description: | + Podcast Index Feeds Database +content: + application/gzip: + schema: + type: object diff --git a/api_src/components/responses/static_music_json.yaml b/api_src/components/responses/static_music_json.yaml new file mode 100644 index 0000000..64a9fd8 --- /dev/null +++ b/api_src/components/responses/static_music_json.yaml @@ -0,0 +1,45 @@ +description: The hourly Top X music +content: + application/json: + schema: + type: object + properties: + title: + description: Title of music + type: string + example: "Podcasting 2.0 Top 100 (Music)" + description: + description: Description of object + type: string + example: "An hourly Top 100 music playlist." + timestamp: + description: Date updated + type: integer + example: 1724465107 + items: + description: Array of top X music feeds + type: object + properties: + rank: + description: Rank in chart + type: integer + example: 1 + boosts: + description: Number of boosts + type: string + example: "42" + title: + description: Title of Track + type: string + example: "To be in Nashville" + image: + $ref: "../properties/image_episode.yaml" + feedId: + $ref: "../properties/id_feed.yaml" + feedUrl: + $ref: "../properties/url_feed.yaml" + feedGuid: + $ref: "../properties/podcastguid.yaml" + itemGuid: + $ref: "../properties/guid.yaml" + diff --git a/api_src/components/responses/static_music_opml.yaml b/api_src/components/responses/static_music_opml.yaml new file mode 100644 index 0000000..9b90d39 --- /dev/null +++ b/api_src/components/responses/static_music_opml.yaml @@ -0,0 +1,34 @@ + # language=markdown +description: | + The hourly Top X music + + + Data follows the [OPML spec](https://opml.org/spec2.opml) with additions of + [Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md) attributes. + + + Example `outline` entry: + + ```xml + + ``` + + Attributes: + + - `text` + - Title of Track + - Example: `"To be in Nashville"` + - `xmlUrl` + - Feed URL track is in + - Example: `"https://files.heycitizen.xyz/Songs/Albums/The-Heycitizen-Experience/the heycitizen experience.xml"` + - `podcast:feedGuid` + - The GUID from the `podcast:guid` tag in the feed. This value is a unique, global identifier for the podcast. + - See the namespace spec for [guid](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid) for details. + - Example: `"a2d2e313-9cbd-5169-b89c-ab07b33ecc33"` + - `podcast:itemGuid` + - The unique identifier for the episode + - Example: `"ac34129c-c78a-463e-a64f-01405e1f2be4"` +content: + application/xml: + schema: + type: object diff --git a/api_src/components/responses/static_music_rss.yaml b/api_src/components/responses/static_music_rss.yaml new file mode 100644 index 0000000..2ffa895 --- /dev/null +++ b/api_src/components/responses/static_music_rss.yaml @@ -0,0 +1,15 @@ + # language=markdown +description: | + The hourly Top X music + + + Data follows the RSS XML spec with additions of + [Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md) attributes. + + + The [`podcast:remoteItem`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#remote-item) + is used to reference the episodes in the music chart. +content: + "application/rss+xml": + schema: + type: object diff --git a/api_src/components/responses/static_sats_data.yaml b/api_src/components/responses/static_sats_data.yaml new file mode 100644 index 0000000..c9280b6 --- /dev/null +++ b/api_src/components/responses/static_sats_data.yaml @@ -0,0 +1,70 @@ +description: Object containing the number of sats, transactions, and senders. +content: + application/json: + schema: + type: object + properties: + sats: + description: Array of sats seen in transactions on the specified date (x) + type: array + items: + type: object + properties: + x: + description: Date in YYYY-M-D format. + type: string + example: "2024-5-24" + y: + description: Number of sats transacted + type: integer + example: 629594 + senders: + description: Array of senders (supporters) seen in transactions on the specified date (x) + type: array + items: + type: object + properties: + x: + description: Date in YYYY-M-D format. + type: string + example: "2024-5-24" + y: + description: Number of senders + type: integer + example: 238 + txs: + description: Array of transactions on the specified date (x) + type: array + items: + type: object + properties: + x: + description: Date in YYYY-M-D format. + type: string + example: "2024-5-24" + y: + description: Number of transactions + type: integer + example: 8212 + colors: + description: Colors used in graphs + type: object + properties: + txcolor: + type: string + example: "#ff3333" + color14: + type: string + example: "#9370db" + color30: + type: string + example: "#58d68d" + color60: + type: string + example: "#0088cc" + color7: + type: string + example: "#fffa90" + color90: + type: string + example: "#ff8800" diff --git a/api_src/components/responses/static_stats_counts.yaml b/api_src/components/responses/static_stats_counts.yaml new file mode 100644 index 0000000..bff2ac9 --- /dev/null +++ b/api_src/components/responses/static_stats_counts.yaml @@ -0,0 +1,68 @@ +description: Object containing the statistics for the Podcast Index feed data +content: + application/json: + schema: + type: object + properties: + feedCountTotal: + $ref: "../properties/feedCountTotal.yaml" + episodeCountTotal: + $ref: "../properties/episodeCountTotal.yaml" + feedsWithNewEpisodes3days: + $ref: "../properties/feedsWithNewEpisodes3days.yaml" + feedsWithNewEpisodes7days: + $ref: "../properties/feedsWithNewEpisodes7days.yaml" + feedsWithNewEpisodes10days: + $ref: "../properties/feedsWithNewEpisodes10days.yaml" + feedsWithNewEpisodes14days: + $ref: "../properties/feedsWithNewEpisodes14days.yaml" + feedsWithNewEpisodes30days: + $ref: "../properties/feedsWithNewEpisodes30days.yaml" + feedsWithNewEpisodes60days: + $ref: "../properties/feedsWithNewEpisodes60days.yaml" + feedsWithNewEpisodes90days: + $ref: "../properties/feedsWithNewEpisodes90days.yaml" + paidFeedsWithNewEpisodes3days: + $ref: "../properties/paidFeedsWithNewEpisodes3days.yaml" + paidFeedsWithNewEpisodes7days: + $ref: "../properties/paidFeedsWithNewEpisodes7days.yaml" + paidFeedsWithNewEpisodes10days: + $ref: "../properties/paidFeedsWithNewEpisodes10days.yaml" + paidFeedsWithNewEpisodes14days: + $ref: "../properties/paidFeedsWithNewEpisodes14days.yaml" + paidFeedsWithNewEpisodes30days: + $ref: "../properties/paidFeedsWithNewEpisodes30days.yaml" + paidFeedsWithNewEpisodes60days: + $ref: "../properties/paidFeedsWithNewEpisodes60days.yaml" + paidFeedsWithNewEpisodes90days: + $ref: "../properties/paidFeedsWithNewEpisodes90days.yaml" + newEpisodes3days: + $ref: "../properties/newEpisodes3days.yaml" + newEpisodes7days: + $ref: "../properties/newEpisodes7days.yaml" + newEpisodes10days: + $ref: "../properties/newEpisodes10days.yaml" + newEpisodes14days: + $ref: "../properties/newEpisodes14days.yaml" + newEpisodes30days: + $ref: "../properties/newEpisodes30days.yaml" + newEpisodes60days: + $ref: "../properties/newEpisodes60days.yaml" + newEpisodes90days: + $ref: "../properties/newEpisodes90days.yaml" + feedsWithValueBlocks: + $ref: "../properties/feedsWithValueBlocks.yaml" + feedsWithFundingTag: + $ref: "../properties/feedsWithFundingTag.yaml" + feedsWithTranscripts: + $ref: "../properties/feedsWithTranscripts.yaml" + episodesWithTranscripts: + $ref: "../properties/episodesWithTranscripts.yaml" + feedsWithChapters: + $ref: "../properties/feedsWithChapters.yaml" + episodesWithChapters: + $ref: "../properties/episodesWithChapters.yaml" + feedsWithMediumMusic: + $ref: "../properties/feedsWithMediumMusic.yaml" + feedsWithMediumVideo: + $ref: "../properties/feedsWithMediumVideo.yaml" diff --git a/api_src/components/responses/static_tracking_episode_value_blocks.yaml b/api_src/components/responses/static_tracking_episode_value_blocks.yaml new file mode 100644 index 0000000..392ac0b --- /dev/null +++ b/api_src/components/responses/static_tracking_episode_value_blocks.yaml @@ -0,0 +1,24 @@ +description: Array of episodes containing value blocks +content: + application/json: + schema: + type: array + items: + type: object + properties: + episodeGuid: + $ref: "../properties/guid.yaml" + episodeId: + $ref: "../properties/id_episode.yaml" + feedId: + $ref: "../properties/id_feed.yaml" + feedUrl: + $ref: "../properties/url_feed.yaml" + itunesId: + $ref: "../properties/itunesId_feed.yaml" + podcastGuid: + $ref: "../properties/podcastguid.yaml" + value: + $ref: "../properties/value.yaml" + valueCreatedOn: + $ref: "../properties/valueCreatedOn.yaml" diff --git a/api_src/components/responses/static_tracking_feed_value_blocks.yaml b/api_src/components/responses/static_tracking_feed_value_blocks.yaml new file mode 100644 index 0000000..7c9cb32 --- /dev/null +++ b/api_src/components/responses/static_tracking_feed_value_blocks.yaml @@ -0,0 +1,20 @@ +description: Array of episodes containing value blocks +content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + $ref: "../properties/id_feed.yaml" + itunesId: + $ref: "../properties/itunesId_feed.yaml" + podcastGuid: + $ref: "../properties/podcastguid.yaml" + url: + $ref: "../properties/url_feed.yaml" + value: + $ref: "../properties/value.yaml" + valueCreatedOn: + $ref: "../properties/valueCreatedOn.yaml" diff --git a/api_src/components/schemas/podcasts_batch_byguid.yaml b/api_src/components/schemas/podcasts_batch_byguid.yaml new file mode 100644 index 0000000..28ec22d --- /dev/null +++ b/api_src/components/schemas/podcasts_batch_byguid.yaml @@ -0,0 +1,9 @@ + # language=Markdown +description: | + JSON array of feed GUIDs +type: array +items: + type: string +example: + - 917393e3-1b1e-5cef-ace4-edaa54e1f810 + - c73b1a23-1c28-5edb-94c3-10d1745d0877 diff --git a/api_src/components/schemas/transcript.yaml b/api_src/components/schemas/transcript.yaml index faab4a8..cb7c360 100644 --- a/api_src/components/schemas/transcript.yaml +++ b/api_src/components/schemas/transcript.yaml @@ -2,7 +2,7 @@ description: | This tag is used to link to a transcript or closed captions file. Multiple tags can be present for multiple transcript formats. - Detailed file format information and example files are [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/transcripts/transcripts.md). + Detailed file format information and example files are [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/tags/transcript.md). type: object properties: url: diff --git a/api_src/paths/add/batch/byfeedurl.yaml b/api_src/paths/add/batch/byfeedurl.yaml index cd4d4a4..da9666d 100644 --- a/api_src/paths/add/batch/byfeedurl.yaml +++ b/api_src/paths/add/batch/byfeedurl.yaml @@ -21,7 +21,7 @@ post: Example: https://api.podcastindex.org/api/1.0/add/batch/byfeedurl?pretty operationId: add/batch/byfeedurl security: - - $ref: '../../components/security/security.yaml' + - $ref: '../../../components/security/security.yaml' parameters: - $ref: '../../../components/parameters/pretty.yaml' requestBody: diff --git a/api_src/paths/episodes/byfeedid.yaml b/api_src/paths/episodes/byfeedid.yaml index 1b1cd43..faf46dd 100644 --- a/api_src/paths/episodes/byfeedid.yaml +++ b/api_src/paths/episodes/byfeedid.yaml @@ -15,6 +15,8 @@ get: - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&pretty - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&pretty + - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&newest&pretty + - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&newest&pretty - Includes `persons`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=169991&pretty - Includes `value`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=4058673&pretty - Using `enclosure`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504&enclosure=https://op3.dev/e/mp3s.nashownotes.com/NA-1551-2023-04-30-Final.mp3&pretty @@ -27,6 +29,7 @@ get: - $ref: '../../components/parameters/max.yaml' - $ref: '../../components/parameters/enclosure.yaml' - $ref: '../../components/parameters/fulltext.yaml' + - $ref: '../../components/parameters/newest.yaml' - $ref: '../../components/parameters/pretty.yaml' responses: '200': diff --git a/api_src/paths/podcasts/batch/byguid.yaml b/api_src/paths/podcasts/batch/byguid.yaml new file mode 100644 index 0000000..530fa12 --- /dev/null +++ b/api_src/paths/podcasts/batch/byguid.yaml @@ -0,0 +1,30 @@ +post: + tags: + - Podcasts + summary: Batch By Feed GUID + # language=Markdown + description: | + This call returns everything we know about the feed from the feed's GUID provided in JSON array in the body of the request. + + + The GUID is a unique, global identifier for the podcast. See the namespace spec for + [guid](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid) for details. + operationId: podcasts/batch/byguid + security: + - $ref: '../../../components/security/security.yaml' + parameters: + - $ref: '../../../components/parameters/pretty.yaml' + requestBody: + description: Get episode value data + required: true + content: + application/json: + schema: + $ref: '../../../components/schemas/podcasts_batch_byguid.yaml' + responses: + '200': + $ref: '../../../components/responses/podcasts_batch_byguid.yaml' + '400': + $ref: '../../../components/responses/400.yaml' + '401': + $ref: '../../../components/responses/401.yaml' diff --git a/api_src/paths/podcasts/dead.yaml b/api_src/paths/podcasts/dead.yaml index 883db70..6929596 100644 --- a/api_src/paths/podcasts/dead.yaml +++ b/api_src/paths/podcasts/dead.yaml @@ -5,9 +5,10 @@ get: # language=Markdown description: | This call returns all feeds that have been marked dead (`dead` == 1) - - - Dead feeds can also be accessed from object storage at https://public.podcastindex.org/podcastindex_dead_feeds.csv + + + Hourly statistics can also be access at https://public.podcastindex.org/podcastindex_dead_feeds.csv + For details, see [Dead Feeds](#get-/static/public/podcastindex_dead_feeds.csv). Example: https://api.podcastindex.org/api/1.0/podcasts/dead?pretty diff --git a/api_src/paths/recent/data.yaml b/api_src/paths/recent/data.yaml index 17471d3..389c4c4 100644 --- a/api_src/paths/recent/data.yaml +++ b/api_src/paths/recent/data.yaml @@ -5,17 +5,18 @@ get: # language=Markdown description: | This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order. - - + + This is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's internal timestamp. - - + + Similar data can also be accessed using object storage root url https://tracking.podcastindex.org/current - - + For details, see [Current](#get-/static/tracking/current). + + Examples: - + - https://api.podcastindex.org/api/1.0/recent/data?pretty - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10 - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10&since=1671164867 diff --git a/api_src/paths/static/public/podcastindex_dead_feeds.yaml b/api_src/paths/static/public/podcastindex_dead_feeds.yaml new file mode 100644 index 0000000..2449941 --- /dev/null +++ b/api_src/paths/static/public/podcastindex_dead_feeds.yaml @@ -0,0 +1,25 @@ +get: + tags: + - Static Data + summary: Dead Feeds + # language=Markdown + description: | + Lists all feed Ids that have been marked dead in the Podcast Index database. The list is updated every X hours. + + + A subset of stats can be retrieved using the API endpoint [podcasts/dead](#get-/podcasts/dead). + + + Download from: https://public.podcastindex.org/podcastindex_dead_feeds.csv + operationId: podcastindex_dead_feeds.csv + security: [] # no security required + servers: + - url: 'https://public.podcastindex.org' + description: "Podcast Index Public" + responses: + '200': + $ref: '../../../components/responses/static_dead_feeds.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/public/podcastindex_feeds_db.yaml b/api_src/paths/static/public/podcastindex_feeds_db.yaml new file mode 100644 index 0000000..55a9440 --- /dev/null +++ b/api_src/paths/static/public/podcastindex_feeds_db.yaml @@ -0,0 +1,25 @@ +get: + tags: + - Static Data + summary: Feeds Database + # language=Markdown + description: | + Compressed database of all non-dead feeds in the Podcast Index database. + + + Updated daily. Some attributes excluded. No episodes included. + + + Download from: https://public.podcastindex.org/podcastindex_feeds.db.tgz + operationId: podcastindex_feeds_db.tgz + security: [] # no security required + servers: + - url: 'https://public.podcastindex.org' + description: "Podcast Index Public" + responses: + '200': + $ref: '../../../components/responses/static_feeds_db.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/stats/daily_counts.yaml b/api_src/paths/static/stats/daily_counts.yaml new file mode 100644 index 0000000..5d9fdcc --- /dev/null +++ b/api_src/paths/static/stats/daily_counts.yaml @@ -0,0 +1,25 @@ +get: + tags: + - Static Data + summary: Stats Daily Counts + # language=Markdown + description: | + Report a number of statistics about the feeds in Podcast Index's database. Updated daily. + + + A subset of stats can be retrieved using the API endpoint [stats/current](#get-/stats/current). + + + View at: https://stats.podcastindex.org/daily_counts.json + operationId: daily_counts.json + security: [] # no security required + servers: + - url: 'https://stats.podcastindex.org' + description: "Podcast Index Stats" + responses: + '200': + $ref: '../../../components/responses/static_stats_counts.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/stats/hourly_counts.yaml b/api_src/paths/static/stats/hourly_counts.yaml new file mode 100644 index 0000000..3884593 --- /dev/null +++ b/api_src/paths/static/stats/hourly_counts.yaml @@ -0,0 +1,25 @@ +get: + tags: + - Static Data + summary: Stats Hourly Counts + # language=Markdown + description: | + Report a number of statistics about the feeds in Podcast Index's database. Updated hourly. + + + A subset of stats can be retrieved using the API endpoint [stats/current](#get-/stats/current). + + + View at: https://stats.podcastindex.org/hourly_counts.json + operationId: hourly_counts.json + security: [] # no security required + servers: + - url: 'https://stats.podcastindex.org' + description: "Podcast Index Stats" + responses: + '200': + $ref: '../../../components/responses/static_stats_counts.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/stats/music_json.yaml b/api_src/paths/static/stats/music_json.yaml new file mode 100644 index 0000000..d55258a --- /dev/null +++ b/api_src/paths/static/stats/music_json.yaml @@ -0,0 +1,30 @@ +get: + tags: + - Static Data + summary: v4v Music Chart JSON + # language=Markdown + description: | + Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days. + + Each entry shows the number of listener boosts sent over this time period. The chart is updated hourly. + + + Can be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html). + + + View at: https://stats.podcastindex.org/v4vmusic.json + + + Also available in [OPML](#get-/static/stats/v4vmusic.opml) and [RSS](#get-/static/stats/v4vmusic.rss). + operationId: v4vmusic.json + security: [ ] # no security required + servers: + - url: 'https://stats.podcastindex.org' + description: "Podcast Index Stats" + responses: + '200': + $ref: '../../../components/responses/static_music_json.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/stats/music_opml.yaml b/api_src/paths/static/stats/music_opml.yaml new file mode 100644 index 0000000..8fa2b07 --- /dev/null +++ b/api_src/paths/static/stats/music_opml.yaml @@ -0,0 +1,30 @@ +get: + tags: + - Static Data + summary: v4v Music Chart OPML + # language=Markdown + description: | + Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days. + + Each entry shows the number of listener boosts sent over this time period. The chart is updated hourly. + + + Can be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html). + + + View at: https://stats.podcastindex.org/v4vmusic.opml + + + Also available in [JSON](#get-/static/stats/v4vmusic.json) and [RSS](#get-/static/stats/v4vmusic.rss). + operationId: v4vmusic.opml + security: [ ] # no security required + servers: + - url: 'https://stats.podcastindex.org' + description: "Podcast Index Stats" + responses: + '200': + $ref: '../../../components/responses/static_music_opml.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/stats/music_rss.yaml b/api_src/paths/static/stats/music_rss.yaml new file mode 100644 index 0000000..c739d85 --- /dev/null +++ b/api_src/paths/static/stats/music_rss.yaml @@ -0,0 +1,30 @@ +get: + tags: + - Static Data + summary: v4v Music Chart RSS + # language=Markdown + description: | + Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days. + + Each entry shows the number of listener boosts sent over this time period. The chart is updated hourly. + + + Can be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html). + + + View at: https://stats.podcastindex.org/v4vmusic.rss + + + Also available in [JSON](#get-/static/stats/v4vmusic.json) and [OPML](#get-/static/stats/v4vmusic.opml). + operationId: v4vmusic.rss + security: [ ] # no security required + servers: + - url: 'https://stats.podcastindex.org' + description: "Podcast Index Stats" + responses: + '200': + $ref: '../../../components/responses/static_music_rss.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/stats/v4v.yaml b/api_src/paths/static/stats/v4v.yaml new file mode 100644 index 0000000..843e77c --- /dev/null +++ b/api_src/paths/static/stats/v4v.yaml @@ -0,0 +1,30 @@ +get: + tags: + - Static Data + summary: v4v Sats + # language=Markdown + description: | + Contains the raw data used to populate the graphs at https://stats.podcastindex.org/v4v. + + This is a look at the total [sats](https://www.investopedia.com/terms/s/satoshi.asp) flowing through the Value4Value + Lightning podcasting economy over various periods of time. + + We calculate this data based on our visibility as a one percent voluntary split on Podcastindex.org api + calls. Therefore, the true numbers could be higher, but they cannot be lower than listed here. This represents our + best approximation of how many sats are flowing across the entire ecosystem from listeners to creators, guests (via + episode splits), platforms, services and apps. + + + View at: https://stats.podcastindex.org/chart-data.json + operationId: chart-data.json + security: [ ] # no security required + servers: + - url: 'https://stats.podcastindex.org' + description: "Podcast Index Stats" + responses: + '200': + $ref: '../../../components/responses/static_sats_data.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/tracking/current.yaml b/api_src/paths/static/tracking/current.yaml new file mode 100644 index 0000000..d3032c7 --- /dev/null +++ b/api_src/paths/static/tracking/current.yaml @@ -0,0 +1,34 @@ +get: + tags: + - Static Data + summary: Current + # language=Markdown + description: | + This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order. + + + This is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's + internal timestamp. + + + Similar data can also be retrieved using the API endpoint [recent/data](#get-/recent/data). + + + Access at: https://tracking.podcastindex.org/current + + + The prior 24 hours of data (going backwards until all tracked data is received) can be accessed using the timestamp + of the previous data set. This is found in the `previousTrackingUrl`. + The format of these prior data sets follows the format described below. + operationId: current + security: [] # no security required + servers: + - url: 'https://tracking.podcastindex.org' + description: "Podcast Index Tracking" + responses: + '200': + $ref: '../../../components/responses/static_current.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/tracking/episodeValueBlocks.yaml b/api_src/paths/static/tracking/episodeValueBlocks.yaml new file mode 100644 index 0000000..4ee76b1 --- /dev/null +++ b/api_src/paths/static/tracking/episodeValueBlocks.yaml @@ -0,0 +1,22 @@ +get: + tags: + - Static Data + summary: Episode Value Blocks + # language=Markdown + description: | + Get all episodes with value blocks. + + + Access at: https://tracking.podcastindex.org/episodeValueBlocks.json + operationId: episodeValueBlocks.json + security: [] # no security required + servers: + - url: 'https://tracking.podcastindex.org' + description: "Podcast Index Tracking" + responses: + '200': + $ref: '../../../components/responses/static_tracking_episode_value_blocks.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/static/tracking/feedValueBlocks.yaml b/api_src/paths/static/tracking/feedValueBlocks.yaml new file mode 100644 index 0000000..aa3538f --- /dev/null +++ b/api_src/paths/static/tracking/feedValueBlocks.yaml @@ -0,0 +1,22 @@ +get: + tags: + - Static Data + summary: Feed Value Blocks + # language=Markdown + description: | + Get all feeds with value blocks. + + + Access at: https://tracking.podcastindex.org/feedValueBlocks.json + operationId: feedValueBlocks.json + security: [] # no security required + servers: + - url: 'https://tracking.podcastindex.org' + description: "Podcast Index Tracking" + responses: + '200': + $ref: '../../../components/responses/static_tracking_feed_value_blocks.yaml' + '400': + $ref: '../../../components/responses/400_static.yaml' + '404': + $ref: '../../../components/responses/404.yaml' diff --git a/api_src/paths/stats/current.yaml b/api_src/paths/stats/current.yaml index 55fc996..fb64b0a 100644 --- a/api_src/paths/stats/current.yaml +++ b/api_src/paths/stats/current.yaml @@ -7,7 +7,12 @@ get: Return the most recent index statistics. - Hourly statistics can also be access at https://stats.podcastindex.org/daily_counts.json + Hourly statistics can also be access at https://stats.podcastindex.org/hourly_counts.json + For details, see [Stats Hourly Counts](#get-/static/stats/hourly_counts.json). + + + Daily statistics can also be access at https://stats.podcastindex.org/daily_counts.json. + For details, see [Stats Daily Counts](#get-/static/stats/daily_counts.json). Example: https://api.podcastindex.org/api/1.0/stats/current?pretty diff --git a/api_src/root.yaml b/api_src/root.yaml index b57d1f9..8dc8430 100644 --- a/api_src/root.yaml +++ b/api_src/root.yaml @@ -67,6 +67,9 @@ info: - [PodcastIndexKit](https://github.com/SparrowTek/PodcastIndexKit) - Kotlin - [PodcastIndex-SDK](https://github.com/mr3y-the-programmer/PodcastIndex-SDK) + - Go + - [podcastindex](https://github.com/jjgmckenzie/podcastindex) + - [podcastindex-go](https://github.com/koalahl/podcastindex-go) Are we missing a library? Did you create one for a different language? Create a [Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to the new library! @@ -80,7 +83,7 @@ info: 3. Import the `PodcastIndexOrgEnvironment.postman_environment.json` to Postman 4. Click "Environments" on the left sidebar 5. Select the checkbox next to the PodcastIndexOrgEnvironment entry - 6. Set `AuthKey` and `SeceretKey` values under the "Current Value" column using your API information + 6. Set `AuthKey` and `SeceretKey` values under the "Current Value" column using your API information 7. Click "Collections" from the sidebar 8. Select PodcastIndex 9. Select and run the endpoint to test @@ -105,7 +108,7 @@ info: See [Authentication](#auth) for description of parameters. # Legal - + Legal - [Privacy Policy](https://github.com/Podcastindex-org/legal/blob/main/PrivacyPolicy.md) @@ -193,6 +196,8 @@ paths: $ref: 'paths/podcasts/trending.yaml' '/podcasts/dead': $ref: 'paths/podcasts/dead.yaml' + '/podcasts/batch/byguid': + $ref: 'paths/podcasts/batch/byguid.yaml' '/episodes/byfeedid': $ref: 'paths/episodes/byfeedid.yaml' '/episodes/byfeedurl': @@ -241,6 +246,28 @@ paths: $ref: 'paths/add/byfeedurl.yaml' '/add/byitunesid': $ref: 'paths/add/byitunesid.yaml' + '/static/stats/daily_counts.json': + $ref: 'paths/static/stats/daily_counts.yaml' + '/static/stats/hourly_counts.json': + $ref: 'paths/static/stats/hourly_counts.yaml' + '/static/stats/chart-data.json': + $ref: 'paths/static/stats/v4v.yaml' + '/static/stats/v4vmusic.json': + $ref: 'paths/static/stats/music_json.yaml' + '/static/stats/v4vmusic.opml': + $ref: 'paths/static/stats/music_opml.yaml' + '/static/stats/v4vmusic.rss': + $ref: 'paths/static/stats/music_rss.yaml' + '/static/tracking/current': + $ref: 'paths/static/tracking/current.yaml' + '/static/tracking/feedValueBlocks': + $ref: 'paths/static/tracking/feedValueBlocks.yaml' + '/static/tracking/episodeValueBlocks': + $ref: 'paths/static/tracking/episodeValueBlocks.yaml' + '/static/public/podcastindex_dead_feeds.csv': + $ref: 'paths/static/public/podcastindex_dead_feeds.yaml' + '/static/public/podcastindex_feeds.db.tgz': + $ref: 'paths/static/public/podcastindex_feeds_db.yaml' # currently not used and has some bugs. leaving off for now #'/add/batch/byfeedurl': # $ref: 'paths/add/batch/byfeedurl.yaml' diff --git a/docs/pi_api.json b/docs/pi_api.json index da3bc19..e87fc0b 100644 --- a/docs/pi_api.json +++ b/docs/pi_api.json @@ -16,7 +16,7 @@ "url": "logo.svg", "href": "/" }, - "description": "Download the openapi spec in [json](pi_api.json) or [yaml](pi_api.yaml) format.\n\n# Overview\n\nThe Podcast Index (Podcast Index LLC) is a software developer focused partnership that provides tools and data to\nanyone who aspires to create new and exciting Podcast experiences without the heavy lifting of indexing,\naggregation and data management.\n\n# Example Code\n\nUsers have provided example code for working the API in the following languages:\n\n - [AWS Lambda - python](https://github.com/tbowers/python-podcastindex-org-lambda)\n - [Bash](https://github.com/suorcd/Bash-podcastindex-org-example)\n - [C#](https://github.com/ComicStrip/csharp-podcastindex-org-example)\n - [Elisp](https://github.com/sabexx/elisp-example)\n - [Flutter/Dart](https://github.com/crediblecreative/flutter-dart-podcastindex-org-example)\n - [Go](https://github.com/ComicStrip/Go-podcastindex-org-example)\n - [Go](https://github.com/kilobit/podcast-index-client)\n - [Java](https://github.com/ComicStrip/Java-podcastindex-org-example)\n - [Java](https://github.com/stucoates/PodcastIndexJavaClient)\n - [Node.js](https://github.com/ComicStrip/node.js-podcastindex-org-example)\n - [PHP](https://github.com/Podcastindex-org/example-code)\n - [Python](https://github.com/tbowers/python-podcastindex-org-example)\n - [Swift](https://github.com/ComicStrip/Swift-podcastindex-org-example)\n - ... [More](https://github.com/Podcastindex-org-Examples)\n\nDon't see your desired language, create an example repo and create a\n[Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to your example code project!\n\n# Libraries\n\nUser created libraries for working with the API:\n\n - Java\n - [podcast4j](https://github.com/yusufyilmazfr/podcast4j)\n - .NET\n - [PodcastIndexSharp](https://www.nuget.org/packages/PodcastIndexSharp)\n - Node.js/npm/yarn\n - [podcast-index-api](https://www.npmjs.com/package/podcast-index-api)\n - [podcastdx-client](https://www.npmjs.com/package/podcastdx-client)\n - PHP\n - [podcastindex-php](https://github.com/LowSociety/podcastindex-php)\n - Python/pip\n - [python-podcastindex](https://pypi.org/project/python-podcastindex/)\n - R\n - [podindexr](https://github.com/rpodcast/podindexr)\n - Ruby\n - [podcast-index](https://github.com/jasonyork/podcast-index)\n - Swift\n - [PodcastIndexKit](https://github.com/SparrowTek/PodcastIndexKit)\n - Kotlin\n - [PodcastIndex-SDK](https://github.com/mr3y-the-programmer/PodcastIndex-SDK)\n\nAre we missing a library? Did you create one for a different language? Create a\n[Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to the new library!\n\n# Postman\n\nA collection file for use in the [Postman](https://www.postman.com/) application is available for this API.\n\n 1. Download the contents of the [Postman Docs](https://github.com/Podcastindex-org/docs-api/tree/master/Postman%20Docs) folder.\n 2. Import the `PodcastIndex.postman_collection.json` collection to Postman\n 3. Import the `PodcastIndexOrgEnvironment.postman_environment.json` to Postman\n 4. Click \"Environments\" on the left sidebar\n 5. Select the checkbox next to the PodcastIndexOrgEnvironment entry\n 6. Set `AuthKey` and `SeceretKey` values under the \"Current Value\" column using your API information \n 7. Click \"Collections\" from the sidebar\n 8. Select PodcastIndex\n 9. Select and run the endpoint to test\n\n# Contributing\n\nThe source for this API documentation is available at\n[https://github.com/Podcastindex-org/docs-api](https://github.com/Podcastindex-org/docs-api).\nSubmit an Issue or create a Pull Request.\n\n# Authentication Details\n\nSending an API request is easy. We use an Amazon-style request authorization token to secure each request.\n\n\nRegister for a free API key at https://api.podcastindex.org/\n\n\nThese headers parameters are required for each request: `User-Agent`, `X-Auth-Date`, `X-Auth-Key`, `Authorization`\n\n\nSee [Authentication](#auth) for description of parameters.\n\n# Legal\n\nLegal\n\n - [Privacy Policy](https://github.com/Podcastindex-org/legal/blob/main/PrivacyPolicy.md)\n - [Terms of Service](https://github.com/Podcastindex-org/legal/blob/main/TermsOfService.md)\n - [License](https://github.com/Podcastindex-org/docs-api/blob/master/LICENSE)\n" + "description": "Download the openapi spec in [json](pi_api.json) or [yaml](pi_api.yaml) format.\n\n# Overview\n\nThe Podcast Index (Podcast Index LLC) is a software developer focused partnership that provides tools and data to\nanyone who aspires to create new and exciting Podcast experiences without the heavy lifting of indexing,\naggregation and data management.\n\n# Example Code\n\nUsers have provided example code for working the API in the following languages:\n\n - [AWS Lambda - python](https://github.com/tbowers/python-podcastindex-org-lambda)\n - [Bash](https://github.com/suorcd/Bash-podcastindex-org-example)\n - [C#](https://github.com/ComicStrip/csharp-podcastindex-org-example)\n - [Elisp](https://github.com/sabexx/elisp-example)\n - [Flutter/Dart](https://github.com/crediblecreative/flutter-dart-podcastindex-org-example)\n - [Go](https://github.com/ComicStrip/Go-podcastindex-org-example)\n - [Go](https://github.com/kilobit/podcast-index-client)\n - [Java](https://github.com/ComicStrip/Java-podcastindex-org-example)\n - [Java](https://github.com/stucoates/PodcastIndexJavaClient)\n - [Node.js](https://github.com/ComicStrip/node.js-podcastindex-org-example)\n - [PHP](https://github.com/Podcastindex-org/example-code)\n - [Python](https://github.com/tbowers/python-podcastindex-org-example)\n - [Swift](https://github.com/ComicStrip/Swift-podcastindex-org-example)\n - ... [More](https://github.com/Podcastindex-org-Examples)\n\nDon't see your desired language, create an example repo and create a\n[Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to your example code project!\n\n# Libraries\n\nUser created libraries for working with the API:\n\n - Java\n - [podcast4j](https://github.com/yusufyilmazfr/podcast4j)\n - .NET\n - [PodcastIndexSharp](https://www.nuget.org/packages/PodcastIndexSharp)\n - Node.js/npm/yarn\n - [podcast-index-api](https://www.npmjs.com/package/podcast-index-api)\n - [podcastdx-client](https://www.npmjs.com/package/podcastdx-client)\n - PHP\n - [podcastindex-php](https://github.com/LowSociety/podcastindex-php)\n - Python/pip\n - [python-podcastindex](https://pypi.org/project/python-podcastindex/)\n - R\n - [podindexr](https://github.com/rpodcast/podindexr)\n - Ruby\n - [podcast-index](https://github.com/jasonyork/podcast-index)\n - Swift\n - [PodcastIndexKit](https://github.com/SparrowTek/PodcastIndexKit)\n - Kotlin\n - [PodcastIndex-SDK](https://github.com/mr3y-the-programmer/PodcastIndex-SDK)\n - Go\n - [podcastindex](https://github.com/jjgmckenzie/podcastindex)\n - [podcastindex-go](https://github.com/koalahl/podcastindex-go)\n\nAre we missing a library? Did you create one for a different language? Create a\n[Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to the new library!\n\n# Postman\n\nA collection file for use in the [Postman](https://www.postman.com/) application is available for this API.\n\n 1. Download the contents of the [Postman Docs](https://github.com/Podcastindex-org/docs-api/tree/master/Postman%20Docs) folder.\n 2. Import the `PodcastIndex.postman_collection.json` collection to Postman\n 3. Import the `PodcastIndexOrgEnvironment.postman_environment.json` to Postman\n 4. Click \"Environments\" on the left sidebar\n 5. Select the checkbox next to the PodcastIndexOrgEnvironment entry\n 6. Set `AuthKey` and `SeceretKey` values under the \"Current Value\" column using your API information\n 7. Click \"Collections\" from the sidebar\n 8. Select PodcastIndex\n 9. Select and run the endpoint to test\n\n# Contributing\n\nThe source for this API documentation is available at\n[https://github.com/Podcastindex-org/docs-api](https://github.com/Podcastindex-org/docs-api).\nSubmit an Issue or create a Pull Request.\n\n# Authentication Details\n\nSending an API request is easy. We use an Amazon-style request authorization token to secure each request.\n\n\nRegister for a free API key at https://api.podcastindex.org/\n\n\nThese headers parameters are required for each request: `User-Agent`, `X-Auth-Date`, `X-Auth-Key`, `Authorization`\n\n\nSee [Authentication](#auth) for description of parameters.\n\n# Legal\n\nLegal\n\n - [Privacy Policy](https://github.com/Podcastindex-org/legal/blob/main/PrivacyPolicy.md)\n - [Terms of Service](https://github.com/Podcastindex-org/legal/blob/main/TermsOfService.md)\n - [License](https://github.com/Podcastindex-org/docs-api/blob/master/LICENSE)\n" }, "servers": [ { @@ -642,7 +642,7 @@ "Podcasts" ], "summary": "Dead", - "description": "This call returns all feeds that have been marked dead (`dead` == 1)\n\n\nDead feeds can also be accessed from object storage at https://public.podcastindex.org/podcastindex_dead_feeds.csv\n\n\nExample: https://api.podcastindex.org/api/1.0/podcasts/dead?pretty\n", + "description": "This call returns all feeds that have been marked dead (`dead` == 1)\n\n\nHourly statistics can also be access at https://public.podcastindex.org/podcastindex_dead_feeds.csv\nFor details, see [Dead Feeds](#get-/static/public/podcastindex_dead_feeds.csv).\n\n\nExample: https://api.podcastindex.org/api/1.0/podcasts/dead?pretty\n", "operationId": "podcasts/dead", "security": [ { @@ -670,13 +670,58 @@ } } }, + "/podcasts/batch/byguid": { + "post": { + "tags": [ + "Podcasts" + ], + "summary": "Batch By Feed GUID", + "description": "This call returns everything we know about the feed from the feed's GUID provided in JSON array in the body of the request.\n\n\nThe GUID is a unique, global identifier for the podcast. See the namespace spec for\n[guid](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid) for details.\n", + "operationId": "podcasts/batch/byguid", + "security": [ + { + "API-Key": [], + "User-Agent": [], + "Date": [], + "Authorization": [] + } + ], + "parameters": [ + { + "$ref": "#/components/parameters/pretty" + } + ], + "requestBody": { + "description": "Get episode value data", + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/podcasts_batch_byguid" + } + } + } + }, + "responses": { + "200": { + "$ref": "#/components/responses/podcasts_batch_byguid" + }, + "400": { + "$ref": "#/components/responses/400" + }, + "401": { + "$ref": "#/components/responses/401" + } + } + } + }, "/episodes/byfeedid": { "get": { "tags": [ "Episodes" ], "summary": "By Feed ID", - "description": "This call returns all the episodes we know about for this feed from the PodcastIndex ID.\nEpisodes are in reverse chronological order.\n\n\nWhen using the `enclosure` parameter, only the episode matching the URL is returned.\n\n\nExamples:\n\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&pretty\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&pretty\n - Includes `persons`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=169991&pretty\n - Includes `value`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=4058673&pretty\n - Using `enclosure`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504&enclosure=https://op3.dev/e/mp3s.nashownotes.com/NA-1551-2023-04-30-Final.mp3&pretty\n", + "description": "This call returns all the episodes we know about for this feed from the PodcastIndex ID.\nEpisodes are in reverse chronological order.\n\n\nWhen using the `enclosure` parameter, only the episode matching the URL is returned.\n\n\nExamples:\n\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&pretty\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&pretty\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&newest&pretty\n - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&newest&pretty\n - Includes `persons`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=169991&pretty\n - Includes `value`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=4058673&pretty\n - Using `enclosure`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504&enclosure=https://op3.dev/e/mp3s.nashownotes.com/NA-1551-2023-04-30-Final.mp3&pretty\n", "operationId": "episodes/byfeedid", "security": [ { @@ -702,6 +747,9 @@ { "$ref": "#/components/parameters/fulltext" }, + { + "$ref": "#/components/parameters/newest" + }, { "$ref": "#/components/parameters/pretty" } @@ -1222,7 +1270,7 @@ "Recent" ], "summary": "Recent Data", - "description": "This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order.\n\n\nThis is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's\ninternal timestamp.\n\n\nSimilar data can also be accessed using object storage root url https://tracking.podcastindex.org/current\n\n\nExamples:\n\n - https://api.podcastindex.org/api/1.0/recent/data?pretty\n - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10\n - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10&since=1671164867\n", + "description": "This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order.\n\n\nThis is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's\ninternal timestamp.\n\n\nSimilar data can also be accessed using object storage root url https://tracking.podcastindex.org/current\nFor details, see [Current](#get-/static/tracking/current).\n\n\nExamples:\n\n - https://api.podcastindex.org/api/1.0/recent/data?pretty\n - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10\n - https://api.podcastindex.org/api/1.0/recent/data?pretty&max=10&since=1671164867\n", "operationId": "recent/data", "security": [ { @@ -1460,7 +1508,7 @@ "Stats" ], "summary": "Current", - "description": "Return the most recent index statistics.\n\n\nHourly statistics can also be access at https://stats.podcastindex.org/daily_counts.json\n\n\nExample: https://api.podcastindex.org/api/1.0/stats/current?pretty\n", + "description": "Return the most recent index statistics.\n\n\nHourly statistics can also be access at https://stats.podcastindex.org/hourly_counts.json\nFor details, see [Stats Hourly Counts](#get-/static/stats/hourly_counts.json).\n\n\nDaily statistics can also be access at https://stats.podcastindex.org/daily_counts.json.\nFor details, see [Stats Daily Counts](#get-/static/stats/daily_counts.json).\n\n\nExample: https://api.podcastindex.org/api/1.0/stats/current?pretty\n", "operationId": "stats/current", "security": [ { @@ -1719,6 +1767,314 @@ } } } + }, + "/static/stats/daily_counts.json": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "Stats Daily Counts", + "description": "Report a number of statistics about the feeds in Podcast Index's database. Updated daily.\n\n\nA subset of stats can be retrieved using the API endpoint [stats/current](#get-/stats/current).\n\n\nView at: https://stats.podcastindex.org/daily_counts.json\n", + "operationId": "daily_counts.json", + "security": [], + "servers": [ + { + "url": "https://stats.podcastindex.org", + "description": "Podcast Index Stats" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_stats_counts" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/stats/hourly_counts.json": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "Stats Hourly Counts", + "description": "Report a number of statistics about the feeds in Podcast Index's database. Updated hourly.\n\n\nA subset of stats can be retrieved using the API endpoint [stats/current](#get-/stats/current).\n\n\nView at: https://stats.podcastindex.org/hourly_counts.json\n", + "operationId": "hourly_counts.json", + "security": [], + "servers": [ + { + "url": "https://stats.podcastindex.org", + "description": "Podcast Index Stats" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_stats_counts" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/stats/chart-data.json": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "v4v Sats", + "description": "Contains the raw data used to populate the graphs at https://stats.podcastindex.org/v4v.\n\nThis is a look at the total [sats](https://www.investopedia.com/terms/s/satoshi.asp) flowing through the Value4Value\nLightning podcasting economy over various periods of time.\n\nWe calculate this data based on our visibility as a one percent voluntary split on Podcastindex.org api\ncalls. Therefore, the true numbers could be higher, but they cannot be lower than listed here. This represents our\nbest approximation of how many sats are flowing across the entire ecosystem from listeners to creators, guests (via\nepisode splits), platforms, services and apps.\n\n\nView at: https://stats.podcastindex.org/chart-data.json\n", + "operationId": "chart-data.json", + "security": [], + "servers": [ + { + "url": "https://stats.podcastindex.org", + "description": "Podcast Index Stats" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_sats_data" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/stats/v4vmusic.json": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "v4v Music Chart JSON", + "description": "Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days.\n\nEach entry shows the number of listener boosts sent over this time period. The chart is updated hourly.\n\n\nCan be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html).\n\n\nView at: https://stats.podcastindex.org/v4vmusic.json\n\n\nAlso available in [OPML](#get-/static/stats/v4vmusic.opml) and [RSS](#get-/static/stats/v4vmusic.rss).\n", + "operationId": "v4vmusic.json", + "security": [], + "servers": [ + { + "url": "https://stats.podcastindex.org", + "description": "Podcast Index Stats" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_music_json" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/stats/v4vmusic.opml": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "v4v Music Chart OPML", + "description": "Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days.\n\nEach entry shows the number of listener boosts sent over this time period. The chart is updated hourly.\n\n\nCan be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html).\n\n\nView at: https://stats.podcastindex.org/v4vmusic.opml\n\n\nAlso available in [JSON](#get-/static/stats/v4vmusic.json) and [RSS](#get-/static/stats/v4vmusic.rss).\n", + "operationId": "v4vmusic.opml", + "security": [], + "servers": [ + { + "url": "https://stats.podcastindex.org", + "description": "Podcast Index Stats" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_music_opml" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/stats/v4vmusic.rss": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "v4v Music Chart RSS", + "description": "Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days.\n\nEach entry shows the number of listener boosts sent over this time period. The chart is updated hourly.\n\n\nCan be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html).\n\n\nView at: https://stats.podcastindex.org/v4vmusic.rss\n\n\nAlso available in [JSON](#get-/static/stats/v4vmusic.json) and [OPML](#get-/static/stats/v4vmusic.opml).\n", + "operationId": "v4vmusic.rss", + "security": [], + "servers": [ + { + "url": "https://stats.podcastindex.org", + "description": "Podcast Index Stats" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_music_rss" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/tracking/current": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "Current", + "description": "This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order.\n\n\nThis is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's\ninternal timestamp.\n\n\nSimilar data can also be retrieved using the API endpoint [recent/data](#get-/recent/data).\n\n\nAccess at: https://tracking.podcastindex.org/current\n\n\nThe prior 24 hours of data (going backwards until all tracked data is received) can be accessed using the timestamp\nof the previous data set. This is found in the `previousTrackingUrl`.\nThe format of these prior data sets follows the format described below.\n", + "operationId": "current", + "security": [], + "servers": [ + { + "url": "https://tracking.podcastindex.org", + "description": "Podcast Index Tracking" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_current" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/tracking/feedValueBlocks": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "Feed Value Blocks", + "description": "Get all feeds with value blocks.\n\n\nAccess at: https://tracking.podcastindex.org/feedValueBlocks.json\n", + "operationId": "feedValueBlocks.json", + "security": [], + "servers": [ + { + "url": "https://tracking.podcastindex.org", + "description": "Podcast Index Tracking" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_tracking_feed_value_blocks" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/tracking/episodeValueBlocks": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "Episode Value Blocks", + "description": "Get all episodes with value blocks.\n\n\nAccess at: https://tracking.podcastindex.org/episodeValueBlocks.json\n", + "operationId": "episodeValueBlocks.json", + "security": [], + "servers": [ + { + "url": "https://tracking.podcastindex.org", + "description": "Podcast Index Tracking" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_tracking_episode_value_blocks" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/public/podcastindex_dead_feeds.csv": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "Dead Feeds", + "description": "Lists all feed Ids that have been marked dead in the Podcast Index database. The list is updated every X hours.\n\n\nA subset of stats can be retrieved using the API endpoint [podcasts/dead](#get-/podcasts/dead).\n\n\nDownload from: https://public.podcastindex.org/podcastindex_dead_feeds.csv\n", + "operationId": "podcastindex_dead_feeds.csv", + "security": [], + "servers": [ + { + "url": "https://public.podcastindex.org", + "description": "Podcast Index Public" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_dead_feeds" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } + }, + "/static/public/podcastindex_feeds.db.tgz": { + "get": { + "tags": [ + "Static Data" + ], + "summary": "Feeds Database", + "description": "Compressed database of all non-dead feeds in the Podcast Index database.\n\n\nUpdated daily. Some attributes excluded. No episodes included.\n\n\nDownload from: https://public.podcastindex.org/podcastindex_feeds.db.tgz\n", + "operationId": "podcastindex_feeds_db.tgz", + "security": [], + "servers": [ + { + "url": "https://public.podcastindex.org", + "description": "Podcast Index Public" + } + ], + "responses": { + "200": { + "$ref": "#/components/responses/static_feeds_db" + }, + "400": { + "$ref": "#/components/responses/400_static" + }, + "404": { + "$ref": "#/components/responses/404" + } + } + } } }, "components": { @@ -2088,6 +2444,15 @@ }, "example": "https://op3.dev/e/mp3s.nashownotes.com/NA-1551-2023-04-30-Final.mp3" }, + "newest": { + "name": "newest", + "in": "query", + "description": "If present, returns only the most recent (newest) episode for each specified feed id.\n\n\nParameter shall not have a value\n", + "schema": { + "type": "boolean" + }, + "allowEmptyValue": true + }, "id_episode_pi": { "name": "id", "in": "query", @@ -2683,9 +3048,9 @@ "example": 0 }, "imageUrlHash": { - "description": "A CRC32 hash of the `image` URL with the protocol (`http://`, `https://`) removed.\n", + "description": "A CRC32 hash of the `image` URL with the protocol (`http://`, `https://`) removed. 64bit integer.\n", "type": "integer", - "example": 1639321931 + "example": 3969216649 }, "newestItemPublishTime": { "description": "The time the most recent episode in the feed was published.\n\n\nNote: some endpoints use `newestItemPubdate` while others use `newestItemPublishTime`. \nThey return the same information. See https://github.com/Podcastindex-org/api/issues/3 to track when the property name is updated.\n", @@ -2917,7 +3282,7 @@ "example": "https://mp3s.nashownotes.com/NA-1322-Captions.srt" }, "transcript": { - "description": "This tag is used to link to a transcript or closed captions file. Multiple tags can be present for multiple transcript formats.\n\nDetailed file format information and example files are [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/transcripts/transcripts.md).\n", + "description": "This tag is used to link to a transcript or closed captions file. Multiple tags can be present for multiple transcript formats.\n\nDetailed file format information and example files are [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/tags/transcript.md).\n", "type": "object", "properties": { "url": { @@ -3669,18 +4034,187 @@ "$ref": "#/components/schemas/feed_dead" } }, - "datePublishedPretty": { - "description": "The date and time the episode was published formatted as a human readable string.\n\n\nNote: uses the PodcastIndex server local time to do conversion.\n", - "type": "string", - "example": "January 01, 2019 9:30pm" + "podcasts_batch_byguid": { + "description": "JSON array of feed GUIDs\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "917393e3-1b1e-5cef-ace4-edaa54e1f810", + "c73b1a23-1c28-5edb-94c3-10d1745d0877" + ] }, - "startTime_live": { - "description": "The time the livestream starts\n", - "type": "integer", - "format": "Unix Epoch", - "example": 1674154800 + "allfound": { + "description": "Indicates if data was found for all `podcastguid` and `episodeguid` values.\n", + "type": "boolean", + "example": true }, - "endTime_live": { + "found": { + "description": "Number of value data returned.\n", + "type": "integer", + "example": 4 + }, + "inPollingQueue": { + "description": "Indicates if feed is currently scheduled to be polled/checked for new episodes.\n", + "type": "integer", + "nullable": true, + "example": 1 + }, + "priority": { + "description": "How often the feed is checked for updates and new episodes\n\nA value of -1 means never check. A value of 5 means check the most.\n", + "type": "integer", + "enum": [ + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "example": 5 + }, + "createdOn": { + "description": "The first time the feed was seen by Podcast Index\n", + "type": "integer", + "format": "Unix Epoch", + "example": 1613394034 + }, + "valueBlock": { + "description": "Information for supporting the podcast via one of the \"Value for Value\" methods. May not be reported.\n\n\nValue is a string of JSON data representing the feed value block data.\n\n\nExamples:\n - `lightning` value type: https://api.podcastindex.org/api/1.0/podcasts/byfeedid?id=169991&pretty\n - `webmonetization` value type: https://api.podcastindex.org/api/1.0/podcasts/byfeedid?id=779873&pretty\n", + "type": "string" + }, + "feed_podcast_batch": { + "description": "Known details of podcast feed\n", + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/id_feed" + }, + "title": { + "$ref": "#/components/schemas/title_feed" + }, + "url": { + "$ref": "#/components/schemas/url_feed" + }, + "originalUrl": { + "$ref": "#/components/schemas/originalUrl" + }, + "link": { + "$ref": "#/components/schemas/link_feed" + }, + "description": { + "$ref": "#/components/schemas/description_feed" + }, + "author": { + "$ref": "#/components/schemas/author" + }, + "ownerName": { + "$ref": "#/components/schemas/ownerName" + }, + "image": { + "$ref": "#/components/schemas/image_feed" + }, + "artwork": { + "$ref": "#/components/schemas/artwork" + }, + "lastUpdateTime": { + "$ref": "#/components/schemas/lastUpdateTime" + }, + "lastCrawlTime": { + "$ref": "#/components/schemas/lastCrawlTime" + }, + "lastParseTime": { + "$ref": "#/components/schemas/lastParseTime" + }, + "inPollingQueue": { + "$ref": "#/components/schemas/inPollingQueue" + }, + "priority": { + "$ref": "#/components/schemas/priority" + }, + "lastGoodHttpStatusTime": { + "$ref": "#/components/schemas/lastGoodHttpStatusTime" + }, + "lastHttpStatus": { + "$ref": "#/components/schemas/lastHttpStatus" + }, + "contentType": { + "$ref": "#/components/schemas/contentType" + }, + "itunesId": { + "$ref": "#/components/schemas/itunesId_feed" + }, + "generator": { + "$ref": "#/components/schemas/generator" + }, + "createdOn": { + "$ref": "#/components/schemas/createdOn" + }, + "language": { + "$ref": "#/components/schemas/language" + }, + "type": { + "$ref": "#/components/schemas/type" + }, + "dead": { + "$ref": "#/components/schemas/dead" + }, + "crawlErrors": { + "$ref": "#/components/schemas/crawlErrors" + }, + "parseErrors": { + "$ref": "#/components/schemas/parseErrors" + }, + "categories": { + "$ref": "#/components/schemas/categories" + }, + "locked": { + "$ref": "#/components/schemas/locked" + }, + "explicit": { + "$ref": "#/components/schemas/explicit_feed" + }, + "podcastGuid": { + "$ref": "#/components/schemas/podcastguid" + }, + "medium": { + "$ref": "#/components/schemas/medium_feed" + }, + "episodeCount": { + "$ref": "#/components/schemas/episodeCount" + }, + "imageUrlHash": { + "$ref": "#/components/schemas/imageUrlHash" + }, + "newestItemPubdate": { + "$ref": "#/components/schemas/newestItemPublishTime" + }, + "valueBlock": { + "$ref": "#/components/schemas/valueBlock" + } + } + }, + "feeds_batch": { + "description": "List of feeds with matching GUID\n", + "type": "array", + "items": { + "$ref": "#/components/schemas/feed_podcast_batch" + } + }, + "datePublishedPretty": { + "description": "The date and time the episode was published formatted as a human readable string.\n\n\nNote: uses the PodcastIndex server local time to do conversion.\n", + "type": "string", + "example": "January 01, 2019 9:30pm" + }, + "startTime_live": { + "description": "The time the livestream starts\n", + "type": "integer", + "format": "Unix Epoch", + "example": 1674154800 + }, + "endTime_live": { "description": "The time the livestream ends\n", "type": "integer", "format": "Unix Epoch", @@ -4962,54 +5496,65 @@ "$ref": "#/components/schemas/value_byepisodeguid_batch" } }, - "allfound": { - "description": "Indicates if data was found for all `podcastguid` and `episodeguid` values.\n", - "type": "boolean", - "example": true + "feedCountTotal": { + "description": "Total podcast feeds in the index.\n", + "type": "integer", + "example": 4257865 }, - "found": { - "description": "Number of value data returned.\n", + "episodeCountTotal": { + "description": "Total individual podcast episodes in the index.\n", "type": "integer", - "example": 4 + "example": 143953477 + }, + "feedsWithNewEpisodes3days": { + "description": "Podcast feeds with a new episode released in the last 3 days.\n", + "type": "integer", + "example": 97522 + }, + "feedsWithNewEpisodes10days": { + "description": "Podcast feeds with a new episode released in the last 10 days.\n", + "type": "integer", + "example": 212322 + }, + "feedsWithNewEpisodes30days": { + "description": "Podcast feeds with a new episode released in the last 30 days.\n", + "type": "integer", + "example": 306748 + }, + "feedsWithNewEpisodes90days": { + "description": "Podcast feeds with a new episode released in the last 90 days.\n", + "type": "integer", + "example": 436933 + }, + "feedsWithValueBlocks": { + "description": "Podcast feeds with a\n[`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value)\ntag in at least 1 episode.\n", + "type": "integer", + "example": 21916 }, "stats": { "description": "An array statistic properties\n", "type": "object", "properties": { "feedCountTotal": { - "description": "Total podcast feeds in the index.", - "type": "integer", - "example": 4048514 + "$ref": "#/components/schemas/feedCountTotal" }, "episodeCountTotal": { - "description": "Total individual podcast episodes in the index.", - "type": "integer", - "example": 112890355 + "$ref": "#/components/schemas/episodeCountTotal" }, "feedsWithNewEpisodes3days": { - "description": "Podcast feeds with a new episode released in the last 3 days.", - "type": "integer", - "example": 87369 + "$ref": "#/components/schemas/feedsWithNewEpisodes3days" }, "feedsWithNewEpisodes10days": { - "description": "Podcast feeds with a new episode released in the last 10 days.", - "type": "integer", - "example": 242922 + "$ref": "#/components/schemas/feedsWithNewEpisodes10days" }, "feedsWithNewEpisodes30days": { - "description": "Podcast feeds with a new episode released in the last 30 days.", - "type": "integer", - "example": 352744 + "$ref": "#/components/schemas/feedsWithNewEpisodes30days" }, "feedsWithNewEpisodes90days": { - "description": "Podcast feeds with a new episode released in the last 90 days.", - "type": "integer", - "example": 478568 + "$ref": "#/components/schemas/feedsWithNewEpisodes90days" }, "feedsWithValueBlocks": { - "description": "Podcast feeds with a value block", - "type": "integer", - "example": 9772 + "$ref": "#/components/schemas/feedsWithValueBlocks" } } }, @@ -5050,6 +5595,147 @@ "false" ], "example": "true" + }, + "feedsWithNewEpisodes7days": { + "description": "Podcast feeds with a new episode released in the last 7 days.\n", + "type": "integer", + "example": 179043 + }, + "feedsWithNewEpisodes14days": { + "description": "Podcast feeds with a new episode released in the last 14 days.\n", + "type": "integer", + "example": 239664 + }, + "feedsWithNewEpisodes60days": { + "description": "Podcast feeds with a new episode released in the last 60 days.\n", + "type": "integer", + "example": 382945 + }, + "paidFeedsWithNewEpisodes3days": { + "description": "Podcast feeds with a new episode containing a\n[`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value)\nblock released in the last 3 days.\n", + "type": "integer", + "example": 77638 + }, + "paidFeedsWithNewEpisodes7days": { + "description": "Podcast feeds with a new episode containing a\n[`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value)\nblock released in the last 7 days.\n", + "type": "integer", + "example": 140275 + }, + "paidFeedsWithNewEpisodes10days": { + "description": "Podcast feeds with a new episode containing a\n[`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value)\nblock released in the last 10 days.\n", + "type": "integer", + "example": 165789 + }, + "paidFeedsWithNewEpisodes14days": { + "description": "Podcast feeds with a new episode containing a\n[`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value)\nblock released in the last 14 days.\n", + "type": "integer", + "example": 186602 + }, + "paidFeedsWithNewEpisodes30days": { + "description": "Podcast feeds with a new episode containing a\n[`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value)\nblock released in the last 30 days.\n", + "type": "integer", + "example": 237389 + }, + "paidFeedsWithNewEpisodes60days": { + "description": "Podcast feeds with a new episode containing a\n[`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value)\nblock released in the last 60 days.\n", + "type": "integer", + "example": 77632 + }, + "paidFeedsWithNewEpisodes90days": { + "description": "Podcast feeds with a new episode containing a\n[`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value)\nblock released in the last 90 days.\n", + "type": "integer", + "example": 335380 + }, + "newEpisodes3days": { + "description": "Podcast feeds with a new episode containing a released in the last 3 days.\n", + "type": "integer", + "example": 212324 + }, + "newEpisodes7days": { + "description": "Podcast feeds with a new episode containing a released in the last 7 days.\n", + "type": "integer", + "example": 442061 + }, + "newEpisodes10days": { + "description": "Podcast feeds with a new episode containing a released in the last 10 days.\n", + "type": "integer", + "example": 684833 + }, + "newEpisodes14days": { + "description": "Podcast feeds with a new episode containing a released in the last 14 days.\n", + "type": "integer", + "example": 907203 + }, + "newEpisodes30days": { + "description": "Podcast feeds with a new episode containing a released in the last 30 days.\n", + "type": "integer", + "example": 1901547 + }, + "newEpisodes60days": { + "description": "Podcast feeds with a new episode containing a released in the last 60 days.\n", + "type": "integer", + "example": 3710750 + }, + "newEpisodes90days": { + "description": "Podcast feeds with a new episode containing a released in the last 90 days.\n", + "type": "integer", + "example": 5498580 + }, + "feedsWithFundingTag": { + "description": "Podcast feeds with a\n[`podcast:funding`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#funding)\ntag in at least 1 episode.\n", + "type": "integer", + "example": 57582 + }, + "feedsWithTranscripts": { + "description": "Podcast feeds with a\n[`podcast:transcript`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#transcript)\ntag in at least 1 episode.\n", + "type": "integer", + "example": 61385 + }, + "episodesWithTranscripts": { + "description": "Episodes with a\n[`podcast:transcript`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#transcript)\ntag.\n", + "type": "integer", + "example": 3198597 + }, + "feedsWithChapters": { + "description": "Podcast feeds with a\n[`podcast:chapters`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#chapters)\ntag in at least 1 episode.\n", + "type": "integer", + "example": 35582 + }, + "episodesWithChapters": { + "description": "Number of episodes with [`podcast:chapters`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#chapters)\n", + "type": "integer", + "example": 652781 + }, + "feedsWithMediumMusic": { + "description": "Podcast feeds with a\n[`podcast:medium`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#medium)\ntag with a value of `music`.\n", + "type": "integer", + "example": 3700 + }, + "feedsWithMediumVideo": { + "description": "Podcast feeds with a\n[`podcast:medium`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#medium)\ntag with a value of `video`.\n", + "type": "integer", + "example": 1288 + }, + "data_static": { + "description": "Object containing the recent data\n", + "type": "object", + "properties": { + "nextSince": { + "description": "Value of `since` in next block of data\n", + "type": "integer", + "format": "Unix Epoch", + "example": 1613805249 + }, + "position": { + "$ref": "#/components/schemas/position" + }, + "feeds": { + "$ref": "#/components/schemas/feeds_data" + }, + "items": { + "$ref": "#/components/schemas/items_data" + } + } } }, "responses": { @@ -5086,6 +5772,9 @@ } } }, + "404": { + "description": "Not found" + }, "itunes_replacement": { "description": "Success", "content": { @@ -5365,6 +6054,33 @@ } } }, + "podcasts_batch_byguid": { + "description": "Success", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "$ref": "#/components/schemas/status" + }, + "allFound": { + "$ref": "#/components/schemas/allfound" + }, + "found": { + "$ref": "#/components/schemas/found" + }, + "feeds": { + "$ref": "#/components/schemas/feeds_batch" + }, + "description": { + "$ref": "#/components/schemas/description_response" + } + } + } + } + } + }, "episodes_byfeedid": { "description": "Success", "content": { @@ -5971,6 +6687,450 @@ } } } + }, + "static_stats_counts": { + "description": "Object containing the statistics for the Podcast Index feed data", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "feedCountTotal": { + "$ref": "#/components/schemas/feedCountTotal" + }, + "episodeCountTotal": { + "$ref": "#/components/schemas/episodeCountTotal" + }, + "feedsWithNewEpisodes3days": { + "$ref": "#/components/schemas/feedsWithNewEpisodes3days" + }, + "feedsWithNewEpisodes7days": { + "$ref": "#/components/schemas/feedsWithNewEpisodes7days" + }, + "feedsWithNewEpisodes10days": { + "$ref": "#/components/schemas/feedsWithNewEpisodes10days" + }, + "feedsWithNewEpisodes14days": { + "$ref": "#/components/schemas/feedsWithNewEpisodes14days" + }, + "feedsWithNewEpisodes30days": { + "$ref": "#/components/schemas/feedsWithNewEpisodes30days" + }, + "feedsWithNewEpisodes60days": { + "$ref": "#/components/schemas/feedsWithNewEpisodes60days" + }, + "feedsWithNewEpisodes90days": { + "$ref": "#/components/schemas/feedsWithNewEpisodes90days" + }, + "paidFeedsWithNewEpisodes3days": { + "$ref": "#/components/schemas/paidFeedsWithNewEpisodes3days" + }, + "paidFeedsWithNewEpisodes7days": { + "$ref": "#/components/schemas/paidFeedsWithNewEpisodes7days" + }, + "paidFeedsWithNewEpisodes10days": { + "$ref": "#/components/schemas/paidFeedsWithNewEpisodes10days" + }, + "paidFeedsWithNewEpisodes14days": { + "$ref": "#/components/schemas/paidFeedsWithNewEpisodes14days" + }, + "paidFeedsWithNewEpisodes30days": { + "$ref": "#/components/schemas/paidFeedsWithNewEpisodes30days" + }, + "paidFeedsWithNewEpisodes60days": { + "$ref": "#/components/schemas/paidFeedsWithNewEpisodes60days" + }, + "paidFeedsWithNewEpisodes90days": { + "$ref": "#/components/schemas/paidFeedsWithNewEpisodes90days" + }, + "newEpisodes3days": { + "$ref": "#/components/schemas/newEpisodes3days" + }, + "newEpisodes7days": { + "$ref": "#/components/schemas/newEpisodes7days" + }, + "newEpisodes10days": { + "$ref": "#/components/schemas/newEpisodes10days" + }, + "newEpisodes14days": { + "$ref": "#/components/schemas/newEpisodes14days" + }, + "newEpisodes30days": { + "$ref": "#/components/schemas/newEpisodes30days" + }, + "newEpisodes60days": { + "$ref": "#/components/schemas/newEpisodes60days" + }, + "newEpisodes90days": { + "$ref": "#/components/schemas/newEpisodes90days" + }, + "feedsWithValueBlocks": { + "$ref": "#/components/schemas/feedsWithValueBlocks" + }, + "feedsWithFundingTag": { + "$ref": "#/components/schemas/feedsWithFundingTag" + }, + "feedsWithTranscripts": { + "$ref": "#/components/schemas/feedsWithTranscripts" + }, + "episodesWithTranscripts": { + "$ref": "#/components/schemas/episodesWithTranscripts" + }, + "feedsWithChapters": { + "$ref": "#/components/schemas/feedsWithChapters" + }, + "episodesWithChapters": { + "$ref": "#/components/schemas/episodesWithChapters" + }, + "feedsWithMediumMusic": { + "$ref": "#/components/schemas/feedsWithMediumMusic" + }, + "feedsWithMediumVideo": { + "$ref": "#/components/schemas/feedsWithMediumVideo" + } + } + } + } + } + }, + "400_static": { + "description": "Invalid request", + "content": { + "application/xml": { + "schema": { + "type": "object", + "properties": { + "Error": { + "type": "object", + "properties": { + "Code": { + "type": "string" + }, + "RequestId": { + "type": "string" + }, + "HostId": { + "type": "string" + } + } + } + } + }, + "example": { + "status": "false", + "description": "Invalid parameters" + } + } + } + }, + "static_sats_data": { + "description": "Object containing the number of sats, transactions, and senders.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sats": { + "description": "Array of sats seen in transactions on the specified date (x)", + "type": "array", + "items": { + "type": "object", + "properties": { + "x": { + "description": "Date in YYYY-M-D format.", + "type": "string", + "example": "2024-5-24" + }, + "y": { + "description": "Number of sats transacted", + "type": "integer", + "example": 629594 + } + } + } + }, + "senders": { + "description": "Array of senders (supporters) seen in transactions on the specified date (x)", + "type": "array", + "items": { + "type": "object", + "properties": { + "x": { + "description": "Date in YYYY-M-D format.", + "type": "string", + "example": "2024-5-24" + }, + "y": { + "description": "Number of senders", + "type": "integer", + "example": 238 + } + } + } + }, + "txs": { + "description": "Array of transactions on the specified date (x)", + "type": "array", + "items": { + "type": "object", + "properties": { + "x": { + "description": "Date in YYYY-M-D format.", + "type": "string", + "example": "2024-5-24" + }, + "y": { + "description": "Number of transactions", + "type": "integer", + "example": 8212 + } + } + } + }, + "colors": { + "description": "Colors used in graphs", + "type": "object", + "properties": { + "txcolor": { + "type": "string", + "example": "#ff3333" + }, + "color14": { + "type": "string", + "example": "#9370db" + }, + "color30": { + "type": "string", + "example": "#58d68d" + }, + "color60": { + "type": "string", + "example": "#0088cc" + }, + "color7": { + "type": "string", + "example": "#fffa90" + }, + "color90": { + "type": "string", + "example": "#ff8800" + } + } + } + } + } + } + } + }, + "static_music_json": { + "description": "The hourly Top X music", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "description": "Title of music", + "type": "string", + "example": "Podcasting 2.0 Top 100 (Music)" + }, + "description": { + "description": "Description of object", + "type": "string", + "example": "An hourly Top 100 music playlist." + }, + "timestamp": { + "description": "Date updated", + "type": "integer", + "example": 1724465107 + }, + "items": { + "description": "Array of top X music feeds", + "type": "object", + "properties": { + "rank": { + "description": "Rank in chart", + "type": "integer", + "example": 1 + }, + "boosts": { + "description": "Number of boosts", + "type": "string", + "example": "42" + }, + "title": { + "description": "Title of Track", + "type": "string", + "example": "To be in Nashville" + }, + "image": { + "$ref": "#/components/schemas/image_episode" + }, + "feedId": { + "$ref": "#/components/schemas/id_feed" + }, + "feedUrl": { + "$ref": "#/components/schemas/url_feed" + }, + "feedGuid": { + "$ref": "#/components/schemas/podcastguid" + }, + "itemGuid": { + "$ref": "#/components/schemas/guid" + } + } + } + } + } + } + } + }, + "static_music_opml": { + "description": "The hourly Top X music\n\n\nData follows the [OPML spec](https://opml.org/spec2.opml) with additions of\n[Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md) attributes.\n\n\nExample `outline` entry:\n\n```xml\n\n```\n\nAttributes:\n\n - `text`\n - Title of Track\n - Example: `\"To be in Nashville\"`\n - `xmlUrl`\n - Feed URL track is in\n - Example: `\"https://files.heycitizen.xyz/Songs/Albums/The-Heycitizen-Experience/the heycitizen experience.xml\"`\n - `podcast:feedGuid`\n - The GUID from the `podcast:guid` tag in the feed. This value is a unique, global identifier for the podcast.\n - See the namespace spec for [guid](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid) for details.\n - Example: `\"a2d2e313-9cbd-5169-b89c-ab07b33ecc33\"`\n - `podcast:itemGuid`\n - The unique identifier for the episode\n - Example: `\"ac34129c-c78a-463e-a64f-01405e1f2be4\"`\n", + "content": { + "application/xml": { + "schema": { + "type": "object" + } + } + } + }, + "static_music_rss": { + "description": "The hourly Top X music\n\n\nData follows the RSS XML spec with additions of\n[Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md) attributes.\n\n\nThe [`podcast:remoteItem`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#remote-item)\nis used to reference the episodes in the music chart.\n", + "content": { + "application/rss+xml": { + "schema": { + "type": "object" + } + } + } + }, + "static_current": { + "description": "The feed and episode data seen by the Podcast Index.\n", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "status": { + "$ref": "#/components/schemas/status" + }, + "feedCount": { + "$ref": "#/components/schemas/feedCount" + }, + "itemCount": { + "$ref": "#/components/schemas/itemCount" + }, + "max": { + "$ref": "#/components/schemas/max" + }, + "since": { + "$ref": "#/components/schemas/since" + }, + "previousTrackingUrl": { + "description": "URL to previous set of data", + "type": "string", + "example": "https://tracking.podcastindex.org/1724468201" + }, + "data": { + "$ref": "#/components/schemas/data_static" + } + } + } + } + } + }, + "static_tracking_feed_value_blocks": { + "description": "Array of episodes containing value blocks", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/id_feed" + }, + "itunesId": { + "$ref": "#/components/schemas/itunesId_feed" + }, + "podcastGuid": { + "$ref": "#/components/schemas/podcastguid" + }, + "url": { + "$ref": "#/components/schemas/url_feed" + }, + "value": { + "$ref": "#/components/schemas/value" + }, + "valueCreatedOn": { + "$ref": "#/components/schemas/valueCreatedOn" + } + } + } + } + } + } + }, + "static_tracking_episode_value_blocks": { + "description": "Array of episodes containing value blocks", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "episodeGuid": { + "$ref": "#/components/schemas/guid" + }, + "episodeId": { + "$ref": "#/components/schemas/id_episode" + }, + "feedId": { + "$ref": "#/components/schemas/id_feed" + }, + "feedUrl": { + "$ref": "#/components/schemas/url_feed" + }, + "itunesId": { + "$ref": "#/components/schemas/itunesId_feed" + }, + "podcastGuid": { + "$ref": "#/components/schemas/podcastguid" + }, + "value": { + "$ref": "#/components/schemas/value" + }, + "valueCreatedOn": { + "$ref": "#/components/schemas/valueCreatedOn" + } + } + } + } + } + } + }, + "static_dead_feeds": { + "description": "Feed Ids in CSV file format.\n\n\nEach row is the feed id. No Header.\n\n\nExample:\n\n\n```csv\n3,\n38,\n43,\n45,\n56,\n```\n", + "content": { + "application/csv": { + "schema": { + "type": "object" + } + } + } + }, + "static_feeds_db": { + "description": "Podcast Index Feeds Database\n", + "content": { + "application/gzip": { + "schema": { + "type": "object" + } + } + } } } } diff --git a/docs/pi_api.yaml b/docs/pi_api.yaml index 92324ff..15bba08 100644 --- a/docs/pi_api.yaml +++ b/docs/pi_api.yaml @@ -66,6 +66,9 @@ info: - [PodcastIndexKit](https://github.com/SparrowTek/PodcastIndexKit) - Kotlin - [PodcastIndex-SDK](https://github.com/mr3y-the-programmer/PodcastIndex-SDK) + - Go + - [podcastindex](https://github.com/jjgmckenzie/podcastindex) + - [podcastindex-go](https://github.com/koalahl/podcastindex-go) Are we missing a library? Did you create one for a different language? Create a [Pull Request](https://github.com/Podcastindex-org/docs-api/pulls) with a link to the new library! @@ -79,7 +82,7 @@ info: 3. Import the `PodcastIndexOrgEnvironment.postman_environment.json` to Postman 4. Click "Environments" on the left sidebar 5. Select the checkbox next to the PodcastIndexOrgEnvironment entry - 6. Set `AuthKey` and `SeceretKey` values under the "Current Value" column using your API information + 6. Set `AuthKey` and `SeceretKey` values under the "Current Value" column using your API information 7. Click "Collections" from the sidebar 8. Select PodcastIndex 9. Select and run the endpoint to test @@ -698,7 +701,8 @@ paths: This call returns all feeds that have been marked dead (`dead` == 1) - Dead feeds can also be accessed from object storage at https://public.podcastindex.org/podcastindex_dead_feeds.csv + Hourly statistics can also be access at https://public.podcastindex.org/podcastindex_dead_feeds.csv + For details, see [Dead Feeds](#get-/static/public/podcastindex_dead_feeds.csv). Example: https://api.podcastindex.org/api/1.0/podcasts/dead?pretty @@ -717,6 +721,39 @@ paths: $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' + /podcasts/batch/byguid: + post: + tags: + - Podcasts + summary: Batch By Feed GUID + description: | + This call returns everything we know about the feed from the feed's GUID provided in JSON array in the body of the request. + + + The GUID is a unique, global identifier for the podcast. See the namespace spec for + [guid](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid) for details. + operationId: podcasts/batch/byguid + security: + - API-Key: [] + User-Agent: [] + Date: [] + Authorization: [] + parameters: + - $ref: '#/components/parameters/pretty' + requestBody: + description: Get episode value data + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/podcasts_batch_byguid' + responses: + '200': + $ref: '#/components/responses/podcasts_batch_byguid' + '400': + $ref: '#/components/responses/400' + '401': + $ref: '#/components/responses/401' /episodes/byfeedid: get: tags: @@ -734,6 +771,8 @@ paths: - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&pretty - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&pretty + - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=75075&newest&pretty + - https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504,920666&newest&pretty - Includes `persons`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=169991&pretty - Includes `value`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=4058673&pretty - Using `enclosure`: https://api.podcastindex.org/api/1.0/episodes/byfeedid?id=41504&enclosure=https://op3.dev/e/mp3s.nashownotes.com/NA-1551-2023-04-30-Final.mp3&pretty @@ -749,6 +788,7 @@ paths: - $ref: '#/components/parameters/max' - $ref: '#/components/parameters/enclosure' - $ref: '#/components/parameters/fulltext' + - $ref: '#/components/parameters/newest' - $ref: '#/components/parameters/pretty' responses: '200': @@ -1120,6 +1160,7 @@ paths: Similar data can also be accessed using object storage root url https://tracking.podcastindex.org/current + For details, see [Current](#get-/static/tracking/current). Examples: @@ -1353,7 +1394,12 @@ paths: Return the most recent index statistics. - Hourly statistics can also be access at https://stats.podcastindex.org/daily_counts.json + Hourly statistics can also be access at https://stats.podcastindex.org/hourly_counts.json + For details, see [Stats Hourly Counts](#get-/static/stats/hourly_counts.json). + + + Daily statistics can also be access at https://stats.podcastindex.org/daily_counts.json. + For details, see [Stats Daily Counts](#get-/static/stats/daily_counts.json). Example: https://api.podcastindex.org/api/1.0/stats/current?pretty @@ -1551,6 +1597,304 @@ paths: $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' + /static/stats/daily_counts.json: + get: + tags: + - Static Data + summary: Stats Daily Counts + description: | + Report a number of statistics about the feeds in Podcast Index's database. Updated daily. + + + A subset of stats can be retrieved using the API endpoint [stats/current](#get-/stats/current). + + + View at: https://stats.podcastindex.org/daily_counts.json + operationId: daily_counts.json + security: [] + servers: + - url: https://stats.podcastindex.org + description: Podcast Index Stats + responses: + '200': + $ref: '#/components/responses/static_stats_counts' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/stats/hourly_counts.json: + get: + tags: + - Static Data + summary: Stats Hourly Counts + description: | + Report a number of statistics about the feeds in Podcast Index's database. Updated hourly. + + + A subset of stats can be retrieved using the API endpoint [stats/current](#get-/stats/current). + + + View at: https://stats.podcastindex.org/hourly_counts.json + operationId: hourly_counts.json + security: [] + servers: + - url: https://stats.podcastindex.org + description: Podcast Index Stats + responses: + '200': + $ref: '#/components/responses/static_stats_counts' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/stats/chart-data.json: + get: + tags: + - Static Data + summary: v4v Sats + description: | + Contains the raw data used to populate the graphs at https://stats.podcastindex.org/v4v. + + This is a look at the total [sats](https://www.investopedia.com/terms/s/satoshi.asp) flowing through the Value4Value + Lightning podcasting economy over various periods of time. + + We calculate this data based on our visibility as a one percent voluntary split on Podcastindex.org api + calls. Therefore, the true numbers could be higher, but they cannot be lower than listed here. This represents our + best approximation of how many sats are flowing across the entire ecosystem from listeners to creators, guests (via + episode splits), platforms, services and apps. + + + View at: https://stats.podcastindex.org/chart-data.json + operationId: chart-data.json + security: [] + servers: + - url: https://stats.podcastindex.org + description: Podcast Index Stats + responses: + '200': + $ref: '#/components/responses/static_sats_data' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/stats/v4vmusic.json: + get: + tags: + - Static Data + summary: v4v Music Chart JSON + description: | + Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days. + + Each entry shows the number of listener boosts sent over this time period. The chart is updated hourly. + + + Can be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html). + + + View at: https://stats.podcastindex.org/v4vmusic.json + + + Also available in [OPML](#get-/static/stats/v4vmusic.opml) and [RSS](#get-/static/stats/v4vmusic.rss). + operationId: v4vmusic.json + security: [] + servers: + - url: https://stats.podcastindex.org + description: Podcast Index Stats + responses: + '200': + $ref: '#/components/responses/static_music_json' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/stats/v4vmusic.opml: + get: + tags: + - Static Data + summary: v4v Music Chart OPML + description: | + Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days. + + Each entry shows the number of listener boosts sent over this time period. The chart is updated hourly. + + + Can be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html). + + + View at: https://stats.podcastindex.org/v4vmusic.opml + + + Also available in [JSON](#get-/static/stats/v4vmusic.json) and [RSS](#get-/static/stats/v4vmusic.rss). + operationId: v4vmusic.opml + security: [] + servers: + - url: https://stats.podcastindex.org + description: Podcast Index Stats + responses: + '200': + $ref: '#/components/responses/static_music_opml' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/stats/v4vmusic.rss: + get: + tags: + - Static Data + summary: v4v Music Chart RSS + description: | + Contains the ranking of the music tracks played on podcasts that have been boosted the most over the last 7 days. + + Each entry shows the number of listener boosts sent over this time period. The chart is updated hourly. + + + Can be viewed in a browser at https://podcastindex.top/ (https://stats.podcastindex.org/v4vmusic.html). + + + View at: https://stats.podcastindex.org/v4vmusic.rss + + + Also available in [JSON](#get-/static/stats/v4vmusic.json) and [OPML](#get-/static/stats/v4vmusic.opml). + operationId: v4vmusic.rss + security: [] + servers: + - url: https://stats.podcastindex.org + description: Podcast Index Stats + responses: + '200': + $ref: '#/components/responses/static_music_rss' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/tracking/current: + get: + tags: + - Static Data + summary: Current + description: | + This call returns every new feed and episode added to the index over the past 24 hours in reverse chronological order. + + + This is similar to `/recent/feeds` but uses the date the feed was found by the index rather than the feed's + internal timestamp. + + + Similar data can also be retrieved using the API endpoint [recent/data](#get-/recent/data). + + + Access at: https://tracking.podcastindex.org/current + + + The prior 24 hours of data (going backwards until all tracked data is received) can be accessed using the timestamp + of the previous data set. This is found in the `previousTrackingUrl`. + The format of these prior data sets follows the format described below. + operationId: current + security: [] + servers: + - url: https://tracking.podcastindex.org + description: Podcast Index Tracking + responses: + '200': + $ref: '#/components/responses/static_current' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/tracking/feedValueBlocks: + get: + tags: + - Static Data + summary: Feed Value Blocks + description: | + Get all feeds with value blocks. + + + Access at: https://tracking.podcastindex.org/feedValueBlocks.json + operationId: feedValueBlocks.json + security: [] + servers: + - url: https://tracking.podcastindex.org + description: Podcast Index Tracking + responses: + '200': + $ref: '#/components/responses/static_tracking_feed_value_blocks' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/tracking/episodeValueBlocks: + get: + tags: + - Static Data + summary: Episode Value Blocks + description: | + Get all episodes with value blocks. + + + Access at: https://tracking.podcastindex.org/episodeValueBlocks.json + operationId: episodeValueBlocks.json + security: [] + servers: + - url: https://tracking.podcastindex.org + description: Podcast Index Tracking + responses: + '200': + $ref: '#/components/responses/static_tracking_episode_value_blocks' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/public/podcastindex_dead_feeds.csv: + get: + tags: + - Static Data + summary: Dead Feeds + description: | + Lists all feed Ids that have been marked dead in the Podcast Index database. The list is updated every X hours. + + + A subset of stats can be retrieved using the API endpoint [podcasts/dead](#get-/podcasts/dead). + + + Download from: https://public.podcastindex.org/podcastindex_dead_feeds.csv + operationId: podcastindex_dead_feeds.csv + security: [] + servers: + - url: https://public.podcastindex.org + description: Podcast Index Public + responses: + '200': + $ref: '#/components/responses/static_dead_feeds' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' + /static/public/podcastindex_feeds.db.tgz: + get: + tags: + - Static Data + summary: Feeds Database + description: | + Compressed database of all non-dead feeds in the Podcast Index database. + + + Updated daily. Some attributes excluded. No episodes included. + + + Download from: https://public.podcastindex.org/podcastindex_feeds.db.tgz + operationId: podcastindex_feeds_db.tgz + security: [] + servers: + - url: https://public.podcastindex.org + description: Podcast Index Public + responses: + '200': + $ref: '#/components/responses/static_feeds_db' + '400': + $ref: '#/components/responses/400_static' + '404': + $ref: '#/components/responses/404' components: securitySchemes: User-Agent: @@ -1964,6 +2308,17 @@ components: schema: type: string example: https://op3.dev/e/mp3s.nashownotes.com/NA-1551-2023-04-30-Final.mp3 + newest: + name: newest + in: query + description: | + If present, returns only the most recent (newest) episode for each specified feed id. + + + Parameter shall not have a value + schema: + type: boolean + allowEmptyValue: true id_episode_pi: name: id in: query @@ -2618,9 +2973,9 @@ components: example: 0 imageUrlHash: description: | - A CRC32 hash of the `image` URL with the protocol (`http://`, `https://`) removed. + A CRC32 hash of the `image` URL with the protocol (`http://`, `https://`) removed. 64bit integer. type: integer - example: 1639321931 + example: 3969216649 newestItemPublishTime: description: | The time the most recent episode in the feed was published. @@ -2831,7 +3186,7 @@ components: description: | This tag is used to link to a transcript or closed captions file. Multiple tags can be present for multiple transcript formats. - Detailed file format information and example files are [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/transcripts/transcripts.md). + Detailed file format information and example files are [here](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/tags/transcript.md). type: object properties: url: @@ -3445,6 +3800,145 @@ components: type: array items: $ref: '#/components/schemas/feed_dead' + podcasts_batch_byguid: + description: | + JSON array of feed GUIDs + type: array + items: + type: string + example: + - 917393e3-1b1e-5cef-ace4-edaa54e1f810 + - c73b1a23-1c28-5edb-94c3-10d1745d0877 + allfound: + description: | + Indicates if data was found for all `podcastguid` and `episodeguid` values. + type: boolean + example: true + found: + description: | + Number of value data returned. + type: integer + example: 4 + inPollingQueue: + description: | + Indicates if feed is currently scheduled to be polled/checked for new episodes. + type: integer + nullable: true + example: 1 + priority: + description: | + How often the feed is checked for updates and new episodes + + A value of -1 means never check. A value of 5 means check the most. + type: integer + enum: + - -1 + - 0 + - 1 + - 2 + - 3 + - 4 + - 5 + example: 5 + createdOn: + description: | + The first time the feed was seen by Podcast Index + type: integer + format: Unix Epoch + example: 1613394034 + valueBlock: + description: | + Information for supporting the podcast via one of the "Value for Value" methods. May not be reported. + + + Value is a string of JSON data representing the feed value block data. + + + Examples: + - `lightning` value type: https://api.podcastindex.org/api/1.0/podcasts/byfeedid?id=169991&pretty + - `webmonetization` value type: https://api.podcastindex.org/api/1.0/podcasts/byfeedid?id=779873&pretty + type: string + feed_podcast_batch: + description: | + Known details of podcast feed + type: object + properties: + id: + $ref: '#/components/schemas/id_feed' + title: + $ref: '#/components/schemas/title_feed' + url: + $ref: '#/components/schemas/url_feed' + originalUrl: + $ref: '#/components/schemas/originalUrl' + link: + $ref: '#/components/schemas/link_feed' + description: + $ref: '#/components/schemas/description_feed' + author: + $ref: '#/components/schemas/author' + ownerName: + $ref: '#/components/schemas/ownerName' + image: + $ref: '#/components/schemas/image_feed' + artwork: + $ref: '#/components/schemas/artwork' + lastUpdateTime: + $ref: '#/components/schemas/lastUpdateTime' + lastCrawlTime: + $ref: '#/components/schemas/lastCrawlTime' + lastParseTime: + $ref: '#/components/schemas/lastParseTime' + inPollingQueue: + $ref: '#/components/schemas/inPollingQueue' + priority: + $ref: '#/components/schemas/priority' + lastGoodHttpStatusTime: + $ref: '#/components/schemas/lastGoodHttpStatusTime' + lastHttpStatus: + $ref: '#/components/schemas/lastHttpStatus' + contentType: + $ref: '#/components/schemas/contentType' + itunesId: + $ref: '#/components/schemas/itunesId_feed' + generator: + $ref: '#/components/schemas/generator' + createdOn: + $ref: '#/components/schemas/createdOn' + language: + $ref: '#/components/schemas/language' + type: + $ref: '#/components/schemas/type' + dead: + $ref: '#/components/schemas/dead' + crawlErrors: + $ref: '#/components/schemas/crawlErrors' + parseErrors: + $ref: '#/components/schemas/parseErrors' + categories: + $ref: '#/components/schemas/categories' + locked: + $ref: '#/components/schemas/locked' + explicit: + $ref: '#/components/schemas/explicit_feed' + podcastGuid: + $ref: '#/components/schemas/podcastguid' + medium: + $ref: '#/components/schemas/medium_feed' + episodeCount: + $ref: '#/components/schemas/episodeCount' + imageUrlHash: + $ref: '#/components/schemas/imageUrlHash' + newestItemPubdate: + $ref: '#/components/schemas/newestItemPublishTime' + valueBlock: + $ref: '#/components/schemas/valueBlock' + feeds_batch: + description: | + List of feeds with matching GUID + type: array + items: + $ref: '#/components/schemas/feed_podcast_batch' datePublishedPretty: description: | The date and time the episode was published formatted as a human readable string. @@ -4446,49 +4940,62 @@ components: type: array items: $ref: '#/components/schemas/value_byepisodeguid_batch' - allfound: + feedCountTotal: description: | - Indicates if data was found for all `podcastguid` and `episodeguid` values. - type: boolean - example: true - found: + Total podcast feeds in the index. + type: integer + example: 4257865 + episodeCountTotal: description: | - Number of value data returned. + Total individual podcast episodes in the index. type: integer - example: 4 + example: 143953477 + feedsWithNewEpisodes3days: + description: | + Podcast feeds with a new episode released in the last 3 days. + type: integer + example: 97522 + feedsWithNewEpisodes10days: + description: | + Podcast feeds with a new episode released in the last 10 days. + type: integer + example: 212322 + feedsWithNewEpisodes30days: + description: | + Podcast feeds with a new episode released in the last 30 days. + type: integer + example: 306748 + feedsWithNewEpisodes90days: + description: | + Podcast feeds with a new episode released in the last 90 days. + type: integer + example: 436933 + feedsWithValueBlocks: + description: | + Podcast feeds with a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + tag in at least 1 episode. + type: integer + example: 21916 stats: description: | An array statistic properties type: object properties: feedCountTotal: - description: Total podcast feeds in the index. - type: integer - example: 4048514 + $ref: '#/components/schemas/feedCountTotal' episodeCountTotal: - description: Total individual podcast episodes in the index. - type: integer - example: 112890355 + $ref: '#/components/schemas/episodeCountTotal' feedsWithNewEpisodes3days: - description: Podcast feeds with a new episode released in the last 3 days. - type: integer - example: 87369 + $ref: '#/components/schemas/feedsWithNewEpisodes3days' feedsWithNewEpisodes10days: - description: Podcast feeds with a new episode released in the last 10 days. - type: integer - example: 242922 + $ref: '#/components/schemas/feedsWithNewEpisodes10days' feedsWithNewEpisodes30days: - description: Podcast feeds with a new episode released in the last 30 days. - type: integer - example: 352744 + $ref: '#/components/schemas/feedsWithNewEpisodes30days' feedsWithNewEpisodes90days: - description: Podcast feeds with a new episode released in the last 90 days. - type: integer - example: 478568 + $ref: '#/components/schemas/feedsWithNewEpisodes90days' feedsWithValueBlocks: - description: Podcast feeds with a value block - type: integer - example: 9772 + $ref: '#/components/schemas/feedsWithValueBlocks' id_category: description: | The internal PodcastIndex.org category ID. @@ -4521,6 +5028,169 @@ components: - 'true' - 'false' example: 'true' + feedsWithNewEpisodes7days: + description: | + Podcast feeds with a new episode released in the last 7 days. + type: integer + example: 179043 + feedsWithNewEpisodes14days: + description: | + Podcast feeds with a new episode released in the last 14 days. + type: integer + example: 239664 + feedsWithNewEpisodes60days: + description: | + Podcast feeds with a new episode released in the last 60 days. + type: integer + example: 382945 + paidFeedsWithNewEpisodes3days: + description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 3 days. + type: integer + example: 77638 + paidFeedsWithNewEpisodes7days: + description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 7 days. + type: integer + example: 140275 + paidFeedsWithNewEpisodes10days: + description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 10 days. + type: integer + example: 165789 + paidFeedsWithNewEpisodes14days: + description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 14 days. + type: integer + example: 186602 + paidFeedsWithNewEpisodes30days: + description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 30 days. + type: integer + example: 237389 + paidFeedsWithNewEpisodes60days: + description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 60 days. + type: integer + example: 77632 + paidFeedsWithNewEpisodes90days: + description: | + Podcast feeds with a new episode containing a + [`podcast:value`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#value) + block released in the last 90 days. + type: integer + example: 335380 + newEpisodes3days: + description: | + Podcast feeds with a new episode containing a released in the last 3 days. + type: integer + example: 212324 + newEpisodes7days: + description: | + Podcast feeds with a new episode containing a released in the last 7 days. + type: integer + example: 442061 + newEpisodes10days: + description: | + Podcast feeds with a new episode containing a released in the last 10 days. + type: integer + example: 684833 + newEpisodes14days: + description: | + Podcast feeds with a new episode containing a released in the last 14 days. + type: integer + example: 907203 + newEpisodes30days: + description: | + Podcast feeds with a new episode containing a released in the last 30 days. + type: integer + example: 1901547 + newEpisodes60days: + description: | + Podcast feeds with a new episode containing a released in the last 60 days. + type: integer + example: 3710750 + newEpisodes90days: + description: | + Podcast feeds with a new episode containing a released in the last 90 days. + type: integer + example: 5498580 + feedsWithFundingTag: + description: | + Podcast feeds with a + [`podcast:funding`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#funding) + tag in at least 1 episode. + type: integer + example: 57582 + feedsWithTranscripts: + description: | + Podcast feeds with a + [`podcast:transcript`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#transcript) + tag in at least 1 episode. + type: integer + example: 61385 + episodesWithTranscripts: + description: | + Episodes with a + [`podcast:transcript`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#transcript) + tag. + type: integer + example: 3198597 + feedsWithChapters: + description: | + Podcast feeds with a + [`podcast:chapters`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#chapters) + tag in at least 1 episode. + type: integer + example: 35582 + episodesWithChapters: + description: | + Number of episodes with [`podcast:chapters`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#chapters) + type: integer + example: 652781 + feedsWithMediumMusic: + description: | + Podcast feeds with a + [`podcast:medium`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#medium) + tag with a value of `music`. + type: integer + example: 3700 + feedsWithMediumVideo: + description: | + Podcast feeds with a + [`podcast:medium`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#medium) + tag with a value of `video`. + type: integer + example: 1288 + data_static: + description: | + Object containing the recent data + type: object + properties: + nextSince: + description: | + Value of `since` in next block of data + type: integer + format: Unix Epoch + example: 1613805249 + position: + $ref: '#/components/schemas/position' + feeds: + $ref: '#/components/schemas/feeds_data' + items: + $ref: '#/components/schemas/items_data' responses: '400': description: Invalid request @@ -4543,6 +5213,8 @@ components: schema: type: string example: Authorization header value either not set or blank. + '404': + description: Not found itunes_replacement: description: Success content: @@ -4718,6 +5390,23 @@ components: $ref: '#/components/schemas/count' description: $ref: '#/components/schemas/description_response' + podcasts_batch_byguid: + description: Success + content: + application/json: + schema: + type: object + properties: + status: + $ref: '#/components/schemas/status' + allFound: + $ref: '#/components/schemas/allfound' + found: + $ref: '#/components/schemas/found' + feeds: + $ref: '#/components/schemas/feeds_batch' + description: + $ref: '#/components/schemas/description_response' episodes_byfeedid: description: Success content: @@ -5097,3 +5786,355 @@ components: $ref: '#/components/schemas/status' description: $ref: '#/components/schemas/description_response' + static_stats_counts: + description: Object containing the statistics for the Podcast Index feed data + content: + application/json: + schema: + type: object + properties: + feedCountTotal: + $ref: '#/components/schemas/feedCountTotal' + episodeCountTotal: + $ref: '#/components/schemas/episodeCountTotal' + feedsWithNewEpisodes3days: + $ref: '#/components/schemas/feedsWithNewEpisodes3days' + feedsWithNewEpisodes7days: + $ref: '#/components/schemas/feedsWithNewEpisodes7days' + feedsWithNewEpisodes10days: + $ref: '#/components/schemas/feedsWithNewEpisodes10days' + feedsWithNewEpisodes14days: + $ref: '#/components/schemas/feedsWithNewEpisodes14days' + feedsWithNewEpisodes30days: + $ref: '#/components/schemas/feedsWithNewEpisodes30days' + feedsWithNewEpisodes60days: + $ref: '#/components/schemas/feedsWithNewEpisodes60days' + feedsWithNewEpisodes90days: + $ref: '#/components/schemas/feedsWithNewEpisodes90days' + paidFeedsWithNewEpisodes3days: + $ref: '#/components/schemas/paidFeedsWithNewEpisodes3days' + paidFeedsWithNewEpisodes7days: + $ref: '#/components/schemas/paidFeedsWithNewEpisodes7days' + paidFeedsWithNewEpisodes10days: + $ref: '#/components/schemas/paidFeedsWithNewEpisodes10days' + paidFeedsWithNewEpisodes14days: + $ref: '#/components/schemas/paidFeedsWithNewEpisodes14days' + paidFeedsWithNewEpisodes30days: + $ref: '#/components/schemas/paidFeedsWithNewEpisodes30days' + paidFeedsWithNewEpisodes60days: + $ref: '#/components/schemas/paidFeedsWithNewEpisodes60days' + paidFeedsWithNewEpisodes90days: + $ref: '#/components/schemas/paidFeedsWithNewEpisodes90days' + newEpisodes3days: + $ref: '#/components/schemas/newEpisodes3days' + newEpisodes7days: + $ref: '#/components/schemas/newEpisodes7days' + newEpisodes10days: + $ref: '#/components/schemas/newEpisodes10days' + newEpisodes14days: + $ref: '#/components/schemas/newEpisodes14days' + newEpisodes30days: + $ref: '#/components/schemas/newEpisodes30days' + newEpisodes60days: + $ref: '#/components/schemas/newEpisodes60days' + newEpisodes90days: + $ref: '#/components/schemas/newEpisodes90days' + feedsWithValueBlocks: + $ref: '#/components/schemas/feedsWithValueBlocks' + feedsWithFundingTag: + $ref: '#/components/schemas/feedsWithFundingTag' + feedsWithTranscripts: + $ref: '#/components/schemas/feedsWithTranscripts' + episodesWithTranscripts: + $ref: '#/components/schemas/episodesWithTranscripts' + feedsWithChapters: + $ref: '#/components/schemas/feedsWithChapters' + episodesWithChapters: + $ref: '#/components/schemas/episodesWithChapters' + feedsWithMediumMusic: + $ref: '#/components/schemas/feedsWithMediumMusic' + feedsWithMediumVideo: + $ref: '#/components/schemas/feedsWithMediumVideo' + 400_static: + description: Invalid request + content: + application/xml: + schema: + type: object + properties: + Error: + type: object + properties: + Code: + type: string + RequestId: + type: string + HostId: + type: string + example: + status: 'false' + description: Invalid parameters + static_sats_data: + description: Object containing the number of sats, transactions, and senders. + content: + application/json: + schema: + type: object + properties: + sats: + description: Array of sats seen in transactions on the specified date (x) + type: array + items: + type: object + properties: + x: + description: Date in YYYY-M-D format. + type: string + example: 2024-5-24 + 'y': + description: Number of sats transacted + type: integer + example: 629594 + senders: + description: Array of senders (supporters) seen in transactions on the specified date (x) + type: array + items: + type: object + properties: + x: + description: Date in YYYY-M-D format. + type: string + example: 2024-5-24 + 'y': + description: Number of senders + type: integer + example: 238 + txs: + description: Array of transactions on the specified date (x) + type: array + items: + type: object + properties: + x: + description: Date in YYYY-M-D format. + type: string + example: 2024-5-24 + 'y': + description: Number of transactions + type: integer + example: 8212 + colors: + description: Colors used in graphs + type: object + properties: + txcolor: + type: string + example: '#ff3333' + color14: + type: string + example: '#9370db' + color30: + type: string + example: '#58d68d' + color60: + type: string + example: '#0088cc' + color7: + type: string + example: '#fffa90' + color90: + type: string + example: '#ff8800' + static_music_json: + description: The hourly Top X music + content: + application/json: + schema: + type: object + properties: + title: + description: Title of music + type: string + example: Podcasting 2.0 Top 100 (Music) + description: + description: Description of object + type: string + example: An hourly Top 100 music playlist. + timestamp: + description: Date updated + type: integer + example: 1724465107 + items: + description: Array of top X music feeds + type: object + properties: + rank: + description: Rank in chart + type: integer + example: 1 + boosts: + description: Number of boosts + type: string + example: '42' + title: + description: Title of Track + type: string + example: To be in Nashville + image: + $ref: '#/components/schemas/image_episode' + feedId: + $ref: '#/components/schemas/id_feed' + feedUrl: + $ref: '#/components/schemas/url_feed' + feedGuid: + $ref: '#/components/schemas/podcastguid' + itemGuid: + $ref: '#/components/schemas/guid' + static_music_opml: + description: | + The hourly Top X music + + + Data follows the [OPML spec](https://opml.org/spec2.opml) with additions of + [Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md) attributes. + + + Example `outline` entry: + + ```xml + + ``` + + Attributes: + + - `text` + - Title of Track + - Example: `"To be in Nashville"` + - `xmlUrl` + - Feed URL track is in + - Example: `"https://files.heycitizen.xyz/Songs/Albums/The-Heycitizen-Experience/the heycitizen experience.xml"` + - `podcast:feedGuid` + - The GUID from the `podcast:guid` tag in the feed. This value is a unique, global identifier for the podcast. + - See the namespace spec for [guid](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#guid) for details. + - Example: `"a2d2e313-9cbd-5169-b89c-ab07b33ecc33"` + - `podcast:itemGuid` + - The unique identifier for the episode + - Example: `"ac34129c-c78a-463e-a64f-01405e1f2be4"` + content: + application/xml: + schema: + type: object + static_music_rss: + description: | + The hourly Top X music + + + Data follows the RSS XML spec with additions of + [Podcast Namespace](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md) attributes. + + + The [`podcast:remoteItem`](https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md#remote-item) + is used to reference the episodes in the music chart. + content: + application/rss+xml: + schema: + type: object + static_current: + description: | + The feed and episode data seen by the Podcast Index. + content: + application/json: + schema: + type: object + properties: + status: + $ref: '#/components/schemas/status' + feedCount: + $ref: '#/components/schemas/feedCount' + itemCount: + $ref: '#/components/schemas/itemCount' + max: + $ref: '#/components/schemas/max' + since: + $ref: '#/components/schemas/since' + previousTrackingUrl: + description: URL to previous set of data + type: string + example: https://tracking.podcastindex.org/1724468201 + data: + $ref: '#/components/schemas/data_static' + static_tracking_feed_value_blocks: + description: Array of episodes containing value blocks + content: + application/json: + schema: + type: array + items: + type: object + properties: + id: + $ref: '#/components/schemas/id_feed' + itunesId: + $ref: '#/components/schemas/itunesId_feed' + podcastGuid: + $ref: '#/components/schemas/podcastguid' + url: + $ref: '#/components/schemas/url_feed' + value: + $ref: '#/components/schemas/value' + valueCreatedOn: + $ref: '#/components/schemas/valueCreatedOn' + static_tracking_episode_value_blocks: + description: Array of episodes containing value blocks + content: + application/json: + schema: + type: array + items: + type: object + properties: + episodeGuid: + $ref: '#/components/schemas/guid' + episodeId: + $ref: '#/components/schemas/id_episode' + feedId: + $ref: '#/components/schemas/id_feed' + feedUrl: + $ref: '#/components/schemas/url_feed' + itunesId: + $ref: '#/components/schemas/itunesId_feed' + podcastGuid: + $ref: '#/components/schemas/podcastguid' + value: + $ref: '#/components/schemas/value' + valueCreatedOn: + $ref: '#/components/schemas/valueCreatedOn' + static_dead_feeds: + description: | + Feed Ids in CSV file format. + + + Each row is the feed id. No Header. + + + Example: + + + ```csv + 3, + 38, + 43, + 45, + 56, + ``` + content: + application/csv: + schema: + type: object + static_feeds_db: + description: | + Podcast Index Feeds Database + content: + application/gzip: + schema: + type: object diff --git a/package.json b/package.json index f790c3c..1fe2b4a 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.12.1", "private": true, "devDependencies": { - "@redocly/cli": "^1.10.6", + "@redocly/cli": "^1.21.0", "copyfiles": "^2.4.1", "http-server": "^14.1.1", "livereload": "^0.9.3", diff --git a/yarn.lock b/yarn.lock index f429941..5ba618c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1572,6 +1572,23 @@ __metadata: languageName: node linkType: hard +"@cfaester/enzyme-adapter-react-18@npm:^0.8.0": + version: 0.8.0 + resolution: "@cfaester/enzyme-adapter-react-18@npm:0.8.0" + dependencies: + enzyme-shallow-equal: "npm:^1.0.0" + function.prototype.name: "npm:^1.1.6" + has: "npm:^1.0.4" + react-is: "npm:^18.2.0" + react-shallow-renderer: "npm:^16.15.0" + peerDependencies: + enzyme: ^3.11.0 + react: ">=18" + react-dom: ">=18" + checksum: 10/f21a82083dc4a670749824cf27fc3640df9189144b2197d3531110efa020f45137c3ab4ba6ffa8fac8a124fb3e351a20f3628f4d767802342a636fefb3c2e45f + languageName: node + linkType: hard + "@emotion/is-prop-valid@npm:^1.2.1": version: 1.2.1 resolution: "@emotion/is-prop-valid@npm:1.2.1" @@ -1690,11 +1707,11 @@ __metadata: languageName: node linkType: hard -"@redocly/cli@npm:^1.10.6": - version: 1.10.6 - resolution: "@redocly/cli@npm:1.10.6" +"@redocly/cli@npm:^1.21.0": + version: 1.21.0 + resolution: "@redocly/cli@npm:1.21.0" dependencies: - "@redocly/openapi-core": "npm:1.10.6" + "@redocly/openapi-core": "npm:1.21.0" abort-controller: "npm:^3.0.0" chokidar: "npm:^3.5.1" colorette: "npm:^1.2.0" @@ -1705,9 +1722,10 @@ __metadata: handlebars: "npm:^4.7.6" mobx: "npm:^6.0.4" node-fetch: "npm:^2.6.1" + pluralize: "npm:^8.0.0" react: "npm:^17.0.0 || ^18.2.0" react-dom: "npm:^17.0.0 || ^18.2.0" - redoc: "npm:~2.1.3" + redoc: "npm:~2.1.5" semver: "npm:^7.5.2" simple-websocket: "npm:^9.0.0" styled-components: "npm:^6.0.7" @@ -1715,24 +1733,25 @@ __metadata: bin: openapi: bin/cli.js redocly: bin/cli.js - checksum: 10/a823a665861096c96edc24327b37955311666b23d94f63d1ede1d260a4e3cd2f8d89586207edf3c8e9d9296625e347ea09f6d464b2e56810a02bd6da3c1de054 + checksum: 10/46067b4d6d0cdfbd6e57d168f81a7e0bb9fc4c42bb3ce780d1c24d9abf82027199774e87cfeff4060ec32ee7f2eddf8eb696d395fbc50c4a3f79e5d8b1f8d6cf languageName: node linkType: hard -"@redocly/config@npm:^0.1.4": - version: 0.1.6 - resolution: "@redocly/config@npm:0.1.6" - checksum: 10/5bf099245ac9a955a0eb4649f6996575142932de7eb1f276b9c0cb738bb42e9e58de4872cdd6f28f413d12a40727b23a5beaca45d9d5076bbe40297024e0e620 +"@redocly/config@npm:^0.9.0": + version: 0.9.0 + resolution: "@redocly/config@npm:0.9.0" + checksum: 10/b74c1ad8d5128c1062c9dc14eacc71b5426709a4a0cb4fefcc6d16d088dd19d96967ffd4a869f455bb39d412525e786d1c1a1700dcfb72712d65caa3c740f834 languageName: node linkType: hard -"@redocly/openapi-core@npm:1.10.6": - version: 1.10.6 - resolution: "@redocly/openapi-core@npm:1.10.6" +"@redocly/openapi-core@npm:1.21.0, @redocly/openapi-core@npm:^1.4.0": + version: 1.21.0 + resolution: "@redocly/openapi-core@npm:1.21.0" dependencies: "@redocly/ajv": "npm:^8.11.0" - "@redocly/config": "npm:^0.1.4" + "@redocly/config": "npm:^0.9.0" colorette: "npm:^1.2.0" + https-proxy-agent: "npm:^7.0.4" js-levenshtein: "npm:^1.1.6" js-yaml: "npm:^4.1.0" lodash.isequal: "npm:^4.5.0" @@ -1740,25 +1759,7 @@ __metadata: node-fetch: "npm:^2.6.1" pluralize: "npm:^8.0.0" yaml-ast-parser: "npm:0.0.43" - checksum: 10/f20ed1ce6756f90f69866a92e9c8a5440749b4a610999f35af38603509abf34089cb8e825a9c09344792db0d4dfd8294d819021f408d350c43f65018fe1b65d9 - languageName: node - linkType: hard - -"@redocly/openapi-core@npm:^1.0.0-rc.2": - version: 1.1.0 - resolution: "@redocly/openapi-core@npm:1.1.0" - dependencies: - "@redocly/ajv": "npm:^8.11.0" - "@types/node": "npm:^14.11.8" - colorette: "npm:^1.2.0" - js-levenshtein: "npm:^1.1.6" - js-yaml: "npm:^4.1.0" - lodash.isequal: "npm:^4.5.0" - minimatch: "npm:^5.0.1" - node-fetch: "npm:^2.6.1" - pluralize: "npm:^8.0.0" - yaml-ast-parser: "npm:0.0.43" - checksum: 10/8fc55cc45687f7db8f4d1e09ed1a5c1f0cf3609b854e70f8ae24311d4ce546cd878844f8f800e6abe5b03bf0f53e11c5aa0866caef4216a711f90b00736f61de + checksum: 10/6fadc24482732a802be05aab7d4bc7b85325cca367bd6bf62b9dd47d95124f7b181e4695b0b3e534944687b07dfc6f7d09db427c00cd74607b41f69d83a6a6f6 languageName: node linkType: hard @@ -1776,13 +1777,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.11.8": - version: 14.14.31 - resolution: "@types/node@npm:14.14.31" - checksum: 10/0a76de64dfe0187adb29158c5752347c64e8b40b9e796020c9cdcfc5ed8faafff0971e67b413b62d1984e532a563264ecfa2dad5ec2fe85bb6eca80878f7a453 - languageName: node - linkType: hard - "@types/stylis@npm:^4.0.2": version: 4.2.0 resolution: "@types/stylis@npm:4.2.0" @@ -1815,6 +1809,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.0.2": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10/c478fec8f79953f118704d007a38f2a185458853f5c45579b9669372bd0e12602e88dc2ad0233077831504f7cd6fcc8251c383375bba5eaaf563b102938bda26 + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" @@ -2108,6 +2111,19 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10/cd6fe658e007af80985da5185bff7b55e12ef4c2b6f41829a26ed1eef254b1f1c12e3dfd5b2b068c6ba8b86aba62390842d81752e67dcbaec4f6f76e7113b6b7 + languageName: node + linkType: hard + "call-me-maybe@npm:^1.0.1": version: 1.0.2 resolution: "call-me-maybe@npm:1.0.2" @@ -2214,10 +2230,10 @@ __metadata: languageName: node linkType: hard -"classnames@npm:^2.3.1": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: 10/ba3151c12e8b6a84c64b340ab4259ad0408947652009314462d828e94631505989c6a7d7e796bec1d309be9295d3111b498ad18a9d533fe3e6f859e51e574cbb +"classnames@npm:^2.3.2": + version: 2.5.1 + resolution: "classnames@npm:2.5.1" + checksum: 10/58eb394e8817021b153bb6e7d782cfb667e4ab390cb2e9dac2fc7c6b979d1cc2b2a733093955fc5c94aa79ef5c8c89f11ab77780894509be6afbb91dddd79d15 languageName: node linkType: hard @@ -2250,10 +2266,10 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^1.1.0": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 10/5ded6f61f15f1fa0350e691ccec43a28b12fb8e64c8e94715f2a937bc3722d4c3ed41d6e945c971fc4dcc2a7213a43323beaf2e1c28654af63ba70c9968a8643 +"clsx@npm:^2.0.0": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10/cdfb57fa6c7649bbff98d9028c2f0de2f91c86f551179541cf784b1cfdc1562dcb951955f46d54d930a3879931a980e32a46b598acaea274728dbe068deca919 languageName: node linkType: hard @@ -2461,6 +2477,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.4": + version: 4.3.6 + resolution: "debug@npm:4.3.6" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10/d3adb9af7d57a9e809a68f404490cf776122acca16e6359a2702c0f462e510e91f9765c07f707b8ab0d91e03bad57328f3256f5082631cefb5393d0394d50fb7 + languageName: node + linkType: hard + "decko@npm:^1.2.0": version: 1.2.0 resolution: "decko@npm:1.2.0" @@ -2479,7 +2507,18 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": +"define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10/abdcb2505d80a53524ba871273e5da75e77e52af9e15b3aa65d8aad82b8a3a424dad7aee2cc0b71470ac7acf501e08defac362e8b6a73cdb4309f028061df4ae + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -2511,10 +2550,10 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^2.2.8": - version: 2.4.7 - resolution: "dompurify@npm:2.4.7" - checksum: 10/bf223b4608204b0f4ded4cad2e7711b9afbe4dc9646f645601463629484a6ccc83906571d24340c0df7776a147ceb6d42cc36697e514aa72c865662977164784 +"dompurify@npm:^3.0.6": + version: 3.1.6 + resolution: "dompurify@npm:3.1.6" + checksum: 10/036844bc9b717b172ba27f5863b56f950289a05d8eebfb702d6953bbf80bd021e480ce4217bd084567186f2d0ada13358ce5556963492cfe402d774e8667f120 languageName: node linkType: hard @@ -2548,6 +2587,16 @@ __metadata: languageName: node linkType: hard +"enzyme-shallow-equal@npm:^1.0.0": + version: 1.0.7 + resolution: "enzyme-shallow-equal@npm:1.0.7" + dependencies: + hasown: "npm:^2.0.0" + object-is: "npm:^1.1.5" + checksum: 10/ecbdf5a897ba33e699316f1456c7865b8140a6fc7916b700721964fe169e750be35f1fff5184a80e35b39e793523d678f4f4d12f48fce15145d206f5db01daa9 + languageName: node + linkType: hard + "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -2611,6 +2660,22 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10/f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10/96e65d640156f91b707517e8cdc454dd7d47c32833aa3e85d79f24f9eb7ea85f39b63e36216ef0114996581969b59fe609a94e30316b08f5f4df1d44134cf8d5 + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.2 resolution: "es-set-tostringtag@npm:2.0.2" @@ -2668,13 +2733,20 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.7": +"eventemitter3@npm:^4.0.0": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" checksum: 10/8030029382404942c01d0037079f1b1bc8fed524b5849c237b80549b01e2fc49709e1d0c557fa65ca4498fc9e24cff1475ef7b855121fcc15f9d61f93e282346 languageName: node linkType: hard +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5 + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -2864,6 +2936,19 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10/85bbf4b234c3940edf8a41f4ecbd4e25ce78e5e6ad4e24ca2f77037d983b9ef943fd72f00f3ee97a49ec622a506b67db49c36246150377efcda1c9eb03e5f06d + languageName: node + linkType: hard + "get-port-please@npm:^3.0.1": version: 3.1.1 resolution: "get-port-please@npm:3.1.1" @@ -3027,6 +3112,15 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10/2d8c9ab8cebb572e3362f7d06139a4592105983d4317e68f7adba320fe6ddfc8874581e0971e899e633fd5f72e262830edce36d5a0bc863dad17ad20572484b2 + languageName: node + linkType: hard + "has-proto@npm:^1.0.1": version: 1.0.1 resolution: "has-proto@npm:1.0.1" @@ -3066,6 +3160,13 @@ __metadata: languageName: node linkType: hard +"has@npm:^1.0.4": + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 10/c245f332fe78c7b6b8753857240ac12b3286f995f656a33c77e0f5baab7d0157e6ddb1c34940ffd2bffc51f75ede50cd8b29ff65c13e336376aca8cf3df58043 + languageName: node + linkType: hard + "hasown@npm:^2.0.0": version: 2.0.0 resolution: "hasown@npm:2.0.0" @@ -3169,6 +3270,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.4": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10/6679d46159ab3f9a5509ee80c3a3fc83fba3a920a5e18d32176c3327852c3c00ad640c0c4210a8fd70ea3c4a6d3a1b375bf01942516e7df80e2646bdc77658ab + languageName: node + linkType: hard + "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -3663,7 +3774,7 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.0.15": +"marked@npm:^4.3.0": version: 4.3.0 resolution: "marked@npm:4.3.0" bin: @@ -3842,35 +3953,37 @@ __metadata: languageName: node linkType: hard -"mobx-react-lite@npm:^3.4.0": - version: 3.4.3 - resolution: "mobx-react-lite@npm:3.4.3" +"mobx-react-lite@npm:^4.0.7": + version: 4.0.7 + resolution: "mobx-react-lite@npm:4.0.7" + dependencies: + use-sync-external-store: "npm:^1.2.0" peerDependencies: - mobx: ^6.1.0 + mobx: ^6.9.0 react: ^16.8.0 || ^17 || ^18 peerDependenciesMeta: react-dom: optional: true react-native: optional: true - checksum: 10/768ada82ab181330cf57562552c591065c57e59378cafe1a9d100660b1acf5d73fe9f5eeea8ea7b2adc5a87dd322bc1e119d853474c51e032021deef967b07e4 + checksum: 10/294754f8a3b44aa83ace02397530f059cce40dda09bdd546f0fca6b004be4dff2dfc6e180ab24686957e45d244408b08e13754cc74c3c2af3076f6ad0ecaa898 languageName: node linkType: hard -"mobx-react@npm:^7.2.0": - version: 7.6.0 - resolution: "mobx-react@npm:7.6.0" +"mobx-react@npm:^9.1.1": + version: 9.1.1 + resolution: "mobx-react@npm:9.1.1" dependencies: - mobx-react-lite: "npm:^3.4.0" + mobx-react-lite: "npm:^4.0.7" peerDependencies: - mobx: ^6.1.0 + mobx: ^6.9.0 react: ^16.8.0 || ^17 || ^18 peerDependenciesMeta: react-dom: optional: true react-native: optional: true - checksum: 10/33cdc54d44714c87a2fd50fa20ac84114d1032b20a4f1e5a1147c37aaca25147e43a4b970f7aded42ddd8f55c6b3d09d157be6019c8527381a7da161e5c9a45d + checksum: 10/61f2a9bb36417f4d88ef737520369ace1ca75865ad5ae5d90ae25e9febbf984d7855ec40a9bdbb7bf60942bfbb9cf9396da1019e83ffa71460cf776b53b1a2fe languageName: node linkType: hard @@ -4129,6 +4242,16 @@ __metadata: languageName: node linkType: hard +"object-is@npm:^1.1.5": + version: 1.1.6 + resolution: "object-is@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + checksum: 10/4f6f544773a595da21c69a7531e0e1d6250670f4e09c55f47eb02c516035cfcb1b46ceb744edfd3ecb362309dbccb6d7f88e43bf42e4d4595ac10a329061053a + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -4157,13 +4280,13 @@ __metadata: languageName: node linkType: hard -"openapi-sampler@npm:^1.3.1": - version: 1.3.1 - resolution: "openapi-sampler@npm:1.3.1" +"openapi-sampler@npm:^1.5.0": + version: 1.5.1 + resolution: "openapi-sampler@npm:1.5.1" dependencies: "@types/json-schema": "npm:^7.0.7" json-pointer: "npm:0.6.2" - checksum: 10/f180fd4d795c0e2d63f913d427c8503e8a94caf5d6c87970fca982dd66942399f601dece13938ca7786e9f264f61d9973362d496bb6d1640744b2ff73170e41e + checksum: 10/c0ba165447deaf8fd74d4d4d410acd32db5d7d30d96b0f5ff0f97795d76da5790097e4e73ecf86431aae7ce0bd9360f7ed10bc951130818394dd2ba9e77b05bd languageName: node linkType: hard @@ -4250,7 +4373,7 @@ __metadata: version: 0.0.0-use.local resolution: "pi_api_docs@workspace:." dependencies: - "@redocly/cli": "npm:^1.10.6" + "@redocly/cli": "npm:^1.21.0" copyfiles: "npm:^2.4.1" http-server: "npm:^14.1.1" livereload: "npm:^0.9.3" @@ -4302,12 +4425,12 @@ __metadata: languageName: node linkType: hard -"polished@npm:^4.1.3": - version: 4.2.2 - resolution: "polished@npm:4.2.2" +"polished@npm:^4.2.2": + version: 4.3.1 + resolution: "polished@npm:4.3.1" dependencies: "@babel/runtime": "npm:^7.17.8" - checksum: 10/da71b15c1e1d98b7f55e143bbf9ebb1b0934286c74c333522e571e52f89e42a61d7d44c5b4f941dc927355c7ae09780877aeb8f23707376fa9f006ab861e758b + checksum: 10/0902fe2eb16aecde1587a00efee7db8081b1331ac7bcfb6e61214d266388723a84858d732ad9395028e0aecd2bb8d0c39cc03d14b4c24c22329a0e40c38141eb languageName: node linkType: hard @@ -4340,7 +4463,7 @@ __metadata: languageName: node linkType: hard -"prismjs@npm:^1.27.0": +"prismjs@npm:^1.29.0": version: 1.29.0 resolution: "prismjs@npm:1.29.0" checksum: 10/2080db382c2dde0cfc7693769e89b501ef1bfc8ff4f8d25c07fd4c37ca31bc443f6133d5b7c145a73309dc396e829ddb7cc18560026d862a887ae08864ef6b07 @@ -4371,7 +4494,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.5.0, prop-types@npm:^15.7.2": +"prop-types@npm:^15.5.0, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -4426,6 +4549,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.2.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22 + languageName: node + linkType: hard + "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -4433,15 +4563,27 @@ __metadata: languageName: node linkType: hard -"react-tabs@npm:^4.3.0": - version: 4.3.0 - resolution: "react-tabs@npm:4.3.0" +"react-shallow-renderer@npm:^16.15.0": + version: 16.15.0 + resolution: "react-shallow-renderer@npm:16.15.0" + dependencies: + object-assign: "npm:^4.1.1" + react-is: "npm:^16.12.0 || ^17.0.0 || ^18.0.0" + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 10/06457fe5bcaa44aeca998905b6849304742ea1cc2d3841e4a0964c745ff392bc4dec07f8c779f317faacce3a0bf6f84e15020ac0fa81adb931067dbb0baf707b + languageName: node + linkType: hard + +"react-tabs@npm:^6.0.2": + version: 6.0.2 + resolution: "react-tabs@npm:6.0.2" dependencies: - clsx: "npm:^1.1.0" + clsx: "npm:^2.0.0" prop-types: "npm:^15.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-0 || ^18.0.0 - checksum: 10/5d6e25dc900fe82a7744cb8eb0b4f25a6e5df909e69f66a6216dadb18ec8392f95a97660aa19820bf4c25e3dc720fdce4a27ee475b046f79c97aebe2653884c2 + react: ^18.0.0 + checksum: 10/7bb3eebb75470515ec898a9f53fff2a1a21c92176f7b788e3ad1f5aa8f123d5323ba56eeabdc290dafaf116bbc9636844d95f500f2e32f001af9688d46d20434 languageName: node linkType: hard @@ -4521,30 +4663,31 @@ __metadata: languageName: node linkType: hard -"redoc@npm:~2.1.3": - version: 2.1.3 - resolution: "redoc@npm:2.1.3" +"redoc@npm:~2.1.5": + version: 2.1.5 + resolution: "redoc@npm:2.1.5" dependencies: - "@redocly/openapi-core": "npm:^1.0.0-rc.2" - classnames: "npm:^2.3.1" + "@cfaester/enzyme-adapter-react-18": "npm:^0.8.0" + "@redocly/openapi-core": "npm:^1.4.0" + classnames: "npm:^2.3.2" decko: "npm:^1.2.0" - dompurify: "npm:^2.2.8" - eventemitter3: "npm:^4.0.7" + dompurify: "npm:^3.0.6" + eventemitter3: "npm:^5.0.1" json-pointer: "npm:^0.6.2" lunr: "npm:^2.3.9" mark.js: "npm:^8.11.1" - marked: "npm:^4.0.15" - mobx-react: "npm:^7.2.0" - openapi-sampler: "npm:^1.3.1" + marked: "npm:^4.3.0" + mobx-react: "npm:^9.1.1" + openapi-sampler: "npm:^1.5.0" path-browserify: "npm:^1.0.1" perfect-scrollbar: "npm:^1.5.5" - polished: "npm:^4.1.3" - prismjs: "npm:^1.27.0" - prop-types: "npm:^15.7.2" - react-tabs: "npm:^4.3.0" + polished: "npm:^4.2.2" + prismjs: "npm:^1.29.0" + prop-types: "npm:^15.8.1" + react-tabs: "npm:^6.0.2" slugify: "npm:~1.4.7" stickyfill: "npm:^1.1.1" - swagger2openapi: "npm:^7.0.6" + swagger2openapi: "npm:^7.0.8" url-template: "npm:^2.0.8" peerDependencies: core-js: ^3.1.4 @@ -4552,7 +4695,7 @@ __metadata: react: ^16.8.4 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 styled-components: ^4.1.1 || ^5.1.1 || ^6.0.5 - checksum: 10/83cdc99c9f4035331fd062289f10c2df781b3d03e5153448079e26fd29af62ae6f877868f26610eae4c184297dadb6a6a002ee8931906c3a69ec78cba6119fde + checksum: 10/8641be6f54c467cd2c38e52d1ae8912f9c37b48ecc81fe2fa11c754331441c1c2b30449631f989de648b211ac0507b9a890c1dc1a9205c7c8a0b71d3799bd6cd languageName: node linkType: hard @@ -4841,6 +4984,20 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10/505d62b8e088468917ca4e3f8f39d0e29f9a563b97dbebf92f4bd2c3172ccfb3c5b8e4566d5fcd00784a00433900e7cb8fbc404e2dbd8c3818ba05bb9d4a8a6d + languageName: node + linkType: hard + "set-function-name@npm:^2.0.0": version: 2.0.1 resolution: "set-function-name@npm:2.0.1" @@ -5257,7 +5414,7 @@ __metadata: languageName: node linkType: hard -"swagger2openapi@npm:^7.0.6": +"swagger2openapi@npm:^7.0.8": version: 7.0.8 resolution: "swagger2openapi@npm:7.0.8" dependencies: @@ -5497,6 +5654,15 @@ __metadata: languageName: node linkType: hard +"use-sync-external-store@npm:^1.2.0": + version: 1.2.2 + resolution: "use-sync-external-store@npm:1.2.2" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10/671e9c190aab9a8374a5d468c6ba17f52c38b6fae970110bc196fc1e2b57204149aea9619be49a1bb5207fb6e51d8afd19c3bcb94afe61813fed039821461dc0 + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2"