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
}
| HTTP | error | Meaning |
|---|---|---|
| 400 | invalid_query / invalid_id | Bad request parameters |
| 404 | not_found | Resource doesn't exist |
| 405 | method_not_allowed | Only GET is supported |
| 429 | rate_limited | Rate limit exceeded |
| 503 | db_unavailable | Backend storage temporarily down |
/api/v1/roms
List ROMs. Paginated, filterable, sortable.
Query parameters
| Param | Type | Default | Description |
|---|---|---|---|
vendor | string | — | AMD · Intel |
platform | string | — | AM5, LGA1851, … |
expo | string | — | 1.0 · 1.1 · 1.2 |
xmp | string | — | 1.0 · 2.0 · 3.0 |
sort | string | created | created · updated · view_count · board · vendor |
page | int | 1 | Page number, ≥ 1 |
per_page | int | 20 | Page 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 }
}
}
/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).
/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
/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
/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
/api/v1/agesa
All AGESA versions with ROM counts and changelog-entry counts.
curl https://bios-mod.online/api/v1/agesa
/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'
/api/v1/csme
All Intel CSME versions with ROM counts and changelog-entry counts.
curl https://bios-mod.online/api/v1/csme
/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'
/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 }
}
/api/v1/search
Full-text search across vendor, board_vendor, board_family, board_model, filename, bios_version. Min query length: 2 chars. Max 50 results.
Query parameters
| Param | Type | Description |
|---|---|---|
q | string | Search query (required, min 2 chars) |
curl 'https://bios-mod.online/api/v1/search?q=X870E'
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
| Date | Version | Change |
|---|---|---|
| 2026-05-11 | v1.0 | Initial release — 11 endpoints, CORS, rate limiting. |