EmuReady Logo
EmuReady

Know before you load

HomeHandheldPC
HomeHandheldPC
Loading...

EmuReady

Know before you load. The ultimate community-driven platform for emulation compatibility reports.

Apps

EmuReady Beta App

Google Play

EmuReady App

GitHub releases

Ko-fi

About

  • About
  • Support
  • Privacy Policy
  • Terms of Service

Community

  • Contribute
  • Add Your Emulator
  • GitHub
  • Discord
  • Patreon

© EmuReady. All rights reserved.

Built with ❤️ by your mom

EmuReady Mobile API Reference

Documentation for the API including router summaries, authentication, and usage examples.

# EmuReady Public Integration API (mobile-compatible tRPC) *Auto-generated on: 2026-07-06T20:07:17.160Z* ## Summary - **Total Endpoints**: 113 - **Public Endpoints**: 65 - **Protected Endpoints**: 48 - **OpenAPI Version**: 3.0.0 ## Base URL `/api/mobile/trpc` ## Authentication Protected endpoints require Bearer token authentication using Clerk JWT. Public integration requests can also include an issued API key in `x-api-key`. ## Interactive Documentation - **Swagger UI**: [/docs/api/swagger](https://emuready.com/docs/api/swagger) - **OpenAPI JSON**: [/api-docs/mobile-openapi.json](https://emuready.com/api-docs/mobile-openapi.json) ## Endpoints ### Public Endpoints (No Authentication Required) #### 1. **validateToken** - **Method**: GET - **Path**: `/auth.validateToken` - **Description**: Validate JWT token - **Tags**: auth #### 2. **getDeviceCompatibility** - **Method**: GET - **Path**: `/catalog.getDeviceCompatibility` - **Description**: Get device compatibility scores by system Returns aggregated compatibility scores (0-100) for each system tested on a device. Scores are calculated from: - Performance ratings from authors - Community votes (Wilson score) - Developer verifications Results are cached for 15 minutes to reduce server load. - **Tags**: catalog #### 3. **get** - **Method**: GET - **Path**: `/cpus.get` - **Description**: Get CPUs with search, filtering, and pagination. - **Tags**: cpus #### 4. **getById** - **Method**: GET - **Path**: `/cpus.getById` - **Description**: Get CPU by ID. - **Tags**: cpus #### 5. **getByEmulator** - **Method**: GET - **Path**: `/customFieldDefinitions.getByEmulator` - **Description**: Get custom field definitions by emulator (for mobile listing creation) - **Tags**: customFieldDefinitions #### 6. **get** - **Method**: GET - **Path**: `/deviceBrands.get` - **Description**: Get device brands with search and sorting - **Tags**: deviceBrands #### 7. **getById** - **Method**: GET - **Path**: `/deviceBrands.getById` - **Description**: Get device brand by ID - **Tags**: deviceBrands #### 8. **get** - **Method**: GET - **Path**: `/devices.get` - **Description**: Get devices with optional search, brand filtering, and pagination - **Tags**: devices #### 9. **brands** - **Method**: GET - **Path**: `/devices.brands` - **Description**: Get all device brands sorted alphabetically - **Tags**: devices #### 10. **socs** - **Method**: GET - **Path**: `/devices.socs` - **Description**: Get SOCs (System on Chips) - **Tags**: devices #### 11. **byId** - **Method**: GET - **Path**: `/devices.byId` - **Description**: Get device by ID - **Tags**: devices #### 12. **get** - **Method**: GET - **Path**: `/emulators.get` - **Description**: Get emulators with search and filtering - **Tags**: emulators #### 13. **byId** - **Method**: GET - **Path**: `/emulators.byId` - **Description**: Get emulator by ID - **Tags**: emulators #### 14. **get** - **Method**: GET - **Path**: `/games.get` - **Description**: Get games with search and filtering - **Tags**: games #### 15. **getPopularGames** - **Method**: GET - **Path**: `/games.getPopularGames` - **Description**: Get popular games - **Tags**: games #### 16. **searchGames** - **Method**: GET - **Path**: `/games.searchGames` - **Description**: Search games - **Tags**: games #### 17. **byId** - **Method**: GET - **Path**: `/games.byId` - **Description**: Get game by ID - **Tags**: games #### 18. **findSwitchTitleId** - **Method**: GET - **Path**: `/games.findSwitchTitleId` - **Description**: Find Nintendo Switch title IDs by game name (fuzzy search) - **Tags**: games #### 19. **getBestSwitchTitleId** - **Method**: GET - **Path**: `/games.getBestSwitchTitleId` - **Description**: Get the best matching Nintendo Switch title ID for a game name - **Tags**: games #### 20. **getSwitchGamesStats** - **Method**: GET - **Path**: `/games.getSwitchGamesStats` - **Description**: Get Nintendo Switch games cache statistics - **Tags**: games #### 21. **findThreeDsTitleId** - **Method**: GET - **Path**: `/games.findThreeDsTitleId` - **Description**: Find Nintendo 3DS title IDs by game name (fuzzy search) - **Tags**: games #### 22. **getBestThreeDsTitleId** - **Method**: GET - **Path**: `/games.getBestThreeDsTitleId` - **Description**: Get the best matching Nintendo 3DS title ID for a game name - **Tags**: games #### 23. **getThreeDsGamesStats** - **Method**: GET - **Path**: `/games.getThreeDsGamesStats` - **Description**: Get Nintendo 3DS games cache statistics - **Tags**: games #### 24. **findSteamAppId** - **Method**: GET - **Path**: `/games.findSteamAppId` - **Description**: Find Steam App IDs by game name (fuzzy search) - **Tags**: games #### 25. **getBestSteamAppId** - **Method**: GET - **Path**: `/games.getBestSteamAppId` - **Description**: Get the best matching Steam App ID for a game name - **Tags**: games #### 26. **getSteamGamesStats** - **Method**: GET - **Path**: `/games.getSteamGamesStats` - **Description**: Get Steam games cache statistics - **Tags**: games #### 27. **batchBySteamAppIds** - **Method**: GET - **Path**: `/games.batchBySteamAppIds` - **Description**: Batch lookup games by Steam App IDs Optimized for large batches (up to 1000 Steam App IDs) Returns games with their listings filtered by emulator if specified Results cached for 15 minutes to optimize repeated queries - **Tags**: games #### 28. **stats** - **Method**: GET - **Path**: `/general.stats` - **Description**: Get app statistics - **Tags**: general #### 29. **systems** - **Method**: GET - **Path**: `/general.systems` - **Description**: Get all systems - **Tags**: general #### 30. **performanceScales** - **Method**: GET - **Path**: `/general.performanceScales` - **Description**: Get performance scales - **Tags**: general #### 31. **searchSuggestions** - **Method**: GET - **Path**: `/general.searchSuggestions` - **Description**: Get search suggestions - **Tags**: general #### 32. **trustLevels** - **Method**: GET - **Path**: `/general.trustLevels` - **Description**: Get trust levels (for mobile trust system integration) - **Tags**: general #### 33. **get** - **Method**: GET - **Path**: `/gpus.get` - **Description**: Get GPUs with search, filtering, and pagination. - **Tags**: gpus #### 34. **getById** - **Method**: GET - **Path**: `/gpus.getById` - **Description**: Get GPU by ID. - **Tags**: gpus #### 35. **checkUserHasReports** - **Method**: GET - **Path**: `/listingReports.checkUserHasReports` - **Description**: Check if a user has reports (for showing warnings) - **Tags**: listingReports #### 36. **driverVersions** - **Method**: GET - **Path**: `/listings.driverVersions` - **Description**: Get available driver versions (mirrors web listings.driverVersions) - **Tags**: listings #### 37. **get** - **Method**: GET - **Path**: `/listings.get` - **Description**: Get listings with pagination and filtering - **Tags**: listings #### 38. **getListings** - **Method**: GET - **Path**: `/listings.getListings` - **Description**: Use 'get' instead - kept for backwards compatibility with Eden - **Tags**: listings #### 39. **featured** - **Method**: GET - **Path**: `/listings.featured` - **Description**: Get featured listings - **Tags**: listings #### 40. **byGame** - **Method**: GET - **Path**: `/listings.byGame` - **Description**: Get listings by game - **Tags**: listings #### 41. **byId** - **Method**: GET - **Path**: `/listings.byId` - **Description**: Get listing by ID - **Tags**: listings #### 42. **comments** - **Method**: GET - **Path**: `/listings.comments` - **Description**: Get listing comments - **Tags**: listings #### 43. **getEmulatorConfig** - **Method**: GET - **Path**: `/listings.getEmulatorConfig` - **Description**: Get emulator configuration for a listing Returns the configuration file content that the mobile app can use to launch the game with the correct settings - **Tags**: listings #### 44. **byId** - **Method**: GET - **Path**: `/pcListings.byId` - **Description**: Get a single PC listing by ID (mobile) Matches web visibility rules and returns materialized stats + userVote - **Tags**: pcListings #### 45. **get** - **Method**: GET - **Path**: `/pcListings.get` - **Description**: Get PC listings with pagination and filtering - **Tags**: pcListings #### 46. **cpus** - **Method**: GET - **Path**: `/pcListings.cpus` - **Description**: Get CPUs for PC compatibility report filters. - **Tags**: pcListings #### 47. **gpus** - **Method**: GET - **Path**: `/pcListings.gpus` - **Description**: Get GPUs for PC compatibility report filters. - **Tags**: pcListings #### 48. **searchGameImages** - **Method**: GET - **Path**: `/rawg.searchGameImages` - **Description**: Search for game images in RAWG database - **Tags**: rawg #### 49. **searchGames** - **Method**: GET - **Path**: `/rawg.searchGames` - **Description**: Search for games in RAWG database - **Tags**: rawg #### 50. **getGameImages** - **Method**: GET - **Path**: `/rawg.getGameImages` - **Description**: Get game images by ID - **Tags**: rawg #### 51. **getFollowers** - **Method**: GET - **Path**: `/social.getFollowers` - **Description**: getFollowers - social - **Tags**: social #### 52. **getFollowing** - **Method**: GET - **Path**: `/social.getFollowing` - **Description**: getFollowing - social - **Tags**: social #### 53. **isFollowing** - **Method**: GET - **Path**: `/social.isFollowing` - **Description**: isFollowing - social - **Tags**: social #### 54. **getFollowCounts** - **Method**: GET - **Path**: `/social.getFollowCounts` - **Description**: getFollowCounts - social - **Tags**: social #### 55. **getBulkFollowStatuses** - **Method**: GET - **Path**: `/social.getBulkFollowStatuses` - **Description**: getBulkFollowStatuses - social - **Tags**: social #### 56. **getRelationshipStatus** - **Method**: GET - **Path**: `/social.getRelationshipStatus` - **Description**: getRelationshipStatus - social - **Tags**: social #### 57. **get** - **Method**: GET - **Path**: `/socs.get` - **Description**: Get SoCs with search, filtering, and pagination - **Tags**: socs #### 58. **getById** - **Method**: GET - **Path**: `/socs.getById` - **Description**: Get SoC by ID - **Tags**: socs #### 59. **searchGameImages** - **Method**: GET - **Path**: `/tgdb.searchGameImages` - **Description**: Search for game images in TGDB database - **Tags**: tgdb #### 60. **searchGames** - **Method**: GET - **Path**: `/tgdb.searchGames` - **Description**: Search for games in TGDB database - **Tags**: tgdb #### 61. **getGameImageUrls** - **Method**: GET - **Path**: `/tgdb.getGameImageUrls` - **Description**: Get game image URLs for a specific game - **Tags**: tgdb #### 62. **getGameImages** - **Method**: GET - **Path**: `/tgdb.getGameImages` - **Description**: Get game images by game IDs - **Tags**: tgdb #### 63. **getPlatforms** - **Method**: GET - **Path**: `/tgdb.getPlatforms` - **Description**: Get available platforms from TGDB - **Tags**: tgdb #### 64. **userInfo** - **Method**: GET - **Path**: `/trust.userInfo` - **Description**: Get trust info for a specific user (public) - **Tags**: trust #### 65. **byId** - **Method**: GET - **Path**: `/users.byId` - **Description**: Get user profile by ID (public user profiles) - **Tags**: users ### Protected Endpoints (Authentication Required) #### 1. **getSession** - **Method**: GET - **Path**: `/auth.getSession` - **Description**: Get current user session info - **Tags**: auth - **Authentication**: Bearer token required #### 2. **updateProfile** - **Method**: POST - **Path**: `/auth.updateProfile` - **Description**: Update mobile profile - **Tags**: auth - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 3. **deleteAccount** - **Method**: POST - **Path**: `/auth.deleteAccount` - **Description**: Delete account - **Tags**: auth - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 4. **isVerifiedDeveloper** - **Method**: GET - **Path**: `/developers.isVerifiedDeveloper` - **Description**: Check if a user is a verified developer for an emulator - **Tags**: developers - **Authentication**: Bearer token required #### 5. **create** - **Method**: POST - **Path**: `/listingReports.create` - **Description**: create - listingReports - **Tags**: listingReports - **Authentication**: Bearer token required #### 6. **byUser** - **Method**: GET - **Path**: `/listings.byUser` - **Description**: Get user listings - **Tags**: listings - **Authentication**: Bearer token required #### 7. **create** - **Method**: POST - **Path**: `/listings.create` - **Description**: Create a new listing - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 8. **update** - **Method**: POST - **Path**: `/listings.update` - **Description**: Update a listing - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 9. **delete** - **Method**: POST - **Path**: `/listings.delete` - **Description**: Delete a listing - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 10. **vote** - **Method**: POST - **Path**: `/listings.vote` - **Description**: Vote on a listing - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 11. **userVote** - **Method**: GET - **Path**: `/listings.userVote` - **Description**: Get user's vote on a listing - **Tags**: listings - **Authentication**: Bearer token required #### 12. **createComment** - **Method**: POST - **Path**: `/listings.createComment` - **Description**: Create a comment - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 13. **updateComment** - **Method**: POST - **Path**: `/listings.updateComment` - **Description**: Update a comment - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 14. **deleteComment** - **Method**: POST - **Path**: `/listings.deleteComment` - **Description**: Delete a comment - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 15. **voteComment** - **Method**: POST - **Path**: `/listings.voteComment` - **Description**: Vote on a comment - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 16. **getUserCommentVotes** - **Method**: GET - **Path**: `/listings.getUserCommentVotes` - **Description**: Get user votes for multiple comments - **Tags**: listings - **Authentication**: Bearer token required #### 17. **reportComment** - **Method**: POST - **Path**: `/listings.reportComment` - **Description**: Report a comment - **Tags**: listings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 18. **get** - **Method**: GET - **Path**: `/notifications.get` - **Description**: Get notifications with pagination - **Tags**: notifications - **Authentication**: Bearer token required #### 19. **unreadCount** - **Method**: GET - **Path**: `/notifications.unreadCount` - **Description**: Get unread notification count - **Tags**: notifications - **Authentication**: Bearer token required #### 20. **markAsRead** - **Method**: POST - **Path**: `/notifications.markAsRead` - **Description**: Mark notification as read - **Tags**: notifications - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 21. **markAllAsRead** - **Method**: POST - **Path**: `/notifications.markAllAsRead` - **Description**: Mark all notifications as read - **Tags**: notifications - **Authentication**: Bearer token required #### 22. **create** - **Method**: POST - **Path**: `/pcListings.create` - **Description**: Create a new PC listing - **Tags**: pcListings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 23. **update** - **Method**: POST - **Path**: `/pcListings.update` - **Description**: Update a PC listing - **Tags**: pcListings - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 24. **get** - **Method**: GET - **Path**: `/pcPresets.get` - **Description**: Get current user's PC presets - **Tags**: pcPresets - **Authentication**: Bearer token required #### 25. **create** - **Method**: POST - **Path**: `/pcPresets.create` - **Description**: Create a new PC preset - **Tags**: pcPresets - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 26. **update** - **Method**: POST - **Path**: `/pcPresets.update` - **Description**: Update an existing PC preset - **Tags**: pcPresets - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 27. **delete** - **Method**: POST - **Path**: `/pcPresets.delete` - **Description**: Delete a PC preset - **Tags**: pcPresets - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 28. **get** - **Method**: GET - **Path**: `/preferences.get` - **Description**: get - preferences - **Tags**: preferences - **Authentication**: Bearer token required #### 29. **update** - **Method**: POST - **Path**: `/preferences.update` - **Description**: update - preferences - **Tags**: preferences - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 30. **addDevice** - **Method**: POST - **Path**: `/preferences.addDevice` - **Description**: addDevice - preferences - **Tags**: preferences - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 31. **removeDevice** - **Method**: POST - **Path**: `/preferences.removeDevice` - **Description**: removeDevice - preferences - **Tags**: preferences - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 32. **bulkUpdateDevices** - **Method**: POST - **Path**: `/preferences.bulkUpdateDevices` - **Description**: bulkUpdateDevices - preferences - **Tags**: preferences - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 33. **bulkUpdateSocs** - **Method**: POST - **Path**: `/preferences.bulkUpdateSocs` - **Description**: bulkUpdateSocs - preferences - **Tags**: preferences - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 34. **currentProfile** - **Method**: GET - **Path**: `/preferences.currentProfile` - **Description**: currentProfile - preferences - **Tags**: preferences - **Authentication**: Bearer token required #### 35. **profile** - **Method**: GET - **Path**: `/preferences.profile` - **Description**: profile - preferences - **Tags**: preferences - **Authentication**: Bearer token required #### 36. **updateProfile** - **Method**: POST - **Path**: `/preferences.updateProfile` - **Description**: updateProfile - preferences - **Tags**: preferences - **Request Body**: JSON object required - **Content-Type**: application/json - **Authentication**: Bearer token required #### 37. **follow** - **Method**: POST - **Path**: `/social.follow` - **Description**: follow - social - **Tags**: social - **Authentication**: Bearer token required #### 38. **unfollow** - **Method**: POST - **Path**: `/social.unfollow` - **Description**: unfollow - social - **Tags**: social - **Authentication**: Bearer token required #### 39. **removeFollower** - **Method**: POST - **Path**: `/social.removeFollower` - **Description**: removeFollower - social - **Tags**: social - **Authentication**: Bearer token required #### 40. **sendFriendRequest** - **Method**: POST - **Path**: `/social.sendFriendRequest` - **Description**: sendFriendRequest - social - **Tags**: social - **Authentication**: Bearer token required #### 41. **respondFriendRequest** - **Method**: POST - **Path**: `/social.respondFriendRequest` - **Description**: respondFriendRequest - social - **Tags**: social - **Authentication**: Bearer token required #### 42. **getFriendRequests** - **Method**: GET - **Path**: `/social.getFriendRequests` - **Description**: getFriendRequests - social - **Tags**: social - **Authentication**: Bearer token required #### 43. **getFriends** - **Method**: GET - **Path**: `/social.getFriends` - **Description**: getFriends - social - **Tags**: social - **Authentication**: Bearer token required #### 44. **blockUser** - **Method**: POST - **Path**: `/social.blockUser` - **Description**: blockUser - social - **Tags**: social - **Authentication**: Bearer token required #### 45. **unblockUser** - **Method**: POST - **Path**: `/social.unblockUser` - **Description**: unblockUser - social - **Tags**: social - **Authentication**: Bearer token required #### 46. **getBlockedUsers** - **Method**: GET - **Path**: `/social.getBlockedUsers` - **Description**: getBlockedUsers - social - **Tags**: social - **Authentication**: Bearer token required #### 47. **getActivityFeed** - **Method**: GET - **Path**: `/social.getActivityFeed` - **Description**: getActivityFeed - social - **Tags**: social - **Authentication**: Bearer token required #### 48. **myInfo** - **Method**: GET - **Path**: `/trust.myInfo` - **Description**: Get current user's trust score and level - **Tags**: trust - **Authentication**: Bearer token required ## Error Handling All endpoints return consistent error responses: ```json { "error": { "json": { "message": "Error description", "code": -32600, "data": { "code": "TRPC_ERROR_CODE", "httpStatus": 400 } } } } ``` Common error codes: - `UNAUTHORIZED`: Missing or invalid authentication - `FORBIDDEN`: User lacks permission - `NOT_FOUND`: Resource not found - `BAD_REQUEST`: Invalid input parameters - `INTERNAL_SERVER_ERROR`: Server error --- *This documentation is automatically generated from tRPC procedures and OpenAPI specifications.*