{
  "openapi": "3.0.3",
  "info": {
    "title": "feedservice API",
    "description": "Hand-written Django API exposing RSS/JSON feeds, sitemaps, WebSub verification and the watch-backend entry search. There is no DRF; this document is generated manually from the URL configuration and served as OpenAPI 3.0.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.staging.quotidiano.net"
    }
  ],
  "tags": [
    {
      "name": "Compilations & Feeds",
      "description": "RSS and JSON feed delivery by Compilation."
    },
    {
      "name": "Sections",
      "description": "RSS feed delivery by Feed source (section)."
    },
    {
      "name": "Sitemaps",
      "description": "XML sitemaps (articles, images, videos, tag pages)."
    },
    {
      "name": "Watch backend",
      "description": "Entry search by tag, path, author, URL or latest."
    },
    {
      "name": "Ingestion",
      "description": "Ingestion triggers and reports."
    },
    {
      "name": "WebSub",
      "description": "WebSub hub verification status."
    },
    {
      "name": "Utility",
      "description": "Miscellaneous helpers."
    }
  ],
  "paths": {
    "/feedservice/compilations/": {
      "get": {
        "summary": "List all compilations",
        "description": "Return listing every Compilation ordered by last build date.",
        "tags": [
          "Compilations & Feeds"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "A JSON array of feed entry objects (parsed entry content).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/compilations/{compilation_id}/": {
      "get": {
        "summary": "Compilation detail (RSS)",
        "description": "Returns the RSS 2.0 feed of a single Compilation by primary key. Used to verify feed output.",
        "tags": [
          "Compilations & Feeds"
        ],
        "parameters": [
          {
            "name": "compilation_id",
            "in": "path",
            "required": true,
            "description": "Primary key of the Compilation.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Requested resource was not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/feed/{compilation_name}/": {
      "get": {
        "summary": "Compilation RSS feed by name",
        "description": "Returns the RSS 2.0 feed of a Compilation matched by name suffix. Mapped dynamically by nginx using the compilation name.",
        "tags": [
          "Compilations & Feeds"
        ],
        "parameters": [
          {
            "name": "compilation_name",
            "in": "path",
            "required": true,
            "description": "Name (or name suffix) of the Compilation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Requested resource was not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/jsonfeed/{compilation_name}/": {
      "get": {
        "summary": "Compilation JSON feed by name",
        "description": "Returns the ordered items of a Compilation as JSON.",
        "tags": [
          "Compilations & Feeds"
        ],
        "parameters": [
          {
            "name": "compilation_name",
            "in": "path",
            "required": true,
            "description": "Name (or name suffix) of the Compilation.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "JSON object wrapping the ordered feed items.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Requested resource was not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sections": {
      "get": {
        "summary": "List all sections (feed sources)",
        "description": "Renders an HTML page listing the names of every Feed source.",
        "tags": [
          "Sections"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "An HTML page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/section/{section_name}/": {
      "get": {
        "summary": "Section RSS feed",
        "description": "Returns the RSS 2.0 feed of the Feed whose source name matches `section_name` (last 50 entries ordered by published date).",
        "tags": [
          "Sections"
        ],
        "parameters": [
          {
            "name": "section_name",
            "in": "path",
            "required": true,
            "description": "Name of the Feed source.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Requested resource was not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sitemap/index/id/{idsitemap}": {
      "get": {
        "summary": "Sitemap index by id",
        "description": "Returns the sitemap index XML for a SitemapIndex primary key, listing day/week/month/year sitemap references for articles, images and videos.",
        "tags": [
          "Sitemaps"
        ],
        "parameters": [
          {
            "name": "idsitemap",
            "in": "path",
            "required": true,
            "description": "Primary key of the SitemapIndex.",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sitemap/index/{newspaper}": {
      "get": {
        "summary": "Sitemap index by newspaper",
        "description": "Returns the sitemap index XML for a wired newspaper, computed from the current year with day/week/month/year time ranges and the articles/images/videos object types.",
        "tags": [
          "Sitemaps"
        ],
        "parameters": [
          {
            "name": "newspaper",
            "in": "path",
            "required": true,
            "description": "Newspaper key (one of settings.WIRED_NEWSPAPERS).",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sitemap/generic/{newspaper_prefix}/{year}/{time_range}/sitemap.xml": {
      "get": {
        "summary": "Generic articles sitemap",
        "description": "Returns a generic articles sitemap (news + images) for the given newspaper prefix, year and time range. Served from the bucket when available, otherwise generated on the fly from the DB.",
        "tags": [
          "Sitemaps"
        ],
        "parameters": [
          {
            "name": "newspaper_prefix",
            "in": "path",
            "required": true,
            "description": "Newspaper prefix used in the bucket path.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "path",
            "required": true,
            "description": "Year (2020-2050).",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "time_range",
            "in": "path",
            "required": true,
            "description": "Time range window.",
            "schema": {
              "type": "string",
              "enum": [
                "day",
                "week",
                "month"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sitemap/{newspaper_prefix}/{obj_type}/{year}/{time_range}/sitemap.xml": {
      "get": {
        "summary": "Sitemap by object type and time range",
        "description": "Returns a sitemap for the given newspaper prefix, object type, year and time range. Served from the bucket when available, otherwise generated on the fly from the DB.",
        "tags": [
          "Sitemaps"
        ],
        "parameters": [
          {
            "name": "newspaper_prefix",
            "in": "path",
            "required": true,
            "description": "Newspaper prefix used in the bucket path.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "obj_type",
            "in": "path",
            "required": true,
            "description": "Object type.",
            "schema": {
              "type": "string",
              "enum": [
                "articles",
                "images",
                "videos"
              ]
            }
          },
          {
            "name": "year",
            "in": "path",
            "required": true,
            "description": "Year (2020-2050).",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "time_range",
            "in": "path",
            "required": true,
            "description": "Time range window.",
            "schema": {
              "type": "string",
              "enum": [
                "day",
                "week",
                "month",
                "year"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sitemap/{newspaper_prefix}/{obj_type}/{year}/{time_range}/sitemap_{pagenum}.xml": {
      "get": {
        "summary": "Paginated yearly sitemap",
        "description": "Returns one page of a yearly sitemap. Served from the bucket when available, otherwise generated on the fly from the DB.",
        "tags": [
          "Sitemaps"
        ],
        "parameters": [
          {
            "name": "newspaper_prefix",
            "in": "path",
            "required": true,
            "description": "Newspaper prefix used in the bucket path.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "obj_type",
            "in": "path",
            "required": true,
            "description": "Object type.",
            "schema": {
              "type": "string",
              "enum": [
                "articles",
                "images",
                "videos"
              ]
            }
          },
          {
            "name": "year",
            "in": "path",
            "required": true,
            "description": "Year (2020-2050).",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "time_range",
            "in": "path",
            "required": true,
            "description": "Time range window (typically 'year').",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "pagenum",
            "in": "path",
            "required": true,
            "description": "Page number (zero-based).",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sitemap/{newspaper_prefix}/videoreel": {
      "get": {
        "summary": "Video reel sitemap (latest)",
        "description": "Returns the video reel sitemap (9:16 format) for the latest day. Served from the bucket when available, otherwise generated on the fly from the DB (last 100 videos).",
        "tags": [
          "Sitemaps"
        ],
        "parameters": [
          {
            "name": "newspaper_prefix",
            "in": "path",
            "required": true,
            "description": "Newspaper prefix used in the bucket path.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sitemap/{newspaper_prefix}/videoreel/{year}/{month}/{day}": {
      "get": {
        "summary": "Video reel sitemap by date",
        "description": "Returns the video reel sitemap (9:16 format) for a specific date. Served from the bucket when available, otherwise generated on the fly from the DB.",
        "tags": [
          "Sitemaps"
        ],
        "parameters": [
          {
            "name": "newspaper_prefix",
            "in": "path",
            "required": true,
            "description": "Newspaper prefix used in the bucket path.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "year",
            "in": "path",
            "required": true,
            "description": "Year (2020-2050).",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "month",
            "in": "path",
            "required": true,
            "description": "Month (1-12).",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "day",
            "in": "path",
            "required": true,
            "description": "Day of month (1-31).",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/sitemap/tagpages/{newspaper}/{dimension}": {
      "get": {
        "summary": "Tag page sitemap",
        "description": "Returns a tag page sitemap (tag/person/organisation) for a wired newspaper. Takes an hourly snapshot from the TAGPAGE_ENDPOINT and caches the rendered XML.",
        "tags": [
          "Sitemaps"
        ],
        "parameters": [
          {
            "name": "newspaper",
            "in": "path",
            "required": true,
            "description": "Newspaper key.",
            "schema": {
              "type": "string",
              "enum": [
                "qn",
                "carlino",
                "nazione",
                "giorno"
              ]
            }
          },
          {
            "name": "dimension",
            "in": "path",
            "required": true,
            "description": "Tag dimension.",
            "schema": {
              "type": "string",
              "enum": [
                "tag",
                "person",
                "organisation",
                "organization"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "An XML document (RSS feed or sitemap).",
            "content": {
              "text/xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              },
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Wrong newspaper or dimension.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/latest-entries/": {
      "get": {
        "summary": "Latest entries",
        "description": "Returns the latest entries published in the last 14 days as a JSON array. Only entries carrying a non-OG media_content image are kept.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "description": "Index (zero-based) of the first entry to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          },
          {
            "name": "end",
            "in": "query",
            "description": "Index (zero-based) of the last entry to return (exclusive slice end).",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON array of feed entry objects (parsed entry content).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/entry/": {
      "get": {
        "summary": "Single entry by URL",
        "description": "Returns the parsed content of a single Entry matched by its `url` (article link). A trailing `-sck` suffix is stripped before lookup.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "The article link (Entry.link) to look up.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The parsed entry content, or an empty object if not found.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Missing or empty `url` parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/entries-by-tag/{tag_string}/": {
      "get": {
        "summary": "Entries by tag",
        "description": "Returns entries tagged with `tag_string` (last 14 days, deduplicated by link) as a JSON array.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [
          {
            "name": "tag_string",
            "in": "path",
            "required": true,
            "description": "The tag string to filter by.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "start",
            "in": "query",
            "description": "Index (zero-based) of the first entry to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          },
          {
            "name": "end",
            "in": "query",
            "description": "Index (zero-based) of the last entry to return (exclusive slice end).",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON array of feed entry objects (parsed entry content).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/entries-by-path/{path_string}/": {
      "get": {
        "summary": "Entries by path",
        "description": "Returns entries whose PathElement matches `path_string` (last 14 days, deduplicated by link) as a JSON array.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [
          {
            "name": "path_string",
            "in": "path",
            "required": true,
            "description": "The path string to filter by.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "start",
            "in": "query",
            "description": "Index (zero-based) of the first entry to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          },
          {
            "name": "end",
            "in": "query",
            "description": "Index (zero-based) of the last entry to return (exclusive slice end).",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON array of feed entry objects (parsed entry content).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/entries-by-author/{author_name}/": {
      "get": {
        "summary": "Entries by author",
        "description": "Returns entries authored by `author_name` (last 14 days, deduplicated by link) as a JSON array.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [
          {
            "name": "author_name",
            "in": "path",
            "required": true,
            "description": "The author name to filter by.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "start",
            "in": "query",
            "description": "Index (zero-based) of the first entry to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          },
          {
            "name": "end",
            "in": "query",
            "description": "Index (zero-based) of the last entry to return (exclusive slice end).",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON array of feed entry objects (parsed entry content).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/entries-by-parameters/": {
      "get": {
        "summary": "Entries by combined parameters",
        "description": "Returns entries (last 14 days) filtered by any combination of `path`, `tag` and `author` query parameters. Each accepts multiple values. At least one of the three must be present.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "description": "Index (zero-based) of the first entry to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0
            }
          },
          {
            "name": "end",
            "in": "query",
            "description": "Index (zero-based) of the last entry to return (exclusive slice end).",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "minimum": 1
            }
          },
          {
            "name": "path",
            "in": "query",
            "required": false,
            "description": "One or more path strings (repeat the parameter).",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "description": "One or more tag strings (repeat the parameter).",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "author",
            "in": "query",
            "required": false,
            "description": "One or more author names (repeat the parameter).",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A JSON array of feed entry objects (parsed entry content).",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object"
                  }
                }
              }
            }
          },
          "400": {
            "description": "A provided parameter is empty.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/tags/": {
      "get": {
        "summary": "List all tags",
        "description": "Returns every Tag that has at least one entry, each with its tag string and the relative URL of the entries-by-tag endpoint.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Object with a `tags` array and a `count`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/paths/": {
      "get": {
        "summary": "List all paths",
        "description": "Returns every PathElement that has entries, each with its path string and the relative URL of the entries-by-path endpoint.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Object with a `paths` array and a `count`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/authors/": {
      "get": {
        "summary": "List all authors",
        "description": "Returns every Author that has at least one entry, each with its name and the relative URL of the entries-by-author endpoint.",
        "tags": [
          "Watch backend"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Object with an `authors` array and a `count`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/ingestion/updateall": {
      "get": {
        "summary": "Trigger ingestion update for all compilations",
        "description": "Runs `update()` on every Compilation and renders an HTML report with the number of feeds and compilations processed, plus timing.",
        "tags": [
          "Ingestion"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "An HTML page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/checkwebsub": {
      "get": {
        "summary": "WebSub verification status",
        "description": "Renders an HTML page showing the WebSub verification status for each WebSubCheck, including the last compilation change time, check time and last fetch time.",
        "tags": [
          "WebSub"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "An HTML page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/feedservice/tz": {
      "get": {
        "summary": "Set the session timezone",
        "description": "GET renders a form to pick a timezone; POST stores it in the session and redirects back to the same page.",
        "tags": [
          "Utility"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "An HTML page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Set the session timezone",
        "description": "GET renders a form to pick a timezone; POST stores it in the session and redirects back to the same page.",
        "tags": [
          "Utility"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "An HTML page.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  }
}