Reforger Mods API V1
V1 is the stable legacy API contract. It preserves existing field names, response envelopes, string sizes, percentage ratings, and date fields.
https://api.reforgermods.net/v1Deprecated unversioned routes remain aliases for V1. New clients that do not need V1 formatting should use V2.
/v1/health
Returns process health only. It does not request Workshop data.
curl https://api.reforgermods.net/v1/health{
"status": "success",
"data": { "code": 200, "alive": true }
}/v1/mods
Returns the first page of Workshop mod previews. Search, sort, and tag filters are optional.
| Parameter | Description |
|---|---|
query | Preferred search text parameter. |
q | Short alias for query. |
search, s | Backward-compatible search aliases. |
sort | popularity, most-rated, newest, created, recently-updated, highest-rated, subscribers, version_size, largest, or name. |
tags | Optional Workshop tag filter. Repeat for multiple tags. |
category | Single-value alias for tags. |
curl -H "User-Agent: my-bot/2.0.0" \
"https://api.reforgermods.net/v1/mods?query=radio&sort=newest"The response uses the list response shape with V1 mod preview objects.
/v1/mods/{page}
Returns a specific positive page number using the same response shape and query parameters as /v1/mods.
curl "https://api.reforgermods.net/v1/mods/2?query=radio&sort=newest"/v1/search
Convenience route for first-page search results. It returns the same shape as /v1/mods?query=....
GET /v1/search?query=radio
GET /v1/search?q=radio
GET /v1/search?search=radio
GET /v1/search?s=radio/v1/mod/{id}
Fetches one Workshop mod by ID. Detail responses include dependencies, scenarios, description, and license when available.
curl -H "User-Agent: my-bot/2.0.0" \
"https://api.reforgermods.net/v1/mod/5965550F24A0C152"{
"status": "success",
"mod": {
"name": "Example Mod",
"author": "Example Author",
"originalModURL": "https://reforger.armaplatform.com/workshop/5965550F24A0C152",
"apiModURL": "https://api.reforgermods.net/v1/mod/5965550F24A0C152",
"imageURL": "https://example.com/image.png",
"previewImages": ["https://example.com/image.png"],
"rating": "92%",
"version": "1.1.0",
"gameVersion": "1.1.0.34",
"size": "192.42 KB",
"subscribers": 66677,
"downloads": 791142,
"created": "19.05.2022",
"lastModified": "17.03.2024",
"id": "5965550F24A0C152",
"summary": "Short Workshop summary",
"description": "Workshop description",
"license": "Arma Public License (APL)",
"tags": ["GAMEPLAY"],
"dependencies": [ { "...": "dependency objects" } ],
"scenarios": [ { "...": "scenario objects" } ]
}
}/v1/mod/{id}/versions
Fetches available version history for one Workshop mod in a single response. Version history is not appended to /v1/mod/{id} by default.
This data is normalized from Arma Reforger Workshop metadata and may be temporarily unavailable if the Workshop data shape changes.
curl "https://api.reforgermods.net/v1/mod/5965550F24A0C152/versions"Pagination parameters are rejected; the endpoint returns all available rows.
/v1/rate-limits
Returns the rate-limit tier resolved for the request. Send an API key to inspect the paid plan attached to that key; omit the key to inspect the public tier.
{
"authenticated": true,
"rate_limit": {
"plan": "pro",
"limit_per_minute": 1200,
"burst": 300,
"limit_per_day": 500000,
"window": "1 minute",
"daily_window": "UTC day",
"shared_by": "account",
"daily_shared_by": "account",
"active_key_limit": 10
}
}/v1/refresh/jobs/{id}
Inspects background refresh progress when a refresh job is created. Most ordinary read clients only need normal 200, 304, 404, 429, and 503 handling.
{
"id": "9f0b7d0f6fd4f88a8bb0e455f0b640247a93",
"status": "queued",
"resource_url": "/v1/mods?query=radio",
"retry_after_seconds": 2
}List Response Structure
{
"status": "success",
"meta": {
"totalPages": 2593,
"currentPage": 2,
"totalMods": 41478,
"shownMods": 16,
"modsIndexStart": 17,
"modsIndexEnd": 32
},
"data": [ { "...": "mod preview objects" } ],
"links": {
"next": "https://api.reforgermods.net/v1/mods/3?query=radio",
"prev": "https://api.reforgermods.net/v1/mods/1?query=radio"
}
}Mod Preview Object
{
"name": "Super Awesome Mod",
"author": "Homer Simpson",
"imageURL": "https://example.com/image.png",
"originalModURL": "https://reforger.armaplatform.com/workshop/{mod_id}",
"apiModURL": "https://api.reforgermods.net/v1/mod/{mod_id}",
"size": "192.42 KB",
"rating": "92%",
"ID": "{mod_id}"
}Mod Detail Object
V1 preserves display-oriented fields. size and rating are strings; created and lastModified keep the V1 date format.
{
"name": "Super Awesome Mod",
"author": "Homer Simpson",
"originalModURL": "https://reforger.armaplatform.com/workshop/{mod_id}",
"apiModURL": "https://api.reforgermods.net/v1/mod/{mod_id}",
"imageURL": "https://example.com/image.png",
"previewImages": ["https://example.com/image.png"],
"rating": "92%",
"version": "1.1.0",
"gameVersion": "1.1.0.34",
"size": "192.42 KB",
"subscribers": 66677,
"downloads": 791142,
"created": "19.05.2022",
"lastModified": "17.03.2024",
"id": "{mod_id}",
"summary": "Short Workshop summary",
"description": "Workshop description",
"license": "Arma Public License (APL)",
"tags": ["GAMEPLAY"],
"dependencies": [ { "...": "dependency objects" } ],
"scenarios": [ { "...": "scenario objects" } ]
}Version History Object
{
"modId": "{mod_id}",
"currentVersion": "2.0.0",
"count": 20,
"versions": [ { "...": "mod version objects" } ]
}{
"id": "1040033",
"version": "1.2.3",
"gameVersion": "1.4.0.22",
"changelog": "more recoil and sway",
"published": true,
"approved": true,
"fileSize": 27021149,
"createdAt": "2026-08-01T10:11:12.000Z",
"updatedAt": "2026-08-02T10:11:12.000Z",
"dependencies": [ { "...": "dependency objects" } ]
}Dependency Object
{
"name": "Mod Dependency",
"originalModURL": "https://reforger.armaplatform.com/workshop/{dep_id}",
"apiModURL": "https://api.reforgermods.net/v1/mod/{dep_id}"
}Scenario Object
{
"name": "Some Scenario",
"description": "Scenario description",
"scenarioID": "{mod_id}Missions/SomeScenario.conf",
"gamemode": "Campaign",
"playerCount": 64,
"imageURL": "https://example.com/image.png"
}Refresh Job Object
Possible statuses are queued, running, succeeded, failed, and expired. After a job succeeds, request resource_url again.