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.

926,830,378* requests served since 2013.

Create Widget or View API Documentation ▾

Create a Widget

Visit the page for a project and get the project's ID, e.g for More Swords Mod the path is 59903.

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 2 hours 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 many 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.

From 2019, it served stale data due to the sell of MinecraftForum to MagicFind. Since 2019, caching has also been implemented on top of the API. Calls to the API will be cached for up to 2 minutes.

From 2020, the syncing process has been restored. However, not all data may be present due to the change in APIs used to gather this data. Following fields will no longer have accurate values due to the API changes:

New fields added:

As of April 11th, URLs which contain the Project ID in them (i.e /minecraft/mc-mods/12345) will resolve to the proper ID. This was done to ensure that if we could not determine the path, that there is always a way to do so. Also, urls which use the legacy format (mc-mods/minecraft) will now redirect to the correct path (minecraft/mc-mods).

As of January 1st, 2021, due to the transfer of CurseForge to Overwolf, the API will no longer be able to resolve paths to projects that do not contain the ID. As a result of this change, the following URL formats are the only ways to resolve a project.

Old URLs which were already resolved to a path will work as-is and will not change. New URLs without an ID in the path will fail to resolve and return a 404.

As of November 1st, 2021, 2 new endpoints have been added. Both endpoints return the same JSON structure. The new endpoints allow for getting bare author information. This only includes their id, username, and associated projects that CFWidget is aware of. If a project is missing, then a call to /{projectId} should be made to add the project to the author's list.

  "projects": [
      "id": 32274,
      "name": "JourneyMap"
      "id": 233577,
      "name": "AutoRun"
      "id": 224460,
      "name": "Enhanced Server Moderation"
      "id": 225341,
      "name": "JourneyMap Server"
  "username": "Mysticdrew",
  "id": 9422784


We now have a Discord! -

You can also reach out via Private Message on or email — [email protected]


All traffic is routed through Cloudflare, which follows the Cloudflare Privacy Policy. No identifiable information is logged or stored on the backend servers.