Reforger Mods API V2
V2 is the recommended API for new clients. It provides direct Reforger server discovery data from the ReforgerMods index, player history, reported server mods, typed Workshop metadata, and cleaner response schemas.
https://api.reforgermods.net/v2All V2 resources use plural routes. Use /v2/servers for server discovery, /v2/servers/{id} for server details, /v2/mods?search=radio for Workshop search, and /v2/mods/{id} for mod detail.
/v2/health
Returns process health only. It does not request Workshop data.
{
"status": "success",
"data": { "code": 200, "alive": true }
}serversReportingNoMods is the honest interpretation of a zero reported mod count. It does not prove a vanilla configuration. vanillaServers remains temporarily as a deprecated compatibility alias with the same value.
/v2/mods
Returns V2 mod previews. Pagination, search, sorting, and tag filters are query parameters on this endpoint.
| Parameter | Description |
|---|---|
page | Optional positive page number. Defaults to 1. |
search | Preferred V2 search text parameter. |
query, q, s | Accepted search aliases for compatibility. |
sort | Optional sort value. Valid values are popularity, most-rated, newest, created, recently-updated, highest-rated, subscribers, version_size, largest, and name. |
tags | Optional Workshop tag filter. Repeat for multiple tags, for example ?tags=SCENARIOS&tags=TERRAIN. |
category | Compatibility alias for a single tags value. New clients should prefer tags. |
curl -H "User-Agent: my-bot/2.0.0" \
"https://api.reforgermods.net/v2/mods?page=2&search=radio&sort=newest"curl -H "User-Agent: my-bot/2.0.0" \
"https://api.reforgermods.net/v2/mods?search=map&tags=SCENARIOS&tags=TERRAIN"{
"status": "success",
"meta": {
"totalPages": 2593,
"currentPage": 2,
"totalMods": 41478,
"shownMods": 16,
"modsIndexStart": 17,
"modsIndexEnd": 32
},
"data": [
{
"id": "5965550F24A0C152",
"name": "Example Mod",
"type": "addon",
"summary": "Short Workshop summary",
"authorId": "author_id",
"author": "Example Author",
"version": "1.2.3",
"versionId": 123,
"gameVersion": "1.7.0.54",
"size": 203434353,
"sizeFormatted": "194 MiB",
"rating": 0.88,
"ratingCount": 9178,
"subscriberCount": 31995,
"createdAt": "2022-05-18T22:02:44Z",
"updatedAt": "2026-07-30T07:10:47Z",
"unlisted": false,
"private": false,
"tags": ["VEHICLES", "WEAPONS"],
"imageUrl": "https://example.com/image.png",
"workshopUrl": "https://reforger.armaplatform.com/workshop/5965550F24A0C152",
"apiUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152"
}
],
"links": {
"next": "https://api.reforgermods.net/v2/mods?page=3&search=radio&sort=newest",
"prev": "https://api.reforgermods.net/v2/mods?page=1&search=radio&sort=newest"
}
}The response uses the V2 list response shape with typed V2 mod preview objects.
/v2/mods/{id}
Canonical V2 detail endpoint for one Workshop mod. It uses Workshop asset-detail metadata, includes direct dependencies and scenarios for convenience, keeps version history behind subresource URLs, and exposes machine-native values.
curl -H "User-Agent: my-bot/2.0.0" \
"https://api.reforgermods.net/v2/mods/5965550F24A0C152"{
"status": "success",
"mod": {
"id": "5965550F24A0C152",
"name": "Example Mod",
"type": "addon",
"summary": "Short Workshop summary",
"description": "Long Workshop description",
"authorId": "author_id",
"author": "Example Author",
"version": "1.2.3",
"versionId": 123,
"gameVersion": "1.7.0.54",
"size": 203434353,
"sizeFormatted": "194 MiB",
"rating": 0.88,
"ratingCount": 9178,
"subscriberCount": 31995,
"downloadCount": 1866382,
"createdAt": "2022-05-18T22:02:44Z",
"updatedAt": "2026-07-30T07:10:47Z",
"unlisted": false,
"private": false,
"obsolete": false,
"license": "Custom license",
"tags": ["VEHICLES", "WEAPONS"],
"imageUrl": "https://example.com/image.png",
"previewImages": ["https://example.com/image.png"],
"screenshots": ["https://example.com/screenshot.png"],
"versionCount": 10,
"dependencyCount": 2,
"scenarioCount": 11,
"dependencySize": 8342292061,
"dependencySizeFormatted": "7.77 GiB",
"totalSize": 8545726414,
"totalSizeFormatted": "7.96 GiB",
"dependencies": [
{
"id": "DEP123",
"name": "Dependency Mod",
"version": "1.0.0",
"size": 8342292061,
"sizeFormatted": "7.77 GiB",
"published": true,
"private": false,
"dependencyCount": 0,
"workshopUrl": "https://reforger.armaplatform.com/workshop/DEP123",
"apiUrl": "https://api.reforgermods.net/v2/mods/DEP123"
}
],
"scenarios": [
{
"name": "Conflict - Everon",
"gameId": "{ABC}Missions/Conflict.conf",
"gameMode": "#AR-Scenario_GameMode_Campaign",
"author": "#AR-Author_BI",
"description": "#AR-Campaign_GamemodeDesc",
"playerCount": 64
}
],
"workshopUrl": "https://reforger.armaplatform.com/workshop/5965550F24A0C152",
"apiUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152",
"versionsUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152/versions",
"dependenciesUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152/dependencies",
"scenariosUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152/scenarios",
"licenseUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152/license"
}
}| Field | Note |
|---|---|
size | Raw byte count for the current Workshop version. |
dependencySize | Raw byte count for known direct dependencies. |
totalSize | size plus known direct dependency bytes. |
dependencies | Direct dependencies for the current mod version. The dedicated /dependencies endpoint returns the same list with dependency totals. |
scenarios | Scenarios included with the mod. The dedicated /scenarios endpoint remains available for clients that want only scenario data. |
versions | Not included in mod detail. Use /versions or /versions/{version} for version history and version-specific changelogs. |
*Formatted | Display-ready IEC values derived from the matching byte fields. |
downloadCount | Omitted when unknown. It is not fabricated as 0. |
blocked, reported | Not exposed in V2. Full license text is only returned by the dedicated /license subresource. |
/v2/mods/{id}/versions
Returns a lightweight version history from Workshop asset-detail metadata. This endpoint does not fetch each historical version, so it is suitable for listing available versions without expensive per-version lookups.
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/versions"{
"status": "success",
"data": {
"modId": "5965550F24A0C152",
"count": 10,
"versions": [
{
"version": "1.2.3",
"gameVersion": "1.7.0.54",
"size": 203434353,
"sizeFormatted": "194 MiB",
"approved": true,
"published": true,
"createdAt": "2026-07-30T07:09:00Z",
"updatedAt": "2026-07-30T07:10:47Z",
"scenarioCount": 11,
"dependencyCount": 2,
"apiUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152/versions/1.2.3"
}
]
}
}Entries in versions use the mod version object shape, not the V2 mod detail object. Changelog text is available from /v2/mods/{id}/versions/{version} when the Workshop provides it.
/v2/mods/{id}/versions/{version}
Returns richer metadata for one specific mod version. This endpoint uses Workshop version-detail data and can include the author's changelog and version-specific scenarios.
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/versions/1.2.3"{
"status": "success",
"data": {
"modId": "5965550F24A0C152",
"version": "1.2.3",
"gameVersion": "1.7.0.54",
"size": 203434353,
"sizeFormatted": "194 MiB",
"approved": true,
"published": true,
"changelog": "[Improved] Tweaked deployment points\n[Fixed] Corrected loadout issue",
"createdAt": "2026-07-30T07:09:00Z",
"updatedAt": "2026-07-30T07:10:47Z",
"scenarioCount": 11,
"dependencyCount": 2,
"scenarios": [
{
"name": "Conflict - Everon",
"gameId": "{ABC}Missions/Conflict.conf",
"gameMode": "#AR-Scenario_GameMode_Campaign",
"author": "#AR-Author_BI",
"description": "#AR-Campaign_GamemodeDesc",
"playerCount": 64
}
],
"apiUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152/versions/1.2.3"
}
}size is a raw byte count. Use sizeFormatted when you want a display-ready IEC value.
The version path segment is URL-escaped when requested upstream. Dots are valid in versions. Use normal URL encoding for any other path-significant characters.
/v2/mods/{id}/dependencies
Returns direct dependencies reported for the current mod version. Dependency totals are based on known direct dependency sizes only.
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/dependencies"{
"status": "success",
"data": {
"modId": "5965550F24A0C152",
"count": 2,
"size": 8342292061,
"sizeFormatted": "7.77 GiB",
"totalSizeWithMod": 8545726414,
"totalSizeWithModFormatted": "7.96 GiB",
"dependencies": [ { "...": "dependency objects" } ]
}
}size and totalSizeWithMod are raw byte counts. Use the matching *Formatted fields for display text.
If an upstream dependency is missing size data, known totals remain accurate and unknownSizeCount may be included.
/v2/mods/{id}/scenarios
Returns scenarios included with the Workshop mod. Localization keys such as #AR-* are returned as-is.
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/scenarios"{
"status": "success",
"data": {
"modId": "5965550F24A0C152",
"count": 11,
"scenarios": [ { "...": "scenario objects" } ]
}
}/v2/mods/{id}/license
Returns the license label and full license text when the Workshop provides it. Normal mod detail intentionally only includes the short license label.
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/license"{
"status": "success",
"data": {
"modId": "5965550F24A0C152",
"license": "Custom license",
"licenseText": "Full license text…"
}
}/v2/servers
Returns a paginated Arma Reforger server snapshot from the ReforgerMods server index. Discovery data is retrieved from the backend used by Arma Reforger's server browser, then normalized for web and API clients.
Each row may carry a nested analytics object with the server's current ReforgerMods-derived ranking. It is filled for the whole page in one lookup, is omitted for servers with no current ranking, and disappears entirely while analytics are warming up. It is additive: the server list never fails because analytics are unavailable. See /v2/analytics/servers for the field meanings.
| Parameter | Description |
|---|---|
page, perPage | Optional pagination. perPage is capped at 500. |
search | Case-insensitive search across server and scenario names. |
sort | players, name, newest, or lastSeen. |
region, platform | Filter by ping site or supported client platform. Friendly platforms are pc, xbox, and psn. |
official, hasMods, includeOffline | Boolean filters for official servers, modded servers, and offline entries. |
battleye, locked | Boolean filters for BattlEye-protected servers and password-protected servers. |
curl "https://api.reforgermods.net/v2/servers?sort=players&hasMods=true"{
"status": "success",
"dataset": {
"warming": false,
"stale": false,
"snapshotAgeSeconds": 18,
"lastCollectionAt": "2026-08-28T18:42:10Z",
"serverCount": 5300,
"onlineServerCount": 2400,
"offlineServerCount": 2900
},
"meta": {
"totalPages": 53,
"currentPage": 1,
"totalServers": 5300,
"shownServers": 100,
"serverIndexStart": 1,
"serverIndexEnd": 100
},
"data": [ { "...": "server preview objects" } ],
"links": {
"next": "https://api.reforgermods.net/v2/servers?page=2&sort=players&hasMods=true"
}
}/v2/servers/{id}
Returns one server with live status fields, scenario data, queue size, supported clients, reported mods, and an activity summary when history has been collected. A nested analytics object is included when the server has a current ReforgerMods ranking.
positionAvgWaitTime is the lobby's reported average wait in seconds for one queue position. sessionId is the current upstream lobby session identifier. Both are optional and are omitted when the collected lobby response does not provide them.
curl "https://api.reforgermods.net/v2/servers/{room_id}"{
"status": "success",
"dataset": {
"warming": false,
"stale": false,
"snapshotAgeSeconds": 18,
"lastCollectionAt": "2026-08-28T18:42:10Z",
"serverCount": 5300,
"onlineServerCount": 2400,
"offlineServerCount": 2900
},
"server": {
"id": "8d7f1b9c-6a28-42a1-8d3f-25f2f7c3f431",
"name": "Example Conflict Server",
"scenarioId": "{ECC61978EDCC2B5A}Missions/23_Campaign.conf",
"scenarioName": "Conflict - Everon",
"scenarioImageUrl": "https://example.com/scenario.jpg",
"scenarioImageWidth": 1920,
"scenarioImageHeight": 1080,
"scenarioThumbnailUrl": "https://example.com/scenario-thumb.jpg",
"scenarioThumbnailWidth": 480,
"scenarioThumbnailHeight": 270,
"gameVersion": "1.7.0.54",
"official": false,
"passwordProtected": false,
"battlEye": true,
"crossPlay": true,
"players": 48,
"maxPlayers": 64,
"queue": 3,
"queueMax": 50,
"positionAvgWaitTime": 51,
"region": "frankfurt",
"platform": "LINUX",
"platforms": ["pc", "xbox", "psn"],
"modCount": 18,
"scenarioModId": "5965550F24A0C152",
"online": true,
"firstSeen": "2026-08-11T03:14:20Z",
"lastSeen": "2026-08-28T18:42:10Z",
"present": true,
"hostType": "CommunityDs",
"joinable": true,
"visible": true,
"host": "203.0.113.42",
"port": 2001,
"directJoinCode": "ABC123",
"sessionId": "0-000000000030",
"supportedClients": ["PLATFORM_PC", "PLATFORM_XBL", "PLATFORM_PSN"],
"hostedScenarioModId": "5965550F24A0C152",
"fps": 60,
"lastChanged": "2026-08-28T18:36:02Z",
"activity": {
"peak24h": 64,
"avg24h": 41,
"median24h": 44,
"low24h": 12,
"peak7d": 64,
"samples24h": 288,
"samples7d": 168,
"trackingSince": "2026-08-11T03:14:20Z"
},
"modSummary": {
"count": 18,
"knownSize": 0,
"unresolvedCount": 0
},
"mods": [
{
"id": "5965550F24A0C152",
"name": "Example Mod",
"version": "1.2.3",
"sizeKnown": false,
"apiModURL": "https://api.reforgermods.net/v2/mods/5965550F24A0C152",
"modURL": "https://api.reforgermods.net/mods/5965550F24A0C152/",
"dependentCount": 0
},
{
"id": "5A1B2C3D4E5F6789",
"name": "Example Dependency",
"version": "4.5.6",
"sizeKnown": false,
"apiModURL": "https://api.reforgermods.net/v2/mods/5A1B2C3D4E5F6789",
"modURL": "https://api.reforgermods.net/mods/5A1B2C3D4E5F6789/",
"dependentCount": 0
}
]
}
}The detail response includes the reported mod list. Use /v2/servers/{id}/history for chart-friendly activity buckets.
/v2/servers/{id}/mods
Returns the server-to-Workshop mod relationship as reported by the server. By default ReforgerMods also attempts exact-version size enrichment; use ?sizes=false to skip that best-effort lookup.
curl "https://api.reforgermods.net/v2/servers/{room_id}/mods"/v2/servers/{id}/history
Returns historical player activity buckets for one server. Valid ranges are 6h, 24h, 72h, 7d, 30d, 90d, 1y, and all. A point includes positionAvgWaitTime only when at least one source observation in that bucket reported a wait estimate; the value is the rounded average of those reported estimates.
curl "https://api.reforgermods.net/v2/servers/{room_id}/history?range=24h"{ "t": 1790299800, "avg": 124, "min": 119, "max": 128, "cap": 128, "positionAvgWaitTime": 51 }/v2/servers/history
Returns fleet-wide population: how many players were on tracked Arma Reforger servers over time, plus the current totals. This is the data behind the public player count page.
Each point sums every server's average population for that bucket, so it is a player count rather than a per-server figure. Servers with no samples in a bucket contribute nothing rather than pulling the total down. Figures cover servers visible in the public server list; they are not published by Bohemia Interactive and are not Steam concurrent users.
| Parameter | Description |
|---|---|
range | 6h, 24h (default), 72h, 7d, 30d, 90d, 1y, or all. Bucket width follows the range: 5 minutes up to 24h, hourly to 30d, daily beyond. |
{
"status": "success",
"range": "24h",
"bucket": "5m",
"now": {
"onlineServers": 5071,
"trackedServers": 23686,
"players": 17186,
"capacity": 225303,
"queue": 872,
"observedAt": "2026-09-02T18:04:00Z"
},
"points": [
{ "t": 1788390000, "players": 18915, "capacity": 230347, "servers": 5283, "sumOfServerPeaks": 20110, "peak": 20110 }
]
}now is read live from the server index, so it is as fresh as the last collection rather than as fresh as the newest history bucket.
sumOfServerPeaks adds each server's independently sampled maximum within the bucket. Those maxima may occur at different moments, so this field is explicitly not a concurrent fleet peak.
peak is a deprecated compatibility alias with the same value. Historically it also represented the sum of independently observed per-server bucket peaks, not a simultaneous fleet peak.
/v2/analytics
Returns the latest ReforgerMods-derived global analytics snapshot and an analytics freshness envelope. Analytics are derived from observed server and mod activity. If analytics are warming up, analytics.available is false and normal server/mod endpoints remain usable.
{
"status": "success",
"analytics": {
"available": true,
"sourceSnapshotId": 5399,
"calculatedAt": "2026-09-02T18:05:00Z",
"modelVersion": "analytics-2026-09-1",
"stale": false
},
"data": {
"onlineServers": 2400,
"trackedServers": 5300,
"totalPlayers": 42000,
"totalQueue": 180,
"moddedServers": 1800,
"serversReportingNoMods": 600,
"vanillaServers": 600,
"uniqueModsDeployed": 12200,
"totalModDeployments": 91000,
"sourceSnapshotId": 5399,
"observedAt": "2026-09-02T18:04:00Z",
"calculatedAt": "2026-09-02T18:05:00Z"
}
}/v2/analytics/servers
Returns server analytics leaderboard rows ordered by the chosen score. Scores are ecosystem-relative ReforgerMods analytics; they are not uptime guarantees or trust ratings. Each row also carries the server's current list row under server — the same object /v2/servers returns — so a client can render a full server card from one leaderboard request instead of looking each server up. server is absent when a ranked server is no longer in the current index.
Every analytics response carries the same analytics envelope: available (a published dataset exists), stale (the newest published dataset is behind the current server index or older than the freshness window), sourceSnapshotId, calculatedAt, and modelVersion. Stale analytics are still returned — decide for yourself whether the timestamp is fresh enough.
| Parameter | Description |
|---|---|
sort | overall (default), activity, reliability, demand, rising, or falling. Rising and falling are the two directions of momentumScore, the only trend column published for servers; momentum is accepted as an alias for rising. |
page, limit | Optional pagination. limit is capped at 500. |
search, region, platform | Narrow the ranked population. These behave exactly as they do on /v2/servers. |
online, includeOffline, official, hasMods, battleye, locked | The same boolean filters /v2/servers accepts. Filtering narrows which ranked servers are returned; it never renumbers them, so rank stays each server's position across the whole ecosystem. As on /v2/servers, the default is currently-listed servers only. |
{
"serverId": "8d7f1b9c-6a28-42a1-8d3f-25f2f7c3f431",
"rank": 12,
"modelVersion": "analytics-2026-09-1",
"activityScore": 94.2,
"observedAvailabilityScore": 89.4,
"reliabilityScore": 89.4,
"demandScore": 91.8,
"momentumScore": 73.1,
"confidence": 0.87,
"overallScore": 91.4,
"calculatedAt": "2026-09-02T18:05:00Z",
"sourceSnapshotId": 5399,
"server": {
"id": "8d7f1b9c-6a28-42a1-8d3f-25f2f7c3f431",
"name": "Example Conflict Server",
"scenarioName": "Conflict Everon",
"online": true,
"players": 48,
"maxPlayers": 64,
"region": "frankfurt",
"modCount": 27
}
}GET /v2/analytics/servers/{id} returns one current server analytics row. If the server has no analytics ranking, the response is 404 ANALYTICS_NOT_AVAILABLE.
| Field | Meaning |
|---|---|
activityScore | Observed player activity relative to the rest of the tracked fleet. |
observedAvailabilityScore | How consistently the server was present in successful collection checks. This is not process uptime or an SLA. reliabilityScore is a deprecated compatibility alias. |
demandScore | Observed queue frequency and queue size relative to the fleet; it is not a fullness score. |
momentumScore | Direction of recent change in the above. Describes what was observed, not what will happen next. |
confidence | Model confidence in this row given how much history exists for the server. It is not a trust or safety rating. |
overallScore, rank | Combined ecosystem-relative score and its position across all ranked servers. |
/v2/analytics/mods
Returns ReforgerMods-derived mod analytics for discovery. Use this endpoint for Popular, Rising, and Falling lists rather than Workshop sorting.
| Parameter | Description |
|---|---|
sort | popular (default), rising, falling, or deployments. Rising and falling lists exclude unranked rows where the corresponding rank is 0. deployments orders by totalDeployments, the number of currently listed servers reporting the mod, and is a raw count rather than a model rank. |
page, limit | Optional pagination. limit is capped at 500. |
Analytics carry no Workshop metadata, so each row also includes the indexed Workshop preview under mod — name, artwork, author, tags, version — attached in one batch lookup. It is absent for mods the local Workshop index has not seen.
{
"modId": "5965550F24A0C152",
"name": "Example Mod",
"totalDeployments": 2305,
"confirmedRootDeployments": 1400,
"dependencyDeployments": 700,
"unclassifiedDeployments": 205,
"dependencyClassificationCoverage": 0.91,
"currentPlayerExposure": 10309,
"playerHoursExposure7d": 88240.5,
"playerHoursExposureCoverage7d": 0.96,
"deploymentScore": 96.2,
"activityScore": 93.1,
"popularityScore": 98.8,
"trendSignal": 1.4,
"risingScore": 88.0,
"fallingScore": 0,
"popularityRank": 3,
"risingRank": 12,
"fallingRank": 0,
"calculatedAt": "2026-09-02T18:05:00Z",
"sourceSnapshotId": 5399,
"modelVersion": "analytics-2026-09-1"
}GET /v2/analytics/mods/{id} returns one complete mod analytics row, read straight from the analytics dataset. /v2/mods/{id} also carries a nested analytics object when analytics are available, but that copy is cached alongside the Workshop mod metadata and can therefore be older than this endpoint's — use calculatedAt to tell, and prefer this endpoint when you need the current numbers.
| Field | Meaning |
|---|---|
totalDeployments | How many tracked servers currently report this mod, split into confirmedRootDeployments (loaded directly), dependencyDeployments (pulled in by another mod), and unclassifiedDeployments. |
dependencyClassificationCoverage | Fraction of deployments that could be classified as root or dependency, between 0 and 1. |
currentPlayerExposure | Players currently observed on servers reporting this mod. This is exposure, not unique users or individual usage. |
playerHoursExposure7d | Estimated player-hours observed on servers reporting this mod in the same sampled intervals over the last seven days. It is not unique users or proof that an individual used the mod. |
playerHoursExposureCoverage7d | Per-mod fraction of the requested seven-day wall-clock window covered by complete population buckets intersecting trusted observation intervals that report the mod. Missing, uncertain, and partial intervals are excluded; unrelated mods cannot increase it. |
popularityScore, popularityRank | Ecosystem-relative popularity and its leaderboard position. |
trendSignal, risingScore, fallingScore | Direction and strength of recent observed change. These describe the recent past and imply nothing about future adoption. |
risingRank, fallingRank | Directional modpack-change leaderboards; 0 means the signal did not point in that direction or evidence was insufficient. These ranks describe recent additions/removals, not predicted growth. |
/v2/rate-limits
Returns the rate-limit tier resolved for the request. This route uses the same utility response shape as V1.
{
"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
}
}/v2/refresh/jobs/{id}
Inspects background refresh progress when a refresh job is created. This route uses the same utility response shape as V1.
{
"id": "9f0b7d0f6fd4f88a8bb0e455f0b640247a93",
"status": "queued",
"resource_url": "/v2/mods?search=radio",
"retry_after_seconds": 2
}/v2/tools/storage-plan
Plans mod storage for a current and a desired mod set. Sizes are always resolved server-side from real Workshop package bytes, so a client cannot influence the accounting. Exact and estimated bytes are carried separately through every subtotal and are never merged into one unqualified figure. No API key required.
mode decides how desired relates to current, and the two answer different questions. replace (the default) treats desired as the complete end state, so anything installed it does not reference becomes removable. add treats desired as mods to install on top of current, keeping installed mods the wish list never mentions.
includeRemovalImpact adds a removal block when a budget is set and the plan does not fit. It is opt-in because it costs dependency resolution for every mod in the request. Each candidate carries a three-valued status: safe, blocked (with requiredBy naming what would break), or unknown when dependency data was incomplete. Blocked and unknown candidates never count toward the running savings total.
{
"current": [{ "id": "5965550F24A0C152", "version": "1.0.0" }],
"desired": [{ "id": "597706D1E4C7BAAD" }],
"mode": "add",
"budgetBytes": 107374182400,
"includeRemovalImpact": true
}{
"status": "success",
"data": {
"mode": "add",
"current": { "totalBytes": 16106127360, "totalText": "15 GiB", "exactCount": 42, "estimatedCount": 0, "coverage": 1 },
"download": { "totalBytes": 2147483648, "totalText": "2 GiB", "exactCount": 3, "estimatedCount": 0 },
"projected": { "totalBytes": 18253611008, "totalText": "17 GiB" },
"peak": { "totalBytes": 18253611008, "totalText": "17 GiB" },
"budget": { "set": true, "text": "100 GiB", "verdict": "fits", "headroomText": "83 GiB" },
"downloads": [{ "id": "597706D1E4C7BAAD", "name": "Example Mod", "bytes": 2147483648, "exact": true, "source": "workshop-download-list" }],
"removal": {
"neededText": "0 B",
"recommendedCount": 0,
"candidates": [],
"dependencyDataAvailable": true
},
"coverage": 1,
"unsizedCount": 0,
"notes": []
},
"resolution": { "requested": 45, "resolved": 45, "unresolved": 0, "exactSizes": 45, "sizeCoverage": 1 },
"model": "reforgermods.net storage model 2026.08-1"
}The Storage Planner is this endpoint with a UI on top.
/v2/tools/dependency-analysis
Answers "what breaks if I remove this?" for a modpack. Send targetId for one mod or targetIds for a whole removal set; the two are unioned. No API key required.
A set is not the same question as its members one at a time: a mod inside the removal set is never counted as a blocker for another mod in the set, because both are going away together. coveredBySelection counts the mods that only break because of another selected mod. missingTargets lists requested IDs absent from the supplied pack; the ones present are still analysed.
A mod whose dependency metadata could not be fetched is reported in unresolvedMods, and its empty dependency list means unknown, not none — the verdict says so rather than claiming a removal is safe. includeAll is a drawing option that adds every remaining mod to the returned graph with role related; it never changes the verdict.
{
"mods": [
{ "id": "5965550F24A0C152", "version": "1.0.0" },
{ "id": "597706D1E4C7BAAD", "version": "2.1.0" }
],
"targetIds": ["5965550F24A0C152"],
"includeAll": false
}{
"status": "success",
"data": {
"status": "blocked",
"reason": "Example Mod directly requires Core Framework and would break.",
"targets": [{ "id": "5965550F24A0C152", "name": "Core Framework", "role": "selected" }],
"missingTargets": [],
"coveredBySelection": 0,
"directBlockers": [{ "id": "597706D1E4C7BAAD", "name": "Example Mod", "depth": 1, "chainNames": ["Example Mod", "Core Framework"] }],
"transitiveBlockers": [],
"affectedCount": 1,
"orphanedIfRemoved": [],
"reclaimable": { "totalBytes": 943718400, "totalText": "900 MiB", "exactCount": 1, "estimatedCount": 0 },
"unresolvedMods": [],
"missingDependencies": [],
"cycles": [],
"graph": { "nodes": [], "edges": [], "minLayer": -1, "maxLayer": 0, "truncated": false }
},
"mods": [{ "id": "5965550F24A0C152", "name": "Core Framework", "bytes": 943718400, "exact": true }],
"resolution": { "requested": 2, "resolved": 2, "unresolved": 0 },
"model": "reforgermods.net dependency model 2026.08-1"
}The Dependency Blockers tool is this endpoint with a UI on top.
/v2/tools/hosting-estimate
Estimates RAM, CPU, and disk for a modded dedicated server. Supply mods for exact byte-based sizing; without it the estimate falls back to modCount and the median size of the mods indexed by reforgermods.net, and says so. No API key required.
Every figure is returned with the components that produced it and the calibration constants behind them. calibrationBasis is the weakest basis among the constants used — the honest confidence ceiling for the whole result. These are reforgermods.net's own planning estimates, not measurements published by any vendor, and most constants are currently provisional.
{
"slots": 64,
"concurrentPlayers": 48,
"scenario": "heavy",
"logRetentionDays": 14,
"backupCopies": 1,
"mods": [{ "id": "5965550F24A0C152", "version": "1.0.0" }]
}{
"status": "success",
"data": {
"inputs": { "slots": 64, "concurrentPlayers": 48, "modCount": 1, "modBytesText": "900 MiB", "modBytesKnown": true, "scenario": "heavy" },
"memory": { "recommendedGiB": 8, "minimumGiB": 6, "workingSetMiB": 4608, "components": [{ "label": "Dedicated server baseline", "text": "2.0 GiB", "why": "An idle, unmodded server process before anyone connects.", "exact": false }] },
"cpu": { "recommendedCores": 4, "clockClass": "high-clock", "clockNote": "Reforger's simulation loop is single-threaded." },
"disk": { "recommendedGiB": 50, "withMarginText": "38 GiB", "modBytesExact": true },
"workload": { "players": "high", "mods": "light", "scenario": "heavy", "driver": "players" },
"assumptions": [{ "key": "baseServerMemory", "label": "Idle server memory", "value": "2048 MiB", "basis": "provisional", "note": "Starting assumption pending measurement." }],
"estimate": true,
"calibrationVersion": "2026.08-1",
"calibrationBasis": "provisional"
},
"mods": [{ "id": "5965550F24A0C152", "name": "Core Framework", "bytes": 943718400, "exact": true }],
"model": "reforgermods.net hosting model 2026.08-1"
}The Hosting Calculator is this endpoint with a UI on top.
List Response Structure
{
"status": "success",
"meta": {
"totalPages": 2593,
"currentPage": 2,
"totalMods": 41478,
"shownMods": 16,
"modsIndexStart": 17,
"modsIndexEnd": 32
},
"data": [ { "...": "V2 mod preview objects" } ],
"links": {
"next": "https://api.reforgermods.net/v2/mods?page=3&search=radio",
"prev": "https://api.reforgermods.net/v2/mods?page=1&search=radio"
}
}V2 Mod Preview Object
List/search previews avoid long fields such as full descriptions, scenarios, dependency lists, and large preview-image arrays.
{
"id": "5965550F24A0C152",
"name": "Example Mod",
"type": "addon",
"summary": "Short Workshop summary",
"authorId": "author_id",
"author": "Example Author",
"version": "1.2.3",
"versionId": 123,
"size": 203434353,
"sizeFormatted": "194 MiB",
"rating": 0.88,
"ratingCount": 9178,
"subscriberCount": 31995,
"createdAt": "2022-05-18T22:02:44Z",
"updatedAt": "2026-07-30T07:10:47Z",
"unlisted": false,
"private": false,
"tags": ["VEHICLES", "WEAPONS"],
"imageUrl": "https://example.com/image.png",
"workshopUrl": "https://reforger.armaplatform.com/workshop/5965550F24A0C152",
"apiUrl": "https://api.reforgermods.net/v2/mods/5965550F24A0C152"
}V2 Mod Detail Object
size is raw bytes. sizeFormatted is derived from size using IEC units: B, KiB, MiB, GiB, and TiB. rating is a number from 0.0 to 1.0. Timestamps are RFC3339.
dependencySize and totalSize use direct dependencies reported for the current mod version. The detail object includes direct dependencies and scenarios arrays for convenience; version history remains available from the version subresource endpoints.
Upstream-only moderation, processing, access, blocked, reported, and platform bitfield data is not exposed. Giant license text is kept out of normal detail and available from /v2/mods/{id}/license.
Version History Object
The version-history response is a version collection for one mod. It does not repeat the full V2 mod detail fields.
{
"modId": "{mod_id}",
"count": 10,
"versions": [ { "...": "mod version objects" } ]
}Mod Version Object
A version row represents one lightweight Workshop asset version entry. size is raw bytes, sizeFormatted uses IEC units, and timestamps are returned as RFC3339 strings when available.
{
"id": "1040033",
"version": "1.2.3",
"gameVersion": "1.7.0.54",
"size": 203434353,
"sizeFormatted": "194 MiB",
"approved": true,
"published": true,
"createdAt": "2026-07-30T07:09:00Z",
"updatedAt": "2026-07-30T07:10:47Z",
"scenarioCount": 11,
"dependencyCount": 2,
"apiUrl": "https://api.reforgermods.net/v2/mods/{mod_id}/versions/1.2.3"
}Optional fields are omitted when the Workshop data does not include them. The list object does not include changelog text.
Version Detail Object
A version detail object represents one specific Workshop version. It adds author-provided changelog text and version-specific scenario/dependency data when available.
{
"modId": "{mod_id}",
"id": "1040033",
"version": "1.2.3",
"gameVersion": "1.7.0.54",
"size": 203434353,
"sizeFormatted": "194 MiB",
"approved": true,
"published": true,
"changelog": "Author changelog text",
"createdAt": "2026-07-30T07:09:00Z",
"updatedAt": "2026-07-30T07:10:47Z",
"scenarioCount": 11,
"dependencyCount": 2,
"scenarios": [ { "...": "scenario objects" } ],
"dependencies": [ { "...": "dependency objects" } ],
"apiUrl": "https://api.reforgermods.net/v2/mods/{mod_id}/versions/1.2.3"
}changelog preserves the Workshop text, including line breaks. It may be an empty string when the Workshop has no changelog for that version.
V2 Dependency Object
{
"id": "{dep_id}",
"name": "Mod Dependency",
"version": "1.2.3",
"size": 6339694503,
"sizeFormatted": "5.9 GiB",
"published": true,
"private": false,
"dependencyCount": 0,
"workshopUrl": "https://reforger.armaplatform.com/workshop/{dep_id}",
"apiUrl": "https://api.reforgermods.net/v2/mods/{dep_id}"
}Dependencies are direct dependencies for the current mod version. V2 does not expose dependency-level blocked.
V2 Scenario Object
{
"name": "Some Scenario",
"description": "Scenario description",
"gameId": "{mod_id}Missions/SomeScenario.conf",
"gameMode": "#AR-Scenario_GameMode_Campaign",
"author": "#AR-Author_BI",
"playerCount": 64
}Scenario objects do not include image URLs. Use mod-level imageUrl, previewImages, or screenshots for visual assets.
V1 Migration Notes
| V1 | V2 |
|---|---|
/v1/mods/{page} | /v2/mods?page={page} |
/v1/search?query={query} | /v2/mods?search={query} |
/v1/mod/{id} | /v2/mods/{id} |
/v1/mod/{id}/versions | /v2/mods/{id}/versions |
Detail dependencies array | /v2/mods/{id}/dependencies |
Detail scenarios array | /v2/mods/{id}/scenarios |
size: "5.90 GB" | size: 6335076761, sizeFormatted: "5.9 GiB" |
rating: "88%" | rating: 0.88 |
created: "18.05.2022" | createdAt: "2022-05-18T22:02:44Z" |
V2 mod data is normalized from Arma Reforger Workshop metadata and may be temporarily unavailable if the Workshop data shape changes.