API v2

Reforger Mods API V2

Last updated:

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.

Base URL:https://api.reforgermods.net/v2

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

GET

/v2/health

Returns process health only. It does not request Workshop data.

200 OK
{
  "status": "success",
  "data": { "code": 200, "alive": true }
}
GET

/v2/mods

Returns V2 mod previews. Pagination, search, sorting, and tag filters are query parameters on this endpoint.

ParameterDescription
pageOptional positive page number. Defaults to 1.
searchPreferred V2 search text parameter.
query, q, sAccepted search aliases for compatibility.
sortOptional sort value. Valid values are popularity, most-rated, newest, created, recently-updated, highest-rated, subscribers, version_size, largest, and name.
tagsOptional Workshop tag filter. Repeat for multiple tags, for example ?tags=SCENARIOS&tags=TERRAIN.
categoryCompatibility alias for a single tags value. New clients should prefer tags.
Request
curl -H "User-Agent: my-bot/2.0.0" \
  "https://api.reforgermods.net/v2/mods?page=2&search=radio&sort=newest"
Tag filter
curl -H "User-Agent: my-bot/2.0.0" \
  "https://api.reforgermods.net/v2/mods?search=map&tags=SCENARIOS&tags=TERRAIN"
200 OK
{
  "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.

GET

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

Request
curl -H "User-Agent: my-bot/2.0.0" \
  "https://api.reforgermods.net/v2/mods/5965550F24A0C152"
200 OK
{
  "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"
  }
}
FieldNote
sizeRaw byte count for the current Workshop version.
dependencySizeRaw byte count for known direct dependencies.
totalSizesize plus known direct dependency bytes.
dependenciesDirect dependencies for the current mod version. The dedicated /dependencies endpoint returns the same list with dependency totals.
scenariosScenarios included with the mod. The dedicated /scenarios endpoint remains available for clients that want only scenario data.
versionsNot included in mod detail. Use /versions or /versions/{version} for version history and version-specific changelogs.
*FormattedDisplay-ready IEC values derived from the matching byte fields.
downloadCountOmitted when unknown. It is not fabricated as 0.
blocked, reportedNot exposed in V2. Full license text is only returned by the dedicated /license subresource.
GET

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

Request
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/versions"
200 OK
{
  "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.

GET

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

Request
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/versions/1.2.3"
200 OK
{
  "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.

GET

/v2/mods/{id}/dependencies

Returns direct dependencies reported for the current mod version. Dependency totals are based on known direct dependency sizes only.

Request
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/dependencies"
200 OK
{
  "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.

GET

/v2/mods/{id}/scenarios

Returns scenarios included with the Workshop mod. Localization keys such as #AR-* are returned as-is.

Request
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/scenarios"
200 OK
{
  "status": "success",
  "data": {
    "modId": "5965550F24A0C152",
    "count": 11,
    "scenarios": [ { "...": "scenario objects" } ]
  }
}
GET

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

Request
curl "https://api.reforgermods.net/v2/mods/5965550F24A0C152/license"
200 OK
{
  "status": "success",
  "data": {
    "modId": "5965550F24A0C152",
    "license": "Custom license",
    "licenseText": "Full license text…"
  }
}
GET

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

ParameterDescription
page, perPageOptional pagination. perPage is capped at 100.
searchCase-insensitive search across server and scenario names.
sortplayers, name, newest, or lastSeen.
region, platformFilter by ping site or supported client platform. Friendly platforms are pc, xbox, and psn.
official, hasMods, includeOfflineBoolean filters for official servers, modded servers, and offline entries.
battleye, lockedBoolean filters for BattlEye-protected servers and password-protected servers.
Request
curl "https://api.reforgermods.net/v2/servers?sort=players&hasMods=true"
200 OK
{
  "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"
  }
}
GET

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

Request
curl "https://api.reforgermods.net/v2/servers/{room_id}"
200 OK
{
  "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,
    "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",
    "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.

GET

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

Request
curl "https://api.reforgermods.net/v2/servers/{room_id}/mods"
GET

/v2/servers/{id}/history

Returns historical player activity buckets for one server. Valid ranges are 24h, 7d, and 30d.

Request
curl "https://api.reforgermods.net/v2/servers/{room_id}/history?range=24h"
GET

/v2/rate-limits

Returns the rate-limit tier resolved for the request. This route uses the same utility response shape as V1.

200 OK
{
  "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
  }
}
GET

/v2/refresh/jobs/{id}

Inspects background refresh progress when a refresh job is created. This route uses the same utility response shape as V1.

200 OK
{
  "id": "9f0b7d0f6fd4f88a8bb0e455f0b640247a93",
  "status": "queued",
  "resource_url": "/v2/mods?search=radio",
  "retry_after_seconds": 2
}
POST

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

Request
{
  "current": [{ "id": "5965550F24A0C152", "version": "1.0.0" }],
  "desired": [{ "id": "597706D1E4C7BAAD" }],
  "mode": "add",
  "budgetBytes": 107374182400,
  "includeRemovalImpact": true
}
200 OK (abridged)
{
  "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.

POST

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

Request
{
  "mods": [
    { "id": "5965550F24A0C152", "version": "1.0.0" },
    { "id": "597706D1E4C7BAAD", "version": "2.1.0" }
  ],
  "targetIds": ["5965550F24A0C152"],
  "includeAll": false
}
200 OK (abridged)
{
  "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.

POST

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

Request
{
  "slots": 64,
  "concurrentPlayers": 48,
  "scenario": "heavy",
  "logRetentionDays": 14,
  "backupCopies": 1,
  "mods": [{ "id": "5965550F24A0C152", "version": "1.0.0" }]
}
200 OK (abridged)
{
  "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

V2 list response
{
  "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.

V2 preview
{
  "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.

Version history
{
  "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.

Mod version
{
  "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.

Version detail
{
  "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

Dependency
{
  "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

Scenario
{
  "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

V1V2
/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.