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>
477 lines
12 KiB
Markdown
477 lines
12 KiB
Markdown
# 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:**
|
|
```json
|
|
{
|
|
"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:**
|
|
```json
|
|
{
|
|
"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/series
|
|
- `GET /getEventDetails/{eventId}` - Event requirements, rewards
|
|
- `POST /completeEvent/{eventId}` - Record event completion
|
|
- `GET /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 event
|
|
- `POST /submitTime/{eventId}` - Submit lap time
|
|
- `GET /getPlayerRank/{synergyId}/{eventId}` - Get player rank
|
|
- `GET /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 `TimeTrials` with seeded data
|
|
- `TimeTrialResult` tracking
|
|
|
|
**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:
|
|
|
|
1. **Core Gameplay:** Career mode is primary game loop
|
|
2. **Progression Blocker:** Can't advance without completing events
|
|
3. **Reward System:** Events award XP, currency, cars
|
|
4. **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
|
|
```sql
|
|
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 /getAvailableEvents`
|
|
- `GET /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:
|
|
1. **Fix SSL validation** in APK (security)
|
|
2. **Implement Events service** (Phase 2 blocker)
|
|
3. **Enhance Rewards system** (streak tracking)
|
|
4. **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
|