OTA Catalog API
Public, read-only catalog of OTA entries from the OnePlus ROM and firmware archive.
GET · HEAD · OPTIONS
CORS enabled
300 s cache
ETag / HTTP 304
Filters
deviceFilter by the device label, case-insensitive.regionFilter by the region code, case-insensitive.modelFilter by the canonical model code, case-insensitive.idReturn the release with this ID.latestSet to 1 to return only the newest release for each matching device and region.sinceReturn releases with a vendor build timestamp newer than this ISO 8601 date or timestamp.Efficient update checks
Keep the response ETag and send it with the next request:
If-None-Match: "stored-etag"An unchanged catalog returns HTTP 304 without a response body. A polling interval of at least 900 seconds is recommended.
Examples
https://roms.danielspringer.at/api/ota.phphttps://roms.danielspringer.at/api/ota.php?device=OP+13https://roms.danielspringer.at/api/ota.php?device=OP+13®ion=EUhttps://roms.danielspringer.at/api/ota.php?model=CPH2653https://roms.danielspringer.at/api/ota.php?device=OP+13®ion=EU&latest=1https://roms.danielspringer.at/api/ota.php?since=2026-07-01https://roms.danielspringer.at/api/ota.php?id=RELEASE_IDRelease fields
idStable identifier for this catalog entry.deviceDevice label.regionOTA region code.modelCanonical device model code extracted from the OTA metadata.versionHuman-readable release version.ota_versionOTA package version from the catalog.build_timestampVendor build timestamp extracted from ota_version; timezone unspecified.security_patchAndroid security patch level, when available.source_urlUnresolved source URL stored in the catalog.changelog_urlRelease changelog URL, when available.is_latestWhether this is the newest catalog entry for its device and region.Important details
- source_url is the URL stored in ota_config.ini.
- The API does not resolve redirects or generate temporary CDN links.
- Use + for every space in device names: OPPO FIND X8 PRO becomes OPPO+FIND+X8+PRO.
- Query parameter values should be URL-encoded.
- Filters can be combined and are applied with AND semantics.
- build_timestamp is extracted from ota_version. Its timezone is not declared by the vendor, so it is not a publication timestamp.
- since compares the vendor build timestamp, exclusively. A date means midnight UTC for comparison purposes.
- is_latest and latest=1 use the vendor build timestamp, with the natural version order as a deterministic fallback.
- Without latest=1, releases retain the original natural ascending device, region, and version ordering.
- For efficient polling, store the ETag and send it back in If-None-Match. An unchanged catalog returns HTTP 304.