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.

Over 1 billion* 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 and loader parameter.

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

Embed an image anywhere using a PNG, which accepts the same parameters.


We now have a Discord! -


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 CurseForge project path or a project id.


   "id": 32274,
   "game": "minecraft",
   "type": "Mods",
   "urls": {...},
   "files": [...]
   "downloads": {...},
   "thumbnail": "...",
   "categories": [...],
   "created_at": "2011-09-19T23:49:04.217Z",
   "description": "...",
   "download": {...}

Author 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.


    "projects": [
            "name":"JourneyMap Server"


The CurseForge Widget API is available over https at An image representing basic data of the project and the latest file is available by passing the project id and any optional parameters.


Extra parameters can be provided to alter the image being generated.


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:

An optional loader parameter can be included when making a request. This will filter the download to only return a file who's versions also contain this loader. For example:

When a request is made for a version that cannot be satisfied 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 the CurseForge 3rd Party API. Project data is only updated when a call is made from a consumer to either authors or projects. A consumer can determine data freshness using the last_fetch response value.


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 and History

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.

As of May 11th, 2023, a new endpoint was added that allows rendering a simple widget as an image. URLs using will now return HTML data. If JSON is needed, use instead. The preferred endpoints to use will be and, where will return HTML and PNG data, while will return JSON data. This deployment also changed how the backend handles links. This should now avoid issues where paths would generate possibly cycles, and no longer should use redirects, as paths are simply resolved as-is and not redirected elsewhere.

As of June 29th, 2022, the way data is fetched has been changed. Projects and authors will only sync data when requested. This means a project who's not been queried in or has been cached for over an hour will have a longer response time while data is being refreshed. However, this should have no observable impact on the quality of the data. Project resolution is also now instant, where a 202 should not be returned except in rare circumstances.

As of April 1st, 2022, the ability to use the CurseForge path has been re-implemented due to changes by Overwolf. This means paths like /minecraft/mc-mods/journeymap can be resolved and linked to a project.

As of January 1st, 2022, the backend has been rewritten to support scalability and future changes. There was no changes to the API which would cause any forms of breaking, however functionality may feel different. Issues should be reported.

As of December 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

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).

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:

Since 2019, caching has also been implemented on top of the API. Calls to the API will be cached for up to 1 hour.

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.


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