// API · DEVELOPER · v1

Build with bios-mod.

A read-only REST API exposing the bios-mod.online dataset: BIOS analyses, AGESA & CSME changelogs, EXPO/XMP memory profiles, firmware-init libraries. JSON. No auth. CORS enabled. 60 req/min/IP.

11
Endpoints
60
Req / min / IP
v1
Current Version
CORS · Public · Free

Getting started

The API is live at https://bios-mod.online/api/v1/. No authentication, no API keys, no signup. Just call it.

# Try it now:
curl https://bios-mod.online/api/v1/stats

If URL rewriting isn't enabled on the server (default), the same call works as https://bios-mod.online/api.php?path=v1/stats. See URL rewriting for the IIS / Apache snippet.

Rate limits

60 requests per minute per IP. Counter resets on a sliding 60-second window. Every response includes headers:

X-RateLimit-Limit:     60
X-RateLimit-Remaining: 47
X-Api-Version:         v1

When exceeded you get HTTP 429 with a Retry-After header and JSON body:

{
  "ok": false,
  "error": "rate_limited",
  "message": "Rate limit exceeded. Try again in 42s.",
  "code": 429,
  "retry_after_seconds": 42
}

Response format

Every successful response follows this envelope:

{
  "ok": true,
  "data": { ... resource ... },
  "meta": {
    "time_ms": 23,
    "pagination": { "total": 156, "page": 1, "per_page": 20, "pages": 8 }
  }
}

data can be an object, array, or scalar depending on the endpoint. meta always contains time_ms and, on paginated endpoints, pagination.

Errors

Errors use the same envelope with ok: false:

{
  "ok": false,
  "error": "not_found",
  "message": "ROM with id=999 not found",
  "code": 404
}
HTTPerrorMeaning
400invalid_query / invalid_idBad request parameters
404not_foundResource doesn't exist
405method_not_allowedOnly GET is supported
429rate_limitedRate limit exceeded
503db_unavailableBackend storage temporarily down
GET /api/v1/roms

List ROMs. Paginated, filterable, sortable.

Query parameters

ParamTypeDefaultDescription
vendorstringAMD · Intel
platformstringAM5, LGA1851, …
expostring1.0 · 1.1 · 1.2
xmpstring1.0 · 2.0 · 3.0
sortstringcreatedcreated · updated · view_count · board · vendor
pageint1Page number, ≥ 1
per_pageint20Page size, max 100

Example

curl 'https://bios-mod.online/api/v1/roms?vendor=AMD&expo=1.2&per_page=5'

Response (truncated)

{
  "ok": true,
  "data": [
    {
      "id": 42,
      "vendor": "AMD",
      "board_vendor": "ASRock",
      "board_family": "Taichi",
      "board_model": "X870E Taichi",
      "platform": "AM5",
      "bios_version": "3.05",
      "agesa_version": "ComboAm5PI 1.2.0.3a",
      "me_version": "",
      "filename": "X870ETaichi_3.05.zip",
      "file_size": 33554432,
      "settings_count": 3208,
      "hidden_count": 2847,
      "expo_generation": "1.2_active",
      "xmp_generation": null,
      "firmware_init_lib": "agesa",
      "view_count": 1247,
      "is_latest": true,
      "created_at": "2026-04-15 12:34:56",
      "url": "/api/v1/roms/42",
      "html_url": "/bios.php?id=42"
    }
  ],
  "meta": {
    "time_ms": 18,
    "pagination": { "total": 42, "page": 1, "per_page": 5, "pages": 9 }
  }
}
GET /api/v1/roms/{id}

Returns full detail for a single ROM. Adds sub-resource URLs for further drill-down.

Example

curl https://bios-mod.online/api/v1/roms/14

Response fields

Includes vendor, board_vendor, board_family, board_model, board_key, platform, cpu_vendor, bios_version, agesa_version, me_version (Intel ME / CSME), sha256, rom_size_mb, counts (settings, hidden, visible, forms, strings, varstores, probes, microcodes), EXPO/XMP metadata, firmware-init library, is_latest, view_count, created_at, plus self-links (microcode_url, memory_url, firmware_init_url).

GET /api/v1/roms/{id}/microcode

Microcode inventory: one entry per CPU-ID, with revision history per ROM.

curl https://bios-mod.online/api/v1/roms/14/microcode
GET /api/v1/roms/{id}/memory

EXPO (AMD) and XMP (Intel) memory features. Returns generation, confidence, profile counts and detected DIMM types.

curl https://bios-mod.online/api/v1/roms/14/memory
GET /api/v1/roms/{id}/firmware-init

Firmware initialization library: AGESA, openSIL, Hybrid (transition phase) or unknown.

curl https://bios-mod.online/api/v1/roms/14/firmware-init
GET /api/v1/agesa

All AGESA versions with ROM counts and changelog-entry counts.

curl https://bios-mod.online/api/v1/agesa
GET /api/v1/agesa/{version}

Version-specific detail with full changelog (changes, security fixes, known CVEs).

curl 'https://bios-mod.online/api/v1/agesa/ComboAm5PI%201.2.0.3a'
GET /api/v1/csme

All Intel CSME versions with ROM counts and changelog-entry counts.

curl https://bios-mod.online/api/v1/csme
GET /api/v1/csme/{version}

Detail with changelog. Useful for tracking Intel security advisories (SA-NNNNN).

curl 'https://bios-mod.online/api/v1/csme/v18.0.0.5'
GET /api/v1/stats

One-shot platform summary: total ROMs, AMD/Intel split, verification rate, EXPO/XMP distribution, firmware-init breakdown, latest AGESA & CSME.

curl https://bios-mod.online/api/v1/stats

Response shape

{
  "ok": true,
  "data": {
    "totals":  { "roms": 247, "amd_roms": 128, "intel_roms": 119, ... },
    "expo":    { "1.0": 61, "1.1": 25, "1.2": 42 },
    "xmp":     { "1.0": 0,  "2.0": 88, "3.0": 87 },
    "firmware_init": { "agesa": 128, "opensil": 0, "hybrid": 0 },
    "latest":  { "agesa": "1.2.0.3a", "csme": "v18.0.0.5", ... }
  },
  "meta": { "time_ms": 12 }
}

URL rewriting (optional)

Without rewriting, all routes work via ?path=: https://bios-mod.online/api.php?path=v1/roms. For cleaner URLs (/api/v1/roms), add one of these:

IIS — web.config

<!-- Zwei separate Rules verhindern dass `api-docs.php` versehentlich
     gematcht wird (häufiger Fallstrick mit `api/?(.*)$`-Patterns). -->
<rule name="API v1 root" stopProcessing="true">
  <match url="^api/?$" />
  <action type="Rewrite" url="api.php" appendQueryString="true" />
</rule>
<rule name="API v1 subpaths" stopProcessing="true">
  <match url="^api/(.+)$" />
  <action type="Rewrite" url="api.php?path={R:1}" appendQueryString="true" />
</rule>

Apache — .htaccess

RewriteEngine On
RewriteRule ^api/(.+)$ api.php?path=$1 [QSA,L]

API changelog

DateVersionChange
2026-05-11v1.0Initial release — 11 endpoints, CORS, rate limiting.