Difference between revisions of "API"

From Tycoon Gaming
m (grammar)
m (Fix awkward/incorrect grammar/spelling on API page)
(6 intermediate revisions by 3 users not shown)
Line 7: Line 7:
  
 
== Available servers ==
 
== Available servers ==
 
+
<span style="color:red">Note</span>: Secondary adress listings are the cfx.re proxy- usage is the same.
 
{| class="article-table sortable" style="width: 100%;" |
 
{| class="article-table sortable" style="width: 100%;" |
 
!data-sort-type="text" style="width: 33%" |'''Address'''
 
!data-sort-type="text" style="width: 33%" |'''Address'''
!data-sort-type="text" style="width: 33%" |'''Server Name'''
+
!data-sort-type="text" style="width: 23%" |'''Server Name'''
!data-sort-type="text" style="width: 33%" |'''Additional Information'''
+
!data-sort-type="text" style="width: 43%" |'''Additional Information'''
 
|-
 
|-
|server.tycoon.community:30169
+
|'''server.tycoon.community:30169'''
 +
tycoon-w8r4q4.users.cfx.re
 
|Server 1
 
|Server 1
 
|OneSync server, may not be as stable as the other servers
 
|OneSync server, may not be as stable as the other servers
 
|-
 
|-
|server.tycoon.community:30122
+
|'''server.tycoon.community:30122'''
 +
tycoon-2epova.users.cfx.re
 
|Server 2
 
|Server 2
 
|
 
|
 
|-
 
|-
|server.tycoon.community:30123
+
|'''server.tycoon.community:30123'''
 +
tycoon-2epovd.users.cfx.re
 
|Server 3
 
|Server 3
 
|
 
|
 
|-
 
|-
|server.tycoon.community:30124
+
|'''server.tycoon.community:30124'''
 +
tycoon-wdrypd.users.cfx.re
 
|Server 4
 
|Server 4
 
|
 
|
 
|-
 
|-
|server.tycoon.community:30125
+
|'''server.tycoon.community:30125'''
|Server 5
+
tycoon-njyvop.users.cfx.re
 +
|Server 5 (Beta)
 
|Beta server, data could end up being different compared to other servers
 
|Beta server, data could end up being different compared to other servers
 
|-
 
|-
|na.tycoon.community:30120
+
|'''na.tycoon.community:30120'''
 +
tycoon-2r4588.users.cfx.re
 
|Server 6
 
|Server 6
|Despite the na subdomain, these servers are not hosted in NA and are also European
+
|Despite the NA subdomain, these servers are not hosted in North America and are also European
 
|-
 
|-
|na.tycoon.community:30122
+
|'''na.tycoon.community:30122'''
 +
tycoon-npl5oy.users.cfx.re
 
|Server 7
 
|Server 7
 
|
 
|
 
|-
 
|-
|na.tycoon.community:30123
+
|'''na.tycoon.community:30123'''
 +
tycoon-2vzlde.users.cfx.re
 
|Server 8
 
|Server 8
 
|
 
|
 
|-
 
|-
|na.tycoon.community:30124
+
|'''na.tycoon.community:30124'''
 +
tycoon-wmapod.users.cfx.re
 
|Server 9
 
|Server 9
 
|
 
|
 
|-
 
|-
|na.tycoon.community:30125
+
|'''na.tycoon.community:30125'''
|Server 10
+
tycoon-wxjpge.users.cfx.re
 +
|Server A
 
|
 
|
 +
|-
 +
|'''lite.tycoon.community'''
 +
tycoon-dgpvx3.users.cfx.re
 +
|[LITE] Transportation
 +
|Runs a different gamemode, does not respond to standard Transport Tycoon API calls. <code>sessionmanager/players.json</code> will fetch a list of players.
 
|}
 
|}
 +
 +
=== Server list CDN file ===
 +
 +
On 19 June 2021, Tycoon's CDN now hosts a permanent JSON file that returns a list of servers, their player information endpoint, and a template for formatting API URL calls to each server. In addition to the main Transport Tycoon servers, it also includes information for the [LITE] Transportation server.
 +
The file is permanent and available at <code>https://cdn.tycoon.community/servers.json</code>.
 +
 +
'''File contents:'''
 +
<pre>{
 +
  "servers": [
 +
    {
 +
      "id": "w8r4q4",
 +
      "owner": "tycoon",
 +
      "number": "1",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 1"
 +
    },
 +
    {
 +
      "id": "2epova",
 +
      "owner": "tycoon",
 +
      "number": "2",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 2"
 +
    },
 +
    {
 +
      "id": "2epovd",
 +
      "owner": "tycoon",
 +
      "number": "3",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 3"
 +
    },
 +
    {
 +
      "id": "wdrypd",
 +
      "owner": "tycoon",
 +
      "number": "4",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 4"
 +
    },
 +
    {
 +
      "id": "njyvop",
 +
      "owner": "tycoon",
 +
      "number": "5",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 5 (Beta)"
 +
    },
 +
    {
 +
      "id": "2r4588",
 +
      "owner": "tycoon",
 +
      "number": "6",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 6"
 +
    },
 +
    {
 +
      "id": "npl5oy",
 +
      "owner": "tycoon",
 +
      "number": "7",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 7"
 +
    },
 +
    {
 +
      "id": "2vzlde",
 +
      "owner": "tycoon",
 +
      "number": "8",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 8"
 +
    },
 +
    {
 +
      "id": "wmapod",
 +
      "owner": "tycoon",
 +
      "number": "9",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server 9"
 +
    },
 +
    {
 +
      "id": "wxjpge",
 +
      "owner": "tycoon",
 +
      "number": "A",
 +
      "endpoint": "status/widget/players.json",
 +
      "name": "Server A"
 +
    },
 +
    {
 +
      "id": "dgpvx3",
 +
      "owner": "tycoon",
 +
      "number": "L",
 +
      "endpoint": "sessionmanager/players.json",
 +
      "name": "[LITE] Transportation"
 +
    }
 +
  ],
 +
  "notice": "Proxy may not always be available, even if the server is",
 +
  "template": "https://${owner}-${id}.users.cfx.re/${endpoint}"
 +
}</pre>
  
 
== API Keys ==
 
== API Keys ==
Line 62: Line 167:
 
The API requires an API Key to access most features.
 
The API requires an API Key to access most features.
  
Each key has a limited amount of API calls (also called charges), which is consumed every time an API call is made using the key. Additional charges can be purchased in-game using the <code>/api key refill</code> command at the cost of $1000 (in-game money) per charge. Any user can generate an API key, this key is said user's private key. (make sure you keep it safe!) To generate a key, use the <code>/api key new</code> command in-game. If you already have a key generated, the old one will be deleted and a new one takes its place. When you generate a key for the first time, it will come with some free charges allowing you to test the API for free. The API Key can be copied using the <code>/api key copy</code> command, which will display the key for you to copy. Any user with a linked Discord account will receive a Discord role upon refilling their keys.
+
Each key has a limited amount of API calls (also called charges), which are consumed every time an API call is made using the key. Additional charges can be purchased in game using the <code>/api key refill</code> command at the cost of $1000 (in-game money) per charge. Any user can generate an API key; this key is said user's private key. (Make sure you keep it safe!) To generate a key, use the <code>/api key new</code> command in game. If you already have a key generated, the old one will be deleted and a new one will take its place. When you generate a key for the first time, it will come with some free charges allowing you to test the API for free. The API key can be copied using the <code>/api key copy</code> command, which will display the key for you to copy to your clipboard. Any user with a linked Discord account will receive a Discord role upon refilling their keys.
  
 
== Privacy related options ==
 
== Privacy related options ==
  
As the API has been more and more commonly used, it is now possible to restrict this data, meaning that only your API key will have access to your personal data. In order to restrict access, do <code>/api lock</code> in-game, which will enable these features.
+
As the API has become more and more commonly used, it is now possible to restrict access to your player/personal data so that only your API key can query it. In order to restrict access, do <code>/api lock</code> in game, and privacy will be enabled.
  
 
== API Endpoints ==
 
== API Endpoints ==
Line 73: Line 178:
  
 
* API keys should be sent as headers, like such: <code>X-Tycoon-Key: [api-key]</code>
 
* API keys should be sent as headers, like such: <code>X-Tycoon-Key: [api-key]</code>
* Each endpoint here will mention if such a key is required to be used. Note that currently, every route which requires a key will only use 1 charge per request.
+
* Each endpoint here will mention if a key is required to be used. Note that currently, every route which requires a key will only use 1 charge per request.
 
* Typically, this data is returned as JSON, unless explicitly mentioned.
 
* Typically, this data is returned as JSON, unless explicitly mentioned.
 
* Most routes will have a response header called <code>X-Tycoon-Charges</code>, which will give you the number of charges remaining after the request.
 
* Most routes will have a response header called <code>X-Tycoon-Charges</code>, which will give you the number of charges remaining after the request.
Line 83: Line 188:
 
* 403 Forbidden - Invalid API key
 
* 403 Forbidden - Invalid API key
 
* 404 Not Found - Invalid API route
 
* 404 Not Found - Invalid API route
 +
 +
<hr></hr>
  
 
=== Main endpoints ===
 
=== Main endpoints ===
Line 105: Line 212:
  
 
==== <code>GET /economy.csv</code> ====
 
==== <code>GET /economy.csv</code> ====
Fetches general info about the economy of TT, such as the amount of billionares, etc.<br>
+
Fetches general info about the economy of TT, such as the amount of billionaires, etc.<br>
 
'''Response:'''
 
'''Response:'''
 
* '''Code:''' <code>200 OK</code>
 
* '''Code:''' <code>200 OK</code>
Line 111: Line 218:
  
 
'''Response data:'''
 
'''Response data:'''
The response is a large CSV (though in reality its seperated with semi-colons) with a lot of data about the economy in Transport Tycoon.
+
The response is a large CSV file separated with semicolons, with a lot of data about the economy in Transport Tycoon.
 
<pre>
 
<pre>
 
Time;Debt;Money;Debts;Millionaires;Billionaires;Users;Players
 
Time;Debt;Money;Debts;Millionaires;Billionaires;Users;Players
Line 134: Line 241:
  
 
==== <code>GET /weather.json</code> ====
 
==== <code>GET /weather.json</code> ====
Fetches info about the current weather on the server, with how long until it changes.<br>
+
Fetches info about the current weather on the server, including how long until it changes.<br>
 
'''Response:'''
 
'''Response:'''
 
* '''Code:''' <code>200 OK</code>
 
* '''Code:''' <code>200 OK</code>
Line 209: Line 316:
  
 
==== <code>GET /map/positions.json</code> ====
 
==== <code>GET /map/positions.json</code> ====
Fetches the data of players, including position and vehicle data, along with the players last 20 locations, which is about ~4 seconds of data.<br>
+
Fetches the data of players, including position and vehicle data, along with each player's last 20 locations separated by around 4 seconds.<br>
'''Note: the position history doesnt seem to apply to every player, so make sure to check if this data exists first!'''<br>
+
'''Note: the position history doesn't seem to apply to every player, so make sure to check if this data exists first!'''<br>
 
'''Response:'''
 
'''Response:'''
 
* '''Code:''' <code>200 OK</code>
 
* '''Code:''' <code>200 OK</code>
Line 305: Line 412:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
<hr></hr>
  
 
=== Global endpoints ===
 
=== Global endpoints ===
These endpoints ''should'' return data regardless of the server they are run on (excluding beta for obvious reasons). These endpoints are related to user data.
+
These endpoints ''should'' return data regardless of the server they are run on (excluding Beta and [LITE]). These endpoints are related to user data.
  
 
==== <code>GET /top10/[statName]</code> ====
 
==== <code>GET /top10/[statName]</code> ====
Line 531: Line 640:
  
 
==== <code>GET /wealth/[vRPid]</code> ====
 
==== <code>GET /wealth/[vRPid]</code> ====
Get users wealth
+
Returns users wealth
 +
 
 +
'''Note: User Must be online to obtain wealth Data'''
 +
 
 
'''Response:'''
 
'''Response:'''
 
* '''Code:''' <code>200 OK</code>
 
* '''Code:''' <code>200 OK</code>
Line 545: Line 657:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
<hr></hr>
 +
 
=== Faction endpoints ===
 
=== Faction endpoints ===
 
This data also fits under the "Global endpoint" category, however, there are many faction-related endpoints, so it's simpler to combine them into one small section.<br>
 
This data also fits under the "Global endpoint" category, however, there are many faction-related endpoints, so it's simpler to combine them into one small section.<br>
Line 644: Line 759:
 
   "faction_id": 56,
 
   "faction_id": 56,
 
   "name": "CoCo"
 
   "name": "CoCo"
 +
}
 +
</pre>
 +
 +
<hr></hr>
 +
 +
=== [LITE] endpoints ===
 +
These endpoints are specific to the [LITE] Transportation server and are not shared with the main Transport Tycoon servers.
 +
 +
==== <code>GET sessionmanager/players.json</code> ====
 +
Returns a list of players, similar to the main servers' <code>status/widget/players.json</code>.
 +
 +
'''Response:'''
 +
* '''Code:''' <code>200 OK</code>
 +
* '''Requires key''': <code>false</code>
 +
 +
'''Response data:'''
 +
<pre>
 +
{
 +
  "server": {
 +
    "number": "",
 +
    "dxp": [false],
 +
    "motd": "",
 +
    "beta": "",
 +
    "name": "[LITE] Transportation",
 +
    "region": "",
 +
    "uptime": "50h 12m",
 +
    "limit": 32
 +
  },
 +
  "players": [
 +
    [
 +
      "Username1",
 +
      "91",      // Source ID? (FiveM-assigned player ID)
 +
      "91",
 +
      false,
 +
      false,
 +
      "Trucker", // Job
 +
      false
 +
    ],
 +
    ...
 +
  ]
 
}
 
}
 
</pre>
 
</pre>

Revision as of 02:02, 15 September 2021

Transport Tycoon API

The api for TT follows a few standard principles:

  • Certain routes will return different data based on server
  • Every server requires a different URL to fetch data from, instead of one standardized URL
  • Every route uses the /status endpoint

Available servers

Note: Secondary adress listings are the cfx.re proxy- usage is the same.

Address Server Name Additional Information
server.tycoon.community:30169

tycoon-w8r4q4.users.cfx.re

Server 1 OneSync server, may not be as stable as the other servers
server.tycoon.community:30122

tycoon-2epova.users.cfx.re

Server 2
server.tycoon.community:30123

tycoon-2epovd.users.cfx.re

Server 3
server.tycoon.community:30124

tycoon-wdrypd.users.cfx.re

Server 4
server.tycoon.community:30125

tycoon-njyvop.users.cfx.re

Server 5 (Beta) Beta server, data could end up being different compared to other servers
na.tycoon.community:30120

tycoon-2r4588.users.cfx.re

Server 6 Despite the NA subdomain, these servers are not hosted in North America and are also European
na.tycoon.community:30122

tycoon-npl5oy.users.cfx.re

Server 7
na.tycoon.community:30123

tycoon-2vzlde.users.cfx.re

Server 8
na.tycoon.community:30124

tycoon-wmapod.users.cfx.re

Server 9
na.tycoon.community:30125

tycoon-wxjpge.users.cfx.re

Server A
lite.tycoon.community

tycoon-dgpvx3.users.cfx.re

[LITE] Transportation Runs a different gamemode, does not respond to standard Transport Tycoon API calls. sessionmanager/players.json will fetch a list of players.

Server list CDN file

On 19 June 2021, Tycoon's CDN now hosts a permanent JSON file that returns a list of servers, their player information endpoint, and a template for formatting API URL calls to each server. In addition to the main Transport Tycoon servers, it also includes information for the [LITE] Transportation server. The file is permanent and available at https://cdn.tycoon.community/servers.json.

File contents:

{
  "servers": [
    {
      "id": "w8r4q4",
      "owner": "tycoon",
      "number": "1",
      "endpoint": "status/widget/players.json",
      "name": "Server 1"
    },
    {
      "id": "2epova",
      "owner": "tycoon",
      "number": "2",
      "endpoint": "status/widget/players.json",
      "name": "Server 2"
    },
    {
      "id": "2epovd",
      "owner": "tycoon",
      "number": "3",
      "endpoint": "status/widget/players.json",
      "name": "Server 3"
    },
    {
      "id": "wdrypd",
      "owner": "tycoon",
      "number": "4",
      "endpoint": "status/widget/players.json",
      "name": "Server 4"
    },
    {
      "id": "njyvop",
      "owner": "tycoon",
      "number": "5",
      "endpoint": "status/widget/players.json",
      "name": "Server 5 (Beta)"
    },
    {
      "id": "2r4588",
      "owner": "tycoon",
      "number": "6",
      "endpoint": "status/widget/players.json",
      "name": "Server 6"
    },
    {
      "id": "npl5oy",
      "owner": "tycoon",
      "number": "7",
      "endpoint": "status/widget/players.json",
      "name": "Server 7"
    },
    {
      "id": "2vzlde",
      "owner": "tycoon",
      "number": "8",
      "endpoint": "status/widget/players.json",
      "name": "Server 8"
    },
    {
      "id": "wmapod",
      "owner": "tycoon",
      "number": "9",
      "endpoint": "status/widget/players.json",
      "name": "Server 9"
    },
    {
      "id": "wxjpge",
      "owner": "tycoon",
      "number": "A",
      "endpoint": "status/widget/players.json",
      "name": "Server A"
    },
    {
      "id": "dgpvx3",
      "owner": "tycoon",
      "number": "L",
      "endpoint": "sessionmanager/players.json",
      "name": "[LITE] Transportation"
    }
  ],
  "notice": "Proxy may not always be available, even if the server is",
  "template": "https://${owner}-${id}.users.cfx.re/${endpoint}"
}

API Keys

TL;DR: Create a new key using /api key new

Add charges using /api key refill (adds 1000 charges for $1M)

The API requires an API Key to access most features.

Each key has a limited amount of API calls (also called charges), which are consumed every time an API call is made using the key. Additional charges can be purchased in game using the /api key refill command at the cost of $1000 (in-game money) per charge. Any user can generate an API key; this key is said user's private key. (Make sure you keep it safe!) To generate a key, use the /api key new command in game. If you already have a key generated, the old one will be deleted and a new one will take its place. When you generate a key for the first time, it will come with some free charges allowing you to test the API for free. The API key can be copied using the /api key copy command, which will display the key for you to copy to your clipboard. Any user with a linked Discord account will receive a Discord role upon refilling their keys.

Privacy related options

As the API has become more and more commonly used, it is now possible to restrict access to your player/personal data so that only your API key can query it. In order to restrict access, do /api lock in game, and privacy will be enabled.

API Endpoints

General notes

  • API keys should be sent as headers, like such: X-Tycoon-Key: [api-key]
  • Each endpoint here will mention if a key is required to be used. Note that currently, every route which requires a key will only use 1 charge per request.
  • Typically, this data is returned as JSON, unless explicitly mentioned.
  • Most routes will have a response header called X-Tycoon-Charges, which will give you the number of charges remaining after the request.

Standard status codes

  • 401 Unauthorized - An API key is required for the route
  • 402 Payment Required - No API charges remaining
  • 403 Forbidden - Invalid API key
  • 404 Not Found - Invalid API route

Main endpoints

GET /alive

This endpoint is simply designed to be used as a status check for the API.
Response:

  • Code: 204 NO CONTENT
  • Requires key: false

GET /charges.json

Used to check how many charges are left on the specific key. Will not use an API charge.
Response:

  • Code: 200 OK
  • Requires key: true

Response data: An array where index 0 is the amount of charges remaining

[xxxx]

GET /economy.csv

Fetches general info about the economy of TT, such as the amount of billionaires, etc.
Response:

  • Code: 200 OK
  • Requires key: false

Response data: The response is a large CSV file separated with semicolons, with a lot of data about the economy in Transport Tycoon.

Time;Debt;Money;Debts;Millionaires;Billionaires;Users;Players
1580811614;14255411890;1106983649214;10361;14458;179;316329;40

GET /skillrotation.json

Fetches the current skill rotation for the servers
Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "bonus": 11, // Bonus percentage (10-30)
  "skill": "Cargo Piloting" // Name of the skill it applies to
}

Server-specific endpoints

GET /weather.json

Fetches info about the current weather on the server, including how long until it changes.
Response:

  • Code: 200 OK
  • Requires key: true

Response data: The response is a JSON object containing weather data.

{
  "time_remaining": 1497, // Time in seconds until next weather change
  "current_weather": "drizzling" // The current weather on the server
}

GET /forecast.json

Fetches info about the current forecast on the server.
Response:

  • Code: 200 OK
  • Requires key: true

Response data: The response is a JSON object containing forecast data.

[
  'CLEAR',      'OVERCAST',
  'EXTRASUNNY', 'CLEARING',
  'RAIN',       'RAIN',
  'RAIN',       'CLOUDS',
  'FOGGY'
]

GET /airline.json

Returns the current active destinations for players doing airline.
Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "875": [ // Route number
    "Velum", // Vehicle model / name
    { // Destination
      "z": 20.51197052002,
      "y": 6583.7412109375,
      "x": 2777.1384277344,
      "h":  47.063835144043,
      "airport": "MGA"
      "name": "Mount Gordo Terminal 3"
    },
    false, // Boarding/arrived (set once the plane is unloading)
    41306 // vRP id
  ]
}

GET /players.json

Fetches basic data about the current players on the server.
Response:

  • Code: 200 OK
  • Requires key: false

Response data:

{
  "players": [
    [
      "xxxx", // [0] user name
      895, //    [1] source id
      41306 //   [2] vRP id
    ],
  ]
}

GET /map/positions.json

Fetches the data of players, including position and vehicle data, along with each player's last 20 locations separated by around 4 seconds.
Note: the position history doesn't seem to apply to every player, so make sure to check if this data exists first!
Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "players": [
    [
      "xxxx", // Player name
      820, // Source ID (FiveM assigned plyr ID)
      41306, // vRP id
      { // Position
        "z": 16.24852180480957, // Current X coordinate
        "y": 5180.30029296875,  // Current Y coordinate
        "x": -2179.143798828125 // Current Z coordinate
      },
      { // Vehicle Data
        "vehicle_type": "helicopter",
        "vehicle_name": "Maverick",
        "vehicle_label": "MAVERICK",
        "vehicle_class": 15, // Vehicle class id, see https://docs.fivem.net/natives/?_0x29439776AAA00A62
        "vehicle_spawn": "maverick",
        "owned_vehicles": {
          "trailer": "drybulktr",
          "cab": "urnext",
          "car": "rc350"
        },
        "vehicle_model": -1660661558, // Model hash
        "trailer": "",
        "has_trailer": false
      },
      { // Job data
        "group": "firefighter",
        "name": "Firefighter"
      },
      [ // Incremental position history
        [
          78, //     Incremental index
          3612.8, // X
          3766.1, // Y
          32.3    // Z
        ],
        [
          79,
          3612.8,
          3766.1,
          32.3
        ],
        ...
      ]
    ]
  ],
  "caches": 6648,
  "requests": 6834
}

GET /widget/players.json

Fetches basic data about the current players on the server.
Response:

  • Code: 200 OK
  • Requires key: false

Response data:

{
  "server": {
    "number": "1",
    "dxp": [
      true, // Dxp active
      "xxxx", // Dxp host
      22474824, // Time remaining
      0, // Extra DXP time
      6325176 // How long the Dxp has been active
    ],
    "limit": 128, // Player limit
    "region": "OS",
    "uptime": "14h 25m",
    "beta": "",
    "motd": "",
    "name": ""
  },
  "players": [
    [
      "xxxx", // Username
      895, // Source ID (FiveM assigned plyr ID)
      434912, // vRP id
      "img", // Avatar url
      false, // Staff
      "Train Conductor", // Job
      false // Donator
    ]
  ]
}

Global endpoints

These endpoints should return data regardless of the server they are run on (excluding Beta and [LITE]). These endpoints are related to user data.

GET /top10/[statName]

Fetches the top 10 info for the specific stat. Available stats:

firefighter_streak_record
omni_void_leaderboard
ems_streak_record
ems_deliveries
houses_crafted
toll_paid
trap_paid
drops_collected
quarry_excavate
quarry_coop
quarry_deliver
quarry_solo
vehicles_crafted
eastereggs_pickup
maid_maxscans
maid_ticket

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "code": "200",
  "stat": "toll_paid",
  "top": [
    {
      "amount": 14765137,
      "username": "xxxxx",
      "user_id": 41306
    },
    ...
  ]
}

GET /config/[resourceName]

Pulls the config.lua of specific server resources which support this. Available resources:

Type/Job Config Path
Bus Job omni_busdriver
Business omni_businesses
Garages omni_garbage
Heli Job omni_helitour
EMS/Paramedic omni_paramedic
Conductor omni_pax
Postop Ground omni_postop_ground
Postop Air omni_postop_air
Self Storages omni_self_storage
Houses, Stuff in Houses vrp

Response:

  • Code: 200 OK
  • Requires key: false

Response data: The lua file which configures the given resource.

--[[ omni_businesses CONFIG 1/1 (sh_businesses.lua) ]]--
BUSINESSES = {
  {
      name = "Jonny Tung",
      id = "biz_tung",
      cost = 25*10^6,
      reqlvl = {"@business.business.>61"},
      visuallvl = "62",
      position = {name = "Jonny Tung", x = -902.894836, y = -227.015121, z = 39.818169, h = 331.733337}, -- glitchdetector (3)
      special = {
          {type = "special", name = "Location", x = -905.682617, y = -232.291809, z = 39.818180, h = 137.194992},
          {type = "garage", name = "Garage", x = -900.111206, y = -201.733612, z = 38.247940, h = 71.658554}, -- glitchdetector (3)
      },
  }
  ...

GET /snowflake2user/[discordId]

Converts the discord snowflake into a vRP id, for use in other endpoints.
Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "code": "200",
  "user_id": 41306,
  "discord_id": 138725221749358592,
  "type": "linked"
}


GET /getuserbiz/[vRPid]

Get users owned businesses.
Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "code": "200",
  "businesses": {
    "biz_vespucci_masks": 14 // [id]: level
  },
  "user_id": 41306
}

GET /ownedvehicles/[vRPid]

Get users owned vehicles.
Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "code": "200",
  "vehicles": {
    "trailers2": ["trailer", 2750], // Model: array[class, inventory_size]
    "vestra": ["aircraft", 30],
    "bmx": ["bicycle", 10],
    "neon": ["car", 10],
    "hakuchou": ["bike", 10],
    "hauler2": ["cab", 10]
  },
  "user_id": 41306
}

GET /data/[vRPid]

Get users data, such as inventory, clothing, and more.
Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{ // Too much data to display and annotate, try and experiment, and dont be afraid to ask around!
  "code": "200",
  "data_type": "data_offline",
  "user_id": 41306,
  "data": {
    "inventory": {
      "group_card|mechanic|Mechanic": {
        "amount": 10
      }
    }
  }
  ...
}

GET /dataadv/[vRPid]

Get users data with more detailed item info (weight, name, etc).
Response:

  • Code: 200 OK
  • Requires key: true

Response data:

 
{
  "amount": 185,
  "weight": 0.0,
  "name": "<span style=\"color:lawngreen\">Sandwich</span>"
},

GET /chest/[chestName]

Allows you to fetch the items inside of chests.
Chest naming scheme cheatsheat:

  • Fetch vehicle storage: u[vRPid]veh_[vehClass]_[model]
  • Fetch home storage: u[vRPid]home
  • Fetch backpack storage: u[vRPid]backpack
  • Fetch faction storage: self_storage:[vRPid]:faq_[factionId]:chest
  • Other storage: self_storage:[vRPid]:[storageId]:chest

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "data":  {
    "refined_flint":  {
      "amount":  288
    },
    "scrap_gravel":  {
      "amount":  48
    },
    "tcargodust":  {
      "amount":  1650
    },
    "refined_sand":  {
      "amount":  504
    }
  },
  "code":  "200",
  "data_type":  "chest",
  "chest":  "self_storage:41306:faq_56:chest"
}

GET /wealth/[vRPid]

Returns users wealth

Note: User Must be online to obtain wealth Data

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "user_id": 256983,
  "wallet": 101256983,
  "bank": 0,
  "loan": 0,
  "code": "200"
}

Faction endpoints

This data also fits under the "Global endpoint" category, however, there are many faction-related endpoints, so it's simpler to combine them into one small section.
Do note, all endpoints except GET /getuserfaq/[vRPid] are related to the faction the key creator is in and may require a certain rank in the faction.

GET /getuserfaq/[vRPid]

Returns the faction the user is in, if in any.

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
    "is_in_faction": true,
    "faction_id": 56,
    "code": "200",
    "user_id": xxxxx
}

GET /faction/size.json

Returns the amount of members in faction.

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

[787] // 0: Member count

GET /faction/members.json

Returns the info of the members in a faction.

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

  { // Most of this data is self explanatory
    "earned": 2199936,
    "management": 0,
    "user_id": 1,
    "admin": 0,
    "recruiter": 1,
    "username": [ // Username as UTF-16 character codes
        67,
        111,
        108,
        108,
        105,
        110,
        115
    ],
    "joined": 1608662095000.0 // Timestamp of when the user joined
  }
]

GET /faction/perks.json

Returns the amount of perks a faction has

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

[39] // 0: Perk amount

GET /faction/balance.json

Returns the factions balance

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

[107965.0] // 0: Faction balance

GET /faction/info.json

Returns some basic faction info

Response:

  • Code: 200 OK
  • Requires key: true

Response data:

{
  "tag": "The Corrupt",
  "faction_id": 56,
  "name": "CoCo"
}

[LITE] endpoints

These endpoints are specific to the [LITE] Transportation server and are not shared with the main Transport Tycoon servers.

GET sessionmanager/players.json

Returns a list of players, similar to the main servers' status/widget/players.json.

Response:

  • Code: 200 OK
  • Requires key: false

Response data:

{
  "server": {
    "number": "",
    "dxp": [false],
    "motd": "",
    "beta": "",
    "name": "[LITE] Transportation",
    "region": "",
    "uptime": "50h 12m",
    "limit": 32
  },
  "players": [
    [
      "Username1",
      "91",      // Source ID? (FiveM-assigned player ID)
      "91",
      false,
      false,
      "Trucker", // Job
      false
    ],
    ...
  ]
}