{
  "openapi": "3.0.1",
  "info": {
    "title": "Changelog to JSON - Release Notes, GitHub Releases, npm & PyPI",
    "description": "For AI agents and developers upgrading a dependency: give a changelog page, GitHub repo or npm/PyPI package, get one JSON row per version with date and added / fixed / removed / breaking items, only versions newer than yours if you ask. On 41 real changelogs, 371 of 375 versions returned were real.",
    "version": "0.1",
    "x-build-id": "uaZgKSh1LHVmBtkX0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~changelog-to-json/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-changelog-to-json",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/neverempty~changelog-to-json/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-changelog-to-json",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/neverempty~changelog-to-json/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-changelog-to-json",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "urls": {
            "title": "Changelog page URLs",
            "type": "array",
            "description": "Changelog or release-notes pages, one per line: a CHANGELOG.md / HISTORY.md / CHANGES.rst file (a github.com/.../blob/... link is read as the raw file), a /changelog or /release-notes web page, or a single release-notes page. A github.com/owner/name link is read as a repository (see Repositories); an npmjs.com or pypi.org package link is read as that package. If no input field is filled at all, the example https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md is used (newest 3 versions).",
            "items": {
              "type": "string"
            }
          },
          "repos": {
            "title": "GitHub repositories",
            "type": "array",
            "description": "GitHub repositories as owner/name (for example facebook/react), one per line. Both the GitHub Releases list (official API) and the changelog file in the repository (CHANGELOG.md, CHANGES.md, HISTORY.md, NEWS.md, RELEASES.md, CHANGELOG.rst and similar) are read and matched by version; the source column says where each row came from. For a package inside a monorepo write owner/name/path/to/package to look for the changelog file there first.",
            "items": {
              "type": "string"
            }
          },
          "npmPackages": {
            "title": "npm packages",
            "type": "array",
            "description": "npm package names (for example react or @anthropic-ai/sdk). The package's repository is read from the npm registry and then handled like a GitHub repository (the changelog in the package's own folder first). The latest published version is added to every row as registryLatestVersion.",
            "items": {
              "type": "string"
            }
          },
          "pypiPackages": {
            "title": "PyPI packages",
            "type": "array",
            "description": "PyPI project names (for example django). PyPI's public release feed gives the newest 40 version numbers and upload times only, without release notes; give the project's GitHub repository in Repositories or its changelog URL in Changelog page URLs to get the notes.",
            "items": {
              "type": "string"
            }
          },
          "sinceVersion": {
            "title": "Only versions newer than",
            "type": "string",
            "description": "Return only versions greater than this one (for example 1.4.0 or v2.3.1), compared as version numbers (1.10.0 is newer than 1.9.0; a pre-release such as 2.0.0-rc.1 is older than 2.0.0). Rows without a version number are left out when this is set. A date-style API version such as 2024-09-30.acacia is compared by its date."
          },
          "sinceDate": {
            "title": "Only versions released after",
            "type": "string",
            "description": "Return only versions dated after this day (YYYY-MM-DD). Rows without a date are left out when this is set."
          },
          "maxVersions": {
            "title": "Max versions per input",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "At most this many versions per changelog, newest first (1 to 1,000). Each returned version is one charged row.",
            "default": 20
          },
          "includePrereleases": {
            "title": "Include pre-releases",
            "type": "boolean",
            "description": "Also return versions marked as pre-releases (alpha, beta, rc, canary, next, dev, nightly, or a GitHub release marked pre-release). Off by default.",
            "default": false
          },
          "includeUnreleased": {
            "title": "Include the Unreleased section",
            "type": "boolean",
            "description": "Also return an \"Unreleased\" / \"Upcoming\" section at the top of a changelog (isUnreleased is true on that row). Off by default.",
            "default": false
          },
          "includeBody": {
            "title": "Include the full notes text",
            "type": "boolean",
            "description": "Return the whole text of each version as Markdown in body (up to 20,000 characters). Turn off for smaller rows with only the sorted lists (added, fixed, breaking and the others).",
            "default": true
          },
          "returnWholeTextIfUnsplit": {
            "title": "Return the whole text when it cannot be split into versions",
            "type": "boolean",
            "description": "When a page has no heading with a version number or a date, return its whole text as one row (status unsplit, charged as one row) instead of a free row that says it could not be split.",
            "default": false
          },
          "onlyNewVersions": {
            "title": "Monitor mode: only versions not seen before",
            "type": "boolean",
            "description": "Return only versions that did not appear in the previous runs with the same watch name. The first run returns the newest versions (up to Max versions per input) and remembers every version on the page. A run with no new version returns a free row saying so and charges only the run start fee.",
            "default": false
          },
          "watchName": {
            "title": "Watch name",
            "type": "string",
            "description": "Name of the remembered state used to compare runs (letters, digits, dot, dash, underscore; up to 40). Setting it (or turning on monitor mode) fills changeType (first-check or new). Use a different name for each list you check on its own schedule. With monitor mode on and no name, the name \"default\" is used."
          },
          "resetMonitoringState": {
            "title": "Forget what this watch remembered",
            "type": "boolean",
            "description": "Start this watch over: forget the remembered versions before this run.",
            "default": false
          },
          "githubToken": {
            "title": "GitHub token (optional)",
            "type": "string",
            "description": "Optional. Without a token, GitHub allows about 60 API calls per hour for the IP address the run uses; this Actor checks the remaining allowance first (the check itself is free) and, when it is used up, reads only the changelog files and says so. A personal access token with no scopes raises the allowance to 5,000 per hour. It is sent only to api.github.com."
          },
          "maxConcurrency": {
            "title": "Inputs read at the same time",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many inputs are read in parallel (1 to 8).",
            "default": 4
          },
          "requestTimeoutSecs": {
            "title": "Time limit per request (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "How long to wait for one answer (5 to 60 seconds). HTTP 429, 500, 502, 503 and 504 are asked again up to two more times.",
            "default": 25
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}