Skip to main content

REST API

TinyEmulator backend (retro-server) provides a REST API for game management, cloud saves, and netplay.

Overview

The REST API is available when you self-host the TinyEmulator backend. The API provides endpoints for:

  • Game metadata and listings
  • Cloud save storage
  • User favorites
  • Netplay room management
  • Cheat code lookup
info

To use the REST API, you need to self-host the TinyEmulator backend server.

Authentication

Protected endpoints require JWT Bearer token authentication:

Authorization: Bearer <your_jwt_token>

Login

POST /api/v1/auth/login
Content-Type: application/json

{
"username": "your_username",
"password": "your_password"
}

Response:

{
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": 1,
"username": "your_username",
"avatar": "https://..."
}
}

Game Endpoints

Get Home Feed

GET /api/v1/home

Returns featured games, banners, and categories.

Get Game by UUID

GET /api/v1/game/:uuid

Cloud Save Endpoints

Upload Save

POST /api/v1/cloudsave/upload
Authorization: Bearer <token>
Content-Type: multipart/form-data

file: <save_file>
slot: 0
game_id: <game_uuid>

List Saves

GET /api/v1/cloudsave/list?game_id=<game_uuid>
Authorization: Bearer <token>

Download Save

GET /api/v1/cloudsave/download?game_id=<game_uuid>&slot=0
Authorization: Bearer <token>

Favorites Endpoints

Get Favorites

GET /api/v1/me/favorites
Authorization: Bearer <token>

Add Favorite

POST /api/v1/me/favorites
Authorization: Bearer <token>
Content-Type: application/json

{
"game_id": "<game_uuid>"
}

Remove Favorite

DELETE /api/v1/me/favorites/:game_id
Authorization: Bearer <token>

Cheats Endpoints

Search by CRC32

GET /api/v1/cheats/crc/:crc

Search by Game Name

GET /api/v1/cheats/name/:name

Get Cheats by System

GET /api/v1/cheats/system/:system

Systems: nes, snes, gba, genesis, arcade

Room Endpoints

Search Rooms

GET /api/v1/rooms?keyword=&core=&page=1&pagesize=20

Create Room

POST /api/v1/rooms
Authorization: Bearer <token>
Content-Type: application/json

{
"core": "nes",
"game": "Super Mario Bros",
"password": ""
}
POST /api/v1/short
Content-Type: application/json

{
"url": "https://play.tinyemulator.com?core=nes&rom=game.nes"
}

Response:

{
"code": "abc123"
}

Error Responses

All endpoints return standard HTTP status codes:

StatusDescription
200Success
201Created
400Bad request
401Unauthorized
403Forbidden
404Not found
500Server error

Error response body:

{
"error": "Error message here"
}