# MC JAR FILES API

> Free REST API for downloading Minecraft server software — Vanilla, Paper, Purpur, Leaf, Folia, Fabric, Forge, NeoForge, Bedrock, and Velocity — and for listing versions. Plain HTTP GET, no API key.

- Base URL: `https://mcjarfiles.com/api`
- Human docs: https://mcjarfiles.com/api-docs
- OpenAPI 3.1 spec: https://mcjarfiles.com/openapi.json
- Agent Skill: https://mcjarfiles.com/skills/mcjarfiles/SKILL.md

## Usage guidelines

- No API key or auth header. Send a descriptive `User-Agent` so we can contact you if something breaks.
- Download endpoints answer with a `302` redirect to the official upstream host (Mojang, PaperMC, Fabric, etc.). Always follow redirects (`curl -L`, `fetch` does by default).
- Cache `get-versions` results instead of calling them on every server start.
- An unknown type or variant returns a `404` HTML page, not JSON — validate against the variant list below first.

## Server types and variants

Use `{type}/{variant}` as path segments. Bedrock needs an extra platform segment: `bedrock/{latest|preview}/{windows|linux}`.

| type | variants | description |
| --- | --- | --- |
| `vanilla` | `release`, `snapshot` | Official Minecraft server versions from Mojang |
| `servers` | `paper`, `purpur`, `leafmc`, `folia` | Performance-optimized server software |
| `modded` | `fabric`, `forge`, `neoforge` | Frameworks for modded Minecraft servers |
| `bedrock` | `latest`, `preview` | Bedrock edition — requires an extra /windows or /linux path segment |
| `proxies` | `velocity` | Proxy server software for network management |

Every valid path prefix:

- `vanilla/release`
- `vanilla/snapshot`
- `servers/paper`
- `servers/purpur`
- `servers/leafmc`
- `servers/folia`
- `modded/fabric`
- `modded/forge`
- `modded/neoforge`
- `bedrock/latest/{windows|linux}`
- `bedrock/preview/{windows|linux}`
- `proxies/velocity`

## Endpoints

### `GET /api/get-jar/{type}/{variant}/{version}`

Redirects to the server file for a specific type, variant, and version.

**Path parameters**

- `type` (required): One of vanilla, servers, modded, bedrock, proxies
- `variant` (required): A valid variant for the selected type, e.g. paper or forge
- `version` (required): A specific version, e.g. 1.21.8

> When type is bedrock, an extra path segment — /windows or /linux — is required between variant and version.

**Responses**

- `302`: Redirect to the file on the official download host
- `400`: Invalid parameters
- `404`: Resource not found
- `500`: Server issue

**Examples**

- `GET https://mcjarfiles.com/api/get-jar/vanilla/release/1.21.1`
- `GET https://mcjarfiles.com/api/get-jar/servers/leafmc/26.2`
- `GET https://mcjarfiles.com/api/get-jar/bedrock/latest/windows/1.21.100.7`

### `GET /api/get-latest-jar/{type}/{variant}`

Redirects to the newest available server file for the specified type and variant.

**Path parameters**

- `type` (required): One of vanilla, servers, modded, bedrock, proxies
- `variant` (required): A valid variant for the selected type, e.g. paper or forge

> When type is bedrock, an extra path segment — /windows or /linux — is required after variant.

**Responses**

- `302`: Redirect to the file on the official download host
- `400`: Invalid parameters
- `404`: Resource not found
- `500`: Server issue

**Examples**

- `GET https://mcjarfiles.com/api/get-latest-jar/servers/paper`
- `GET https://mcjarfiles.com/api/get-latest-jar/servers/folia`
- `GET https://mcjarfiles.com/api/get-latest-jar/bedrock/latest/windows`

### `GET /api/get-version-info/{type}/{variant}/{version}`

Retrieves build, channel, timestamp, and icon metadata for one specific version.

**Path parameters**

- `type` (required): One of vanilla, servers, modded, bedrock, proxies
- `variant` (required): A valid variant for the selected type, e.g. paper or forge
- `version` (required): A specific version, e.g. 1.20.4

> When type is bedrock, an extra path segment — /windows or /linux — is required between variant and version.

**Responses**

- `200`: JSON metadata
- `400`: Invalid parameters
- `404`: Version not found
- `500`: Server issue

**Examples**

- `GET https://mcjarfiles.com/api/get-version-info/servers/paper/1.21.8`
- `GET https://mcjarfiles.com/api/get-version-info/modded/forge/1.20.4`

**Example response**

```json
{
  "name": "Paper",
  "version": "1.21.8",
  "build": 42,
  "time": 1735689600,
  "channel": "default",
  "icon": "https://cdn.jsdelivr.net/gh/selfhst/icons/svg/papermc.svg"
}
```

### `GET /api/get-versions/{type}/{variant}`

Lists every available version identifier for a type and variant, newest first.

**Path parameters**

- `type` (required): One of vanilla, servers, modded, bedrock, proxies
- `variant` (required): A valid variant for the selected type, e.g. paper or forge

> When type is bedrock, an extra path segment — /windows or /linux — is required after variant.

**Responses**

- `200`: JSON array of version strings
- `400`: Invalid parameters
- `404`: No versions found
- `500`: Server issue

**Examples**

- `GET https://mcjarfiles.com/api/get-versions/servers/leafmc`
- `GET https://mcjarfiles.com/api/get-versions/vanilla/snapshot`

**Example response**

```json
[
  "1.21.8",
  "1.21.7",
  "1.21.6",
  "1.21.5"
]
```

### Version metadata shape

- Most types return one JSON object with `name`, `version`, `time` (Unix seconds), and `icon`, plus `build` and `channel` where the upstream project has them.
- `modded/forge`, `modded/neoforge`, and `bedrock/*` return a JSON **array** of objects instead.
- `bedrock/*` `time` values are Unix **milliseconds**; Forge/NeoForge use `minecraftVersion` plus `forgeVersion` / `neoForgeVersion`; Fabric adds `fabricLoaderVersion` and `installerVersion`.

## What you download and how to run it

| type/variant | file you get | how to run it |
| --- | --- | --- |
| `vanilla/release, vanilla/snapshot` | server.jar | `java -jar server.jar nogui` — set `eula=true` in eula.txt after the first run |
| `servers/paper, servers/purpur, servers/leafmc, servers/folia` | Server JAR | `java -jar <file>.jar nogui` — set `eula=true` in eula.txt after the first run |
| `modded/fabric` | Fabric server launcher JAR | `java -jar <file>.jar nogui` — downloads the game files on first start |
| `modded/forge, modded/neoforge` | Installer JAR (not the server itself) | `java -jar <installer>.jar --installServer`, then start with the generated `run.sh` / `run.bat` |
| `bedrock/{latest|preview}/{windows|linux}` | .zip archive (no Java needed) | Extract it, then run `bedrock_server.exe` (Windows) or `LD_LIBRARY_PATH=. ./bedrock_server` (Linux) |
| `proxies/velocity` | Velocity proxy JAR | `java -jar <file>.jar` — configure velocity.toml and point backend servers at it |

Java servers need the Java version their Minecraft version requires: Java 25 for 26.x, Java 21 for 1.20.5–1.21.x, Java 17 for 1.18–1.20.4.

## Examples

### curl

```bash
# Latest Paper JAR
curl -L -o paper.jar https://mcjarfiles.com/api/get-latest-jar/servers/paper

# Every Fabric version, newest first
curl https://mcjarfiles.com/api/get-versions/modded/fabric

# Bedrock dedicated server for Linux (zip)
curl -L -o bedrock-server.zip https://mcjarfiles.com/api/get-latest-jar/bedrock/latest/linux
```

### JavaScript / TypeScript

```ts
import { writeFile } from "node:fs/promises";

const base = "https://mcjarfiles.com/api";
const versions: string[] = await fetch(`${base}/get-versions/servers/purpur`).then((r) => r.json());
const jar = await fetch(`${base}/get-jar/servers/purpur/${versions[0]}`); // follows the redirect
await writeFile("purpur.jar", Buffer.from(await jar.arrayBuffer()));
```

### Python

```python
import requests

base = "https://mcjarfiles.com/api"
latest = requests.get(f"{base}/get-versions/vanilla/release", timeout=30).json()[0]
jar = requests.get(f"{base}/get-jar/vanilla/release/{latest}", timeout=120)  # follows redirects
open("server.jar", "wb").write(jar.content)
```

### Dockerfile

```dockerfile
FROM eclipse-temurin:25-jre
WORKDIR /srv
ADD https://mcjarfiles.com/api/get-latest-jar/servers/paper server.jar
RUN echo "eula=true" > eula.txt
CMD ["java", "-Xmx2G", "-jar", "server.jar", "nogui"]
```

## Response codes

- `200`: Success — JSON response
- `302`: Redirect — download endpoints send you to the official upstream file; follow redirects
- `400`: Bad Request — missing or invalid parameters
- `404`: Not Found — check type, variant, or version
- `500`: Internal Server Error — try again shortly

Errors from known routes are JSON: `{ "error": "message" }`.
