This site can embed mod preview images directly from ar-gcp-cdn.bistudio.com (Bohemia Interactive CDN) — without downloading to our servers. Load external content?

API Documentation

Welcome to the Better Arma Workshop API. Our API follows REST principles, returns JSON, and uses standard HTTP response codes.

Base URL:

Authentication

Login (JWT)

To obtain a session token, use the login endpoint.

POST /api/v1/auth/login
Request Body
{
  "email": "user@example.com",
  "password": "yourpassword"
}
Success Response
{
  "token": "eyJhbGciOi...",
  "user": {
    "user_id": "...",
    "display_name": "Ghost"
  }
}

Include the token in your headers: Authorization: Bearer <token>

API Keys

For long-term integration, use API Keys in the X-API-Key header.

Mods

GET /api/v1/mods

Query: search, tag, sort, page, limit

Example Response
{
  "mods": [
    {
      "workshop_id": "5965550FD8C7F516",
      "name": "RHS Status Quo",
      "version": "0.9.1",
      "size_bytes": 1450000000,
      "image_url": "https://...",
      "tags": ["Conversion", "Realism"]
    }
  ],
  "total": 1250,
  "pages": 63
}
GET /api/v1/mods/:workshopID

Returns complete metadata including dependency_ids and external_links.

Sub-Resources
Endpoint Description
/items Extracted items (weapons, vehicles, gear). Supports ?type=... and ?version=...
/missions Extracted missions/scenarios. Supports ?version=...
/deps Detailed dependency list including sizes.
/versions Complete version history and changelogs.
/screenshots Gallery of official screenshots.
/item-versions List of versions that have extracted item data.

Mod Lists

POST /api/v1/lists Auth Required
Request Body
{
  "name": "Tactical Ops",
  "description": "Server preset V2",
  "is_public": true
}
Response Body
{
  "id": "uuid-...",
  "share_token": "uuid-...",
  "suggestion_token": "uuid-..."
}
Managing Mods in a List
POST /api/v1/lists/:id/mods Auth

Add a mod by its Workshop ID. If the mod is not in our database yet, a scraping job will be triggered automatically.

{ "workshop_id": "5965550FD8C7F516" }
DELETE /api/v1/lists/:id/mods/:workshopID Auth

Remove a mod from the list.

Import from server.json

You can sync your local server.json with a list. The API provides a preview (diff) before changes are applied manually via individual POST requests.

POST /api/v1/lists/:id/import-preview Auth
Request Body (server.json)
{
  "game": {
    "mods": [
      {
        "modId": "5965550FD8C7F516",
        "name": "RHS Status Quo",
        "version": "0.9.1"
      }
    ]
  }
}
Diff Response
{
  "added": [
    {
      "workshop_id": "5965550FD8C7F516",
      "name": "RHS Status Quo",
      "version": "0.9.1",
      "size_bytes": 1450000000,
      "in_catalog": true
    }
  ],
  "removed": [
    { "workshop_id": "...", "name": "..." }
  ],
  "version_changed": [],
  "not_in_catalog": []
}
Note: To apply the changes, the client should iterate over the added and not_in_catalog lists and call the POST /api/v1/lists/:id/mods endpoint for each.

Suggestions

POST /api/v1/lists/:id/suggestions Auth Required

Submit a mod for consideration. If the list has custom form fields, they must be included in form_answers.

{
  "workshop_id": "5965550FD8C7F516",
  "reason": "Essential for medical gameplay",
  "form_answers": {
    "uuid-field-1": "High Priority",
    "uuid-field-2": true
  }
}

Jobs & Scrapers

POST /api/v1/jobs/scraper/detail Rate Limit: 10/h

Request an immediate update/scrape for a specific mod. Limited to 10 requests per hour per IP.

{ "workshop_id": "5965550FD8C7F516" }

Error Codes

CodeReasonTypical JSON Body
400 Bad Request {"error": "invalid workshop ID"}
401 Unauthorized {"error": "unauthorized"}
403 Forbidden {"error": "no permission"}
422 Unprocessable {"error": "Mod age exceeds list limits"}
429 Rate Limit {"error": "too many requests"}