HTTP Endpoints
The server starts a plaintext HTTP listener on httpPort (no TLS) and serves server-info, the resource manifest and resource file endpoints. The listener lives in src/network/CNetworkManager.cpp (HTTPServerThread); the launcher fetches this before GTA connects, while the in-game client receives the same manifest over the encrypted session.
Request Handling
Routing is by path only. The HTTP method is parsed but does not change behavior — any supported method on the same path returns the same response (there is no separate HEAD/OPTIONS handling and no 405 response).
| Situation | Response |
|---|---|
| Malformed request line or oversized headers | 400 Bad Request |
| Advertised resource file found | 200 OK (application/octet-stream) |
| Resource file not in the advertised list | 404 Not Found |
| Any other path | 200 OK with the server-info JSON |
JSON and file responses carry an Access-Control-Allow-Origin: * header.
Endpoints
| Path | Purpose |
|---|---|
/resources/manifest.json | Resource manifest with file hashes and resource config |
/resources/files/<resource>/<path> | Client-accessible resource file |
/assets/<resource>/<path> | Asset-pack file |
/stream/<resource>/<path> | Stream file for dlc/rpf resources |
any other path (/, /server-info.json, unknown) | Server-info JSON (fallback) |
There is no dedicated route for /server-info.json: server-info is the fallback response for any path that does not match the manifest or resource-file routes. As a result /, /server-info.json and unknown paths all return the same server-info JSON rather than a 404.
server-info.json
The server-info JSON is built inline in HTTPServerThread and contains exactly these fields:
| Field | Type | Value |
|---|---|---|
name | string | server display name |
players | number | admitted player count |
maxPlayers | number | player cap |
gamemode | string | gamemode name |
protocol | number | protocol version (11) |
build | number | client build version (10000) |
gtaBuild | number | supported GTA build (3788) |
channel | string | release channel/branch |
minClientBuild | number | minimum accepted client build |
useEarlyAuth | bool | early-auth enabled |
earlyAuthUrl | string | early-auth URL |
useCloudAuth | bool | cloud-auth enabled |
There is no serverId, identityMode, host/port, connection/queue counts, password state, tags, language, tick rate or streaming distance — only the fields listed above are exposed.
resources/manifest.json
The manifest is built in CResourceManager::BuildManifestJson and served as a string. An empty manifest is returned as {"schema":1,"files":[],"totalFiles":0,"totalBytes":0,"resources":[]}.
Top-level fields:
schema— schema version (1)files— flat list of client-accessible filestotalFiles,totalBytes— counts across all filesresources— list of resources with config
Each files[] entry: resource, path, url, size, stream (bool), sha256 and an optional enc (encryption marker for encrypted-at-rest files).
Each resources[] entry: name, type, clientType, assetsBase, streamBase, an optional clientMain, plus the arrays exports, dependencies, clientFiles, dataFiles ({path, type}) and a config object.
The manifest does not contain an engine version, protocol, server name or gamemode — those values live in the server-info JSON, not the manifest.
Source Backing
This page is derived from src/network/CNetworkManager.cpp (HTTP listener and server-info JSON) and server/src/CResourceManager.cpp (BuildManifestJson).