Modgrade API

Two free JSON addresses: the grade and security result of the projects you ask for, and the list of the projects where we found malware. No key is needed. Any website can read them from the browser.

1. Project lookup

The grade and the security result of up to 100 projects per request, by Modrinth project id, CurseForge project id or file SHA-1. Separate several values with commas. You can mix the three. Use the Modrinth id (AANobbMI), not the slug (sodium): a slug is not found.

curl "https://modgrade.com/api/v1/projects?modrinth=AANobbMI,P7dR8mSH"
curl "https://modgrade.com/api/v1/projects?curseforge=394468"
curl "https://modgrade.com/api/v1/projects?sha1=<40 hex characters>"

An answer, shortened:

{
  "version": 1,
  "generated_at": "2026-10-24T20:00:00Z",
  "data_updated_at": "2026-10-24T18:59:17Z",
  "results": [
    {
      "query": "modrinth:AANobbMI",
      "found": true,
      "project": {
        "id": "mg_01m232r6303kss5prbhgy22dy4",
        "slug": "sodium",
        "type": "mod",
        "title": "Sodium",
        "url": "https://modgrade.com/mod/sodium",
        "grade": "A",
        "grade_note": null,
        "security": "passed",
        "malware_platforms": null,
        "malware_confirmed": null,
        "coverage": {
          "latest_files": 7,
          "checked": 7,
          "code_read": 7,
          "read_in_part": 0,
          "cannot_check": 0,
          "recent_versions_only": true
        },
        "modrinth_id": "AANobbMI",
        "curseforge_id": 394468
      },
      "malware_on_this_platform": false,
      "file": null
    },
    {
      "query": "curseforge:1",
      "found": false,
      "project": null,
      "malware_on_this_platform": null,
      "file": null
    }
  ],
  "terms": "Free to use. Credit \"Data: Modgrade\" with a link to the project's Modgrade page. No guarantee: ...",
  "docs": "https://modgrade.com/api"
}

In JavaScript:

const res = await fetch("https://modgrade.com/api/v1/projects?modrinth=AANobbMI,P7dR8mSH");
if (!res.ok) throw new Error((await res.json()).error);
const { results } = await res.json();

for (const r of results) {
  if (!r.found) continue;
  const p = r.project;
  // the grade, or why there is none, with a link to the page
  const label = p.grade ?? p.grade_note ?? "No grade";
  // block only malware confirmed on the platform the file comes from
  const block = r.malware_on_this_platform === true && p.malware_confirmed === true;
  const warn = p.security === "malware";
  console.log(p.title, label, p.url, block ? "block" : warn ? "warn" : "");
}

2. The malware feed

The feed lists the Minecraft projects where our checks found malware: the projects that Modgrade shows as Malware. Launchers, modpack indexes and other tools can use it to warn players or to hide these projects.

It lists nothing else: no grades, no warnings, no projects without malware.

curl "https://modgrade.com/api/v1/malware.json"

An answer with two projects, shortened. The names are made up.

{
  "version": 1,
  "generated_at": "2026-10-24T08:00:00Z",
  "count": 2,
  "projects": [
    {
      "id": "mg_0123abcd",
      "slug": "example-mod",
      "type": "mod",
      "title": "Example Mod",
      "url": "https://modgrade.com/mod/example-mod",
      "platforms": {
        "modrinth": { "id": "AbCd1234", "slug": "example-mod", "url": "https://modrinth.com/mod/example-mod", "removed": false, "has_malware": true },
        "curseforge": { "id": 123456, "slug": "example-mod", "url": "https://www.curseforge.com/minecraft/mc-mods/example-mod", "removed": false, "has_malware": false }
      },
      "malware_platforms": ["modrinth"],
      "confirmed": true,
      "does": "steals your Minecraft session and sends it to a web address",
      "affected_files": [
        {
          "sha1": "0a1b2c3d4e5f60718293a4b5c6d7e8f901234567",
          "file_name": "example-mod-1.2.0.jar",
          "version_name": "1.2.0",
          "published_at": "2026-10-12T09:30:00Z",
          "latest": true,
          "platforms": [{ "platform": "modrinth", "version_id": "XyZ98765" }]
        }
      ],
      "file_counts": { "with_malware": 1, "checked_without_malware": 4, "not_checked": 0 },
      "through_contained": false,
      "contained": [],
      "pack_own_files": [],
      "reports": [{ "platform": "modrinth", "date": "2026-10-13" }]
    },
    {
      "id": "mg_4567efgh",
      "slug": "example-pack",
      "type": "modpack",
      "title": "Example Pack",
      "url": "https://modgrade.com/modpack/example-pack",
      "platforms": {
        "modrinth": null,
        "curseforge": { "id": 654321, "slug": "example-pack", "url": "https://www.curseforge.com/minecraft/modpacks/example-pack", "removed": false, "has_malware": true }
      },
      "malware_platforms": ["curseforge"],
      "confirmed": true,
      "does": null,
      "affected_files": [],
      "file_counts": null,
      "through_contained": true,
      "contained": [
        {
          "id": "mg_0123abcd",
          "slug": "example-mod",
          "type": "mod",
          "title": "Example Mod",
          "url": "https://modgrade.com/mod/example-mod",
          "does": "steals your Minecraft session and sends it to a web address",
          "file_checked": true,
          "pack_file_names": []
        }
      ],
      "pack_own_files": [],
      "reports": []
    }
  ],
  "terms": "Free to use. Credit \"Data: Modgrade\" with a link to the project's Modgrade page. No guarantee: ...",
  "docs": "https://modgrade.com/api"
}

Each project:

3. Warn or block

4. Errors and limits

5. Terms

6. Contact

For a question, or a project you think is listed by mistake, contact us.