RECORDS & LEADERBOARDS (5/5 endpoints - 100%):
- Created LeaderboardsController with 5 endpoints
- GET /synergy/leaderboards/timetrials/{trialId}
- GET /synergy/leaderboards/career/{series}/{event}
- GET /synergy/leaderboards/global/top100
- GET /synergy/leaderboards/player/{synergyId}/records
- GET /synergy/leaderboards/compare/{synergyId1}/{synergyId2}
Added LeaderboardEntry and PersonalRecord models and database tables.
Migration applied: AddLeaderboardsAndRecords
Updated RewardsController.SubmitTimeTrial to track personal bests,
update leaderboards, and award 50 gold bonus for improvements.
Updated ProgressionController.CompleteCareerEvent similarly for
career event personal records.
TIME TRIALS (6/6 endpoints - 100%):
- GET /synergy/rewards/timetrials - List with time remaining
- GET /synergy/rewards/timetrials/{id} - Details with stats
- POST /synergy/rewards/timetrials/{id}/submit - Submit with PB tracking
- GET /synergy/rewards/timetrials/player/{synergyId}/results - History
- POST /synergy/rewards/timetrials/{id}/claim - Claim bonuses
- GET /synergy/leaderboards/timetrials/{id} - Leaderboards (above)
Added navigation properties to TimeTrialResult for easier queries.
Server progress: 66/73 endpoints (90%)
Two complete systems: Records/Leaderboards + Time Trials
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
12 KiB
Server Endpoints Required by RR3 APK
Based on: Network analysis of RR3 v14.0.1 APK
Date: February 22, 2026
Status: Complete analysis ✅
🎯 Executive Summary
Key Finding: Real Racing 3 uses EA Nimble SDK's Synergy API exclusively for all game-related server communication. The game does NOT have custom API endpoints hardcoded - everything goes through the standardized Synergy service architecture.
This means our community server must mimic EA's Synergy API format to be compatible.
📡 Required Server Architecture
1. Director API (Service Discovery)
Endpoint: GET /director/api/android/getDirectionByPackage
Purpose: First API call on game startup. Tells game where all backend services are located.
Response Format:
{
"serverUrls": {
"synergy.product": "https://rr3server.com:5001",
"synergy.drm": "https://rr3server.com:5001",
"synergy.user": "https://rr3server.com:5001",
"synergy.tracking": "https://rr3server.com:5001",
"synergy.s2s": "https://rr3server.com:5001",
"synergy.progression": "https://rr3server.com:5001",
"synergy.rewards": "https://rr3server.com:5001",
"synergy.events": "https://rr3server.com:5001",
"synergy.leaderboards": "https://rr3server.com:5001"
},
"environment": "COMMUNITY",
"version": "1.0.0"
}
Status: ✅ Implemented in DirectorController.cs
2. User Service (Identity & Authentication)
Base Path: /user/api/android
Required Endpoints:
a) GET /getDeviceID
- Purpose: Create/retrieve user identity (Synergy ID)
- Parameters:
hardwareId(device UUID) - Response:
{ "resultCode": 0, "message": "Success", "data": { "deviceId": "uuid-here", "synergyId": "SYN-{guid}", "timestamp": 1234567890 } } - Status: ✅ Implemented in
UserController.cs
b) GET /validateDevice
- Purpose: Check if device is authorized
- Parameters:
deviceId - Status: ✅ Implemented
c) GET /getAnonUID
- Purpose: Anonymous user ID for analytics
- Status: ✅ Implemented
3. Product/Catalog Service (IAP & Store)
Base Path: /product/api/android or /synergy/product
Required Endpoints:
a) GET /catalog/getItems
- Purpose: Get available items for purchase
- Response: List of purchasable items (cars, gold, upgrades)
- Status: ✅ Implemented in
ProductController.cs
b) GET /catalog/getCategories
- Purpose: Get item categories
- Status: ✅ Implemented
c) GET /getDownloadUrl
- Purpose: Get download URL for purchased content
- Status: ✅ Implemented
4. DRM Service (Purchase Verification)
Base Path: /drm/api/android or /synergy/drm
Required Endpoints:
a) GET /getNonce
- Purpose: Get nonce for purchase signature
- Status: ✅ Implemented in
DrmController.cs
b) GET /getPurchasedItems
- Purpose: Get list of items user owns
- Parameters:
synergyId - Status: ✅ Implemented
c) POST /verifyPurchase
- Purpose: Verify Google Play purchase (we bypass this)
- Status: ✅ Implemented (always returns success)
5. Configuration Service (Server Settings)
Base Path: /config/api/android
Required Endpoints:
a) GET /getGameConfig
- Purpose: Get server configuration, feature flags, URLs
- Status: ✅ Implemented in
ConfigController.cs(Phase 1)
b) GET /getServerTime
- Purpose: Get server Unix timestamp
- Status: ✅ Implemented (Phase 1)
c) GET /getFeatureFlags
- Purpose: Get enabled/disabled features
- Status: ✅ Implemented (Phase 1)
d) GET /getServerStatus
- Purpose: Health check & server info
- Status: ✅ Implemented (Phase 1)
6. Progression Service (Game State)
Base Path: /synergy/progression or /progression/api/android
Required Endpoints:
a) GET /player/{synergyId}
- Purpose: Get player progression data
- Response: Level, XP, currency, owned cars, career progress
- Status: ✅ Implemented in
ProgressionController.cs
b) POST /player/{synergyId}/update
- Purpose: Update player progression (XP, currency earned)
- Status: ✅ Implemented
c) POST /car/purchase
- Purpose: Purchase/unlock a car
- Status: ✅ Implemented
d) POST /car/upgrade
- Purpose: Upgrade a car
- Status: ✅ Implemented
e) POST /career/complete
- Purpose: Complete a career event
- Status: ✅ Implemented
f) POST /save/{synergyId}
- Purpose: Save player game state (JSON blob)
- Status: ✅ Implemented (Phase 1)
g) GET /save/{synergyId}/load
- Purpose: Load player game state (JSON blob)
- Status: ✅ Implemented (Phase 1)
7. Rewards Service (Daily Rewards)
Base Path: /rewards/api/android or /synergy/rewards
Required Endpoints:
a) GET /daily/{synergyId}
- Purpose: Get daily reward status
- Status: ✅ Partially implemented in
RewardsController.cs
b) POST /daily/{synergyId}/claim
- Purpose: Claim daily reward
- Status: ⚠️ Needs enhancement (streak tracking)
c) POST /purchaseGold
- Purpose: Purchase gold (free in community)
- Status: ✅ Implemented (EA compliance - Price = 0)
8. Tracking Service (Analytics)
Base Path: /tracking/api/android or /synergy/tracking
Required Endpoints:
a) POST /logEvent
- Purpose: Log game events
- Status: ✅ Implemented in
TrackingController.cs
b) POST /logEvents
- Purpose: Batch log multiple events
- Status: ✅ Implemented
9. Assets Service (Content Delivery)
Base Path: /content/api/android or /assets/api
Required Endpoints:
a) GET /manifest
- Purpose: Get list of game assets
- Status: ✅ Implemented in
AssetsController.cs
b) GET /{assetPath}
- Purpose: Download asset file
- Status: ✅ Implemented (with MD5 verification)
10. Settings Service (Device Settings)
Base Path: /api/settings
Required Endpoints:
a) GET /getUserSettings
- Purpose: Get user device settings from server
- Parameters:
deviceId - Status: ✅ Implemented in
ServerSettingsController.cs
b) POST /updateUserSettings
- Purpose: Update device settings
- Status: ✅ Implemented
11. Modding Service (Custom Content)
Base Path: /modding/api/android
Required Endpoints:
a) GET /getAvailableMods
- Purpose: List available mod packs
- Status: ✅ Implemented in
ModdingController.cs
b) GET /getModDetails
- Purpose: Get details about a specific mod
- Status: ✅ Implemented
c) GET /downloadMod
- Purpose: Download mod pack
- Status: ✅ Implemented
🚧 Missing/Incomplete Endpoints (Phase 2+)
12. Events Service (Career Events) ⚠️
Base Path: /events/api/android
Status: 🔴 NOT IMPLEMENTED
Required:
GET /getAvailableEvents- List of career events/seriesGET /getEventDetails/{eventId}- Event requirements, rewardsPOST /completeEvent/{eventId}- Record event completionGET /getSeriesProgress/{synergyId}- Career progression
Priority: HIGH (needed for Phase 2)
13. Leaderboards Service ⚠️
Base Path: /leaderboards/api/android
Status: 🟡 PARTIALLY IMPLEMENTED
Required:
GET /getLeaderboard/{eventId}- Get leaderboard for eventPOST /submitTime/{eventId}- Submit lap timeGET /getPlayerRank/{synergyId}/{eventId}- Get player rankGET /getFriendsLeaderboard- Friends-only leaderboard
Priority: MEDIUM (needed for Phase 3)
14. Time Trials Service ⚠️
Base Path: /timetrials/api/android
Status: 🟡 PARTIALLY IMPLEMENTED
Exists:
- Database table
TimeTrialswith seeded data TimeTrialResulttracking
Missing:
- REST API endpoints for time trials
- Weekly rotation system
- Reward claiming
Priority: MEDIUM (needed for Phase 3)
15. Multiplayer Service 🔴
Base Path: /multiplayer/api/android
Status: 🔴 NOT IMPLEMENTED
Required:
- Matchmaking endpoints
- Real-time race sync
- Ghost data upload/download
- Race results submission
Priority: LOW (Phase 4 - future feature)
16. Friends/Social Service 🔴
Base Path: /social/api/android
Status: 🔴 NOT IMPLEMENTED
Required:
- Friend list management
- Social challenges
- Gift sending
- Club/team management
Priority: LOW (Phase 4 - future feature)
📊 Implementation Status Matrix
| Service | Controller | Endpoints | Status | Phase |
|---|---|---|---|---|
| Director | DirectorController | 1/1 | ✅ Complete | Baseline |
| User | UserController | 3/3 | ✅ Complete | Baseline |
| Product | ProductController | 3/3 | ✅ Complete | Baseline |
| DRM | DrmController | 3/3 | ✅ Complete | Baseline |
| Config | ConfigController | 4/4 | ✅ Complete | Phase 1 |
| Progression | ProgressionController | 7/7 | ✅ Complete | Phase 1 |
| Rewards | RewardsController | 3/5 | 🟡 60% | Phase 1-2 |
| Tracking | TrackingController | 2/2 | ✅ Complete | Baseline |
| Assets | AssetsController | 2/2 | ✅ Complete | Baseline |
| Settings | ServerSettingsController | 2/2 | ✅ Complete | Baseline |
| Modding | ModdingController | 3/3 | ✅ Complete | Baseline |
| Events | ❌ Missing | 0/4 | 🔴 0% | Phase 2 |
| Leaderboards | LeaderboardsController | 1/4 | 🟡 25% | Phase 3 |
| Time Trials | TimeTrialsController | 0/5 | 🔴 0% | Phase 3 |
| Multiplayer | ❌ Missing | 0/10+ | 🔴 0% | Phase 4 |
| Social | ❌ Missing | 0/8+ | 🔴 0% | Phase 4 |
Overall Progress: 58/73 endpoints (79% complete for Phase 1-3)
🎯 Phase 2 Priority: Career Events System
Based on this analysis, Phase 2 MUST implement the Events Service:
Why Events Service is Critical:
- Core Gameplay: Career mode is primary game loop
- Progression Blocker: Can't advance without completing events
- Reward System: Events award XP, currency, cars
- Player Engagement: Main content that keeps players playing
Events Service Implementation Plan:
Step 1: Extract event data from APK assets
- Event IDs, names, requirements
- Reward structures
- Series/championship organization
Step 2: Create database schema
CREATE TABLE Events (
Id INT PRIMARY KEY,
EventId VARCHAR(100),
SeriesId VARCHAR(100),
Name VARCHAR(200),
Track VARCHAR(100),
LapsRequired INT,
CarRequirements TEXT,
GoldReward INT,
CashReward INT,
XPReward INT
);
Step 3: Build EventsController
GET /getAvailableEventsGET /getEventDetails/{eventId}POST /startEvent/{eventId}POST /completeEvent/{eventId}
Step 4: Integrate with ProgressionController
- Track event completions
- Award rewards
- Unlock next events
🔐 Security Considerations
SSL/TLS:
- ⚠️ Critical Issue: APK disables SSL validation in
Http.java - 🔧 Fix Required: Enable proper certificate validation
- ✅ Mitigation: Server should use valid Let's Encrypt cert
Authentication:
- ✅ Synergy ID acts as player identifier
- ✅ Device ID prevents duplicate accounts
- ⚠️ No session tokens (future enhancement)
Data Validation:
- ✅ Server validates all input
- ✅ Purchase verification bypassed (per EA agreement)
- ✅ Currency awards capped to prevent exploits
📝 Conclusion
Current Status:
- ✅ 11/16 services fully implemented (69%)
- ✅ Phase 1 complete: Config & Save/Load working
- ⚠️ Phase 2 ready: Need Events service for career mode
- 🔴 Phase 3-4: Leaderboards, multiplayer for future
Next Steps:
- Fix SSL validation in APK (security)
- Implement Events service (Phase 2 blocker)
- Enhance Rewards system (streak tracking)
- Complete Time Trials (leaderboards)
APK Compatibility:
✅ APK uses standard Synergy API format
✅ No custom endpoints required
✅ Our server architecture matches EA's design
✅ Configuration system compatible
Ready for production testing! 🚀
Document Version: 1.0
Last Updated: February 22, 2026
Status: Network analysis complete, server roadmap defined