CurseForge Projects, Anywhere.

Embed CurseForge project downloads anywhere on the web using widgets, and access project information programmatically through the JSON API to integrate automatic updates, content discovery and more into your projects.

724,072,240* requests served since 2013.

Create Widget or View API Documentation ▾

Create a Widget

Visit the page for a project and extract the project path from the url, e.g for More Swords Mod the path is minecraft/mc-mods/more-swords-mod.

Embed a widget on the Minecraft Forum using the widget BBCode, which accepts the project path and an optional version parameter.


Embed a widget on the web using an iframe, which accepts the project path and an optional version parameter.

<iframe src="" width="100%" style="border: none;"></iframe>


The CurseForge Widget API is available over https at Project details can be retrieved by making a GET request to this endpoint where the path of your request is a current or legacy CurseForge project path.


   "id": 227724,
   "game": "Minecraft",
   "type": "Modpacks",
   "urls": {...},
   "files": [...]
   "downloads": {...},
   "thumbnail": "...",
   "categories": [...],
   "created_at": "2015-02-10T18:10:29+00:00",
   "description": "...",
   "last_fetch": "2018-02-08T23:19:39+00:00",
   "download": {...}


Each response includes a download object which is one of the files available on the project. By default the download is the most recent file with a type of release, with a fallback to beta and then alpha if no acceptable file can be found.

An optional version parameter can be included when making a request, this will determine which file is used as the download. You may pass a version number, release type, file ID or a combination of version number and release type. For example:

When a request is made for a version that cannot be satisified the system will fall back to providing the most recent file as the download, except when the version is a number and release type, in that situation the system will try and satisfy the version number alone before falling back to the most recent file.


Each request response is a JSON document containing either project data or an error.

Project Data

Data is served from a local database which is populated by extracting data from CurseForge project pages. Project data is kept fresh by continually updating projects in order of most stale, allowing for maximum data freshness given the resources available. A consumer can determine data freshness using the last_fetch response value. At the time of loading this page the most stale project was updated 1 hour ago


Please be mindful that although there are no rate limits in place, this is a service offered at no cost and as such has limited resources. Aim to make no more than a few concurrent requests per second at peak, and get in touch to discuss options if you need to do anything heavier, as we may be able to find a more suitable solution that protects the service reliability while enabling your use case.

Backwards Compatibility

During the 5 years this service has been operating it has been through many iterations, some required by changes to CurseForge and others required to ensure service reliability. Although the API is always intended to be backwards compatible, there is the potential for breaking changes when data we offer is no longer available through CurseForge. API consumers should be mindful that it is possible that at some point in future data you depend on now may no longer be available and should integrate accordingly. For example, monthly download counts were removed by CurseForge in November 2017.

From 2013 — 2017 this service was available at, with API requests made by appending .json to widget URLs. Developers making use of this old format are encouraged to update their integrations to make use of the new request endpoint, however this is not required as the legacy URLs redirect and will do so indefinitely.


Please reach out via Private Message on or email —