RomM stores save files and save states server-side, making your game progress accessible from any device. The Saves API managesDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/rommapp/romm/llms.txt
Use this file to discover all available pages before exploring further.
.sav and related files created by emulators during gameplay, while the States API manages full save-state snapshots (emulator memory dumps). Both support optional screenshot attachments and device-based sync tracking.
Save Files
POST /api/saves
Upload a save file for a ROM. Acceptsmultipart/form-data.
Required scope: assets.write
Internal ID of the ROM this save belongs to.
Emulator identifier (e.g.
mgba, snes9x). Used to organise saves by emulator.Save slot label (e.g.
slot1, auto). When set, RomM appends a datetime tag to the filename so multiple saves per slot are preserved.Device UUID to associate with this upload. Requires
devices.write scope. Enables sync-conflict detection.Sync session ID for operation counting.
When
true, skips conflict detection and overwrites the existing save unconditionally.When
true, automatically deletes old saves beyond autocleanup_limit in the same slot.Maximum number of saves to keep per slot when
autocleanup=true.The save file to upload.
Optional screenshot to associate with this save (shown in the continue-playing rail).
SaveSchema object.
Internal save ID.
Associated ROM ID.
Owner user ID.
Stored filename (may include datetime tag for slot saves).
Directory path on the server.
File size in bytes.
Emulator the save was created with.
Slot label.
Hash of the file content for deduplication.
Whether the save is publicly downloadable.
List of device sync records showing which devices have this save and whether they are current.
ISO 8601 creation timestamp.
ISO 8601 last-updated timestamp.
When
device_id is provided and the slot already contains a newer save since the device’s last sync, the upload is rejected with 409 Conflict to prevent overwriting progress. Pass overwrite=true to bypass this guard.GET /api/saves
List save files for the current user. Required scope:assets.read
Filter to saves for a specific ROM.
Filter to saves for all ROMs on a platform.
Filter with device sync information. Requires
devices.read scope.Filter to a specific save slot.
GET /api/saves/identifiers
Retrieve only the IDs of the current user’s saves. Required scope:assets.read
GET /api/saves/summary
Retrieve a summary of saves for a ROM, grouped by slot. Required scope:assets.read
ROM internal ID.
GET /api/saves/
Retrieve a single save by ID. Required scope:assets.read
Save internal ID.
Include device sync information. Requires
devices.read scope.GET /api/saves//content
Download a save file. The owner can download any of their saves. Other authenticated users can only download saves markedis_public=true.
Required scope: assets.read
Save internal ID.
Device ID — records an optimistic sync timestamp on download. Requires
devices.read scope.Sync session ID for operation counting.
When
true and a device is provided, marks the save as synced on download.PUT /api/saves/
Update a save file’s content or replace its associated screenshot. Required scope:assets.write
Save internal ID.
Device ID for sync tracking. Requires
devices.write scope.Replacement save file.
Replacement screenshot.
PUT /api/saves//visibility
Toggle a save’s public/private visibility. Owner only. Required scope:assets.write
Save internal ID.
New visibility state.
POST /api/saves/delete
Delete one or more saves and their associated screenshot files. Required scope:assets.write
List of save IDs to delete.
POST /api/saves//downloaded
Confirm that a save was successfully downloaded by a device (non-optimistic sync confirmation). Required scope:devices.write
Save internal ID.
Device UUID confirming the download.
POST /api/saves//track / POST /api/saves//untrack
Enable or disable sync tracking for a save on a specific device. Required scope:devices.write
Save internal ID.
Device UUID.
Save States
Save states are full emulator memory snapshots. The States API mirrors the Saves API in structure but without slot or sync-conflict logic.POST /api/states
Upload a save state for a ROM. Required scope:assets.write
ROM internal ID.
Emulator identifier.
Save state file to upload.
Optional screenshot.
StateSchema object.
Internal state ID.
Associated ROM ID.
Owner user ID.
Stored filename.
File size in bytes.
Emulator the state was created with.
Whether the state is publicly downloadable.
ISO 8601 creation timestamp.
ISO 8601 last-updated timestamp.
GET /api/states
List save states for the current user. Required scope:assets.read
Filter to states for a specific ROM.
Filter to states for all ROMs on a platform.
GET /api/states/identifiers
Retrieve only the IDs of the current user’s save states. Required scope:assets.read
GET /api/states/
Retrieve a single save state by ID. Required scope:assets.read
GET /api/states//content
Download a save state file. Owner downloads any; others only download public states. Required scope:assets.read
PUT /api/states/
Update a save state’s content or screenshot. Required scope:assets.write
State internal ID.
Replacement state file.
Replacement screenshot.
PUT /api/states//visibility
Toggle a state’s public/private visibility (owner only). Required scope:assets.write
State internal ID.
New visibility state.
POST /api/states/delete
Delete one or more save states. Required scope:assets.write
List of state IDs to delete.