Arma Reforger Mods API

A documented, read-only Arma Reforger Workshop metadata API for mod search, details, dependencies, versions, scenarios, and server-tool integrations.

A server dashboard built on the Reforger Mods API

What the API provides

The API exposes cached Workshop mod previews, search results, full mod details, dependencies, scenarios, refresh-job status, and rate-limit information. It is built for server panels, bots, dashboards, config tools, and community websites that need Workshop metadata without scraping pages directly.

Base URL

https://api.reforgermods.net/v1

First request

curl 'https://api.reforgermods.net/v1/mods?search=radio&sort=newest'

List and search responses return mod previews with names, authors, IDs, sizes, ratings, and links. Fetch full details, including dependencies and scenarios, for one mod:

curl 'https://api.reforgermods.net/v1/mod/5965550F24A0C152'

Authentication and API keys

Anonymous access is available for public cached reads. Paid API keys can be sent with X-API-Key or Authorization: Bearer and are managed from the account area after checkout.

Rate limits

Anonymous access currently allows 60 requests per minute per resolved client IP with a burst of 20. Developer plans use 300 requests per minute with a burst of 30, and Pro plans use 1,200 requests per minute with a burst of 120. Paid limits are shared across all active keys on the same account.

Cached and indexed data

Responses are cached to keep the API responsive and to reduce repeated Workshop requests. Cached data can be stale by design, so integrations should show update dates where useful and avoid treating the API as an ownership or moderation authority.

202 Accepted and refresh jobs

If a cold-cache request returns 202 Accepted, the API has accepted a background refresh job. Wait the number of seconds in Retry-After, then retry the same URL. You can also inspect the Location job URL, but most clients only need to retry the original request.

import time
import requests

def get_json(url, attempts=4):
    headers = {"User-Agent": "my-tool/1.0 ([email protected])"}
    for _ in range(attempts):
        response = requests.get(url, headers=headers, timeout=15)
        if response.status_code == 202:
            time.sleep(int(response.headers.get("Retry-After", "2")))
            continue
        response.raise_for_status()
        return response.json()
    raise RuntimeError("Workshop data is still refreshing")

mods = get_json("https://api.reforgermods.net/v1/mods?search=radio")

Integration use cases

  • Server hosting panels that need mod names, IDs, versions, and dependency hints.
  • Discord bots that search Workshop mods or show detail cards.
  • Config generators and validators that resolve mod IDs without scraping.
  • Community dashboards that link back to official Workshop pages.

Code examples

The examples above cover basic search, mod detail fetches, and cold-cache retries. The full API reference includes every endpoint, parameter, response shape, header, and error code.

Be a good client

  • Send an identifying User-Agent or X-API-Client header with a contact hint, so traffic can be attributed and never mistaken for abuse.
  • Respect Retry-After on 202, 429, and 503 responses, and cap your retries.
  • Anonymous clients get 60 requests per minute per IP by default; batch and cache instead of polling.
  • Use the ETag and Cache-Control headers: send If-None-Match to get cheap 304 Not Modified responses for unchanged data.

Go deeper

The API also powers the mod browser, config generator, and config validator on this site, so tool behavior and API behavior always match.

Frequently asked questions

Is the Reforger Mods API official?

No. It is an independent, unofficial API that normalizes metadata from public Arma Reforger Workshop pages. It links back to the official Workshop and is not affiliated with Bohemia Interactive.

Is the API free to use?

Yes. Anonymous clients get 60 requests per minute per IP by default. Cache responses on your side, respect Retry-After, and send an identifying User-Agent or X-API-Client header.

Why do some requests return 202 Accepted?

A 202 means the data was not cached yet and a background refresh job was queued. Wait the number of seconds in the Retry-After header, then retry the same URL. It is not an error.