SimTX API/Public endpoints: Difference between revisions
Protocol v25 reference Tag: Removed redirect |
Remove development history and server internals |
||
| Line 143: | Line 143: | ||
<code>GET /api/v1/releases</code> | <code>GET /api/v1/releases</code> | ||
Lists published releases of the | Lists published releases of the SimTX Transmitter application, newest first. | ||
<syntaxhighlight lang="json"> | <syntaxhighlight lang="json"> | ||
| Line 188: | Line 188: | ||
=== Update manifest === | === Update manifest === | ||
<code>GET /downloads/transmitter-update.properties</code> returns the newest downloadable release as a Java properties file (<code>text/plain; charset=utf-8</code>, cached for 60 seconds) | <code>GET /downloads/transmitter-update.properties</code> returns the newest downloadable release as a Java properties file (<code>text/plain; charset=utf-8</code>, cached for 60 seconds). | ||
<syntaxhighlight lang="properties"> | <syntaxhighlight lang="properties"> | ||
| Line 200: | Line 200: | ||
== Network test == | == Network test == | ||
Two endpoints let a client estimate latency and upload bandwidth to SimTX infrastructure | Two endpoints let a client estimate latency and upload bandwidth to SimTX infrastructure. | ||
=== Latency probe === | === Latency probe === | ||
Latest revision as of 17:16, 24 October 2026
The account service exposes a handful of public endpoints that need no credential. They serve service status, the public satellite list, public profiles, client releases and a simple network test. All are on https://auth.simtx.net; rate limits are listed on the account service page.
Service status[edit | edit source]
GET /api/v1/status
{ "status": "operational" }
The response indicates only that the account service process is up and answering. It says nothing about game servers; use the server directory for that. Not rate limited.
Public satellites[edit | edit source]
GET /api/v1/satellites
Lists every PUBLIC satellite of every account that is ACTIVE or DEORBITING (not yet reentered). No authentication. Rate limit: 120 per minute.
{
"satellites": [
{
"stationId": "99999999-8888-4777-8666-555555555555",
"revision": 3,
"catalogSeq": 412,
"state": "ACTIVE",
"name": "SimSat-1",
"callsign": "SSAT1",
"ownerHandle": "n0call",
"visibility": "PUBLIC",
"orbit": {
"model": "simtx-j2-v1", "epoch": "2026-10-20T12:00:00Z",
"semiMajorAxisKm": 6921.0, "eccentricity": 0.001, "inclinationDeg": 97.6,
"raanDeg": 120.0, "argumentOfPerigeeDeg": 90.0, "meanAnomalyDeg": 10.0
},
"attitude": { "mode": "NADIR", "yawDeg": 0.0 },
"launchedAt": "2026-10-20T12:00:00Z"
}
]
}
| Field | Type | Description |
|---|---|---|
stationId |
string (UUID) | The satellite's station id, as used in station lists, tickets and ephemeris requests. |
revision |
integer | Station revision. |
catalogSeq |
integer | Global sequence number, increased on every change to any satellite. |
state |
string | ACTIVE or DEORBITING.
|
name, callsign, ownerHandle |
string | As on the station. |
visibility |
string | Always PUBLIC here.
|
orbit, attitude |
object | As on Station endpoints. After a deorbit burn, the post-burn elements. |
launchedAt |
string | Launch time; also the epoch of the original elements. |
deorbit |
object | Set once the deorbit burn has fired: burnAt, reentryAt, reentryLocation, deltaVMps, orbit. Stop drawing the satellite at reentryAt.
|
The list is served from a snapshot at most 5 seconds old, replaced as soon as any satellite changes. Responses carry an ETag and Cache-Control: no-cache; send If-None-Match to get 304 Not Modified when nothing changed. Propagate the elements with the orbit model to draw the satellites.
Public profiles[edit | edit source]
Every active account has a public profile consisting of its handle, display name, join date, public badges and visible awards. Nothing else about an account is public.
Profile search[edit | edit source]
GET /api/v1/profiles?q=text
| Parameter | Description |
|---|---|
q |
Case-insensitive substring matched against handles and display names. Optional; an empty query lists accounts alphabetically. |
Returns at most 24 profiles. An exact handle match is listed first, then the rest ordered by handle.
{
"profiles": [
{
"handle": "n0call",
"displayName": "Example Operator",
"joinedAt": "2026-08-20T09:12:44.100000Z",
"badges": [
{ "roleKey": "SUPPORTER", "label": "Supporter", "color": "#e0b04c" }
]
}
]
}
| Field | Type | Description |
|---|---|---|
handle |
string | Unique handle. Users may change it, at most once every 30 days. |
displayName |
string | Free-form display name. |
joinedAt |
string | Account creation time. |
badges |
array | Public role badges, sorted by label. |
badges[].roleKey |
string | Stable role identifier, for example SUPPORTER or MODERATOR.
|
badges[].label |
string | Text to display. |
badges[].color |
string | CSS colour for the badge, usually #rrggbb.
|
Single profile[edit | edit source]
GET /api/v1/profiles/{handle}
Returns the same fields as a search result plus awards. Unknown handles return 404 profile_not_found.
| Field | Type | Description |
|---|---|---|
awards[].awardId |
string (UUID) | Award definition. |
awards[].accountAwardId |
string (UUID) | This particular grant. |
awards[].slug |
string | Stable short identifier of the award. |
awards[].name |
string | Display name. |
awards[].description |
string | Description. |
awards[].iconUrl |
string | Icon image URL. May be empty. |
awards[].grantedAt |
string | When the award was granted. |
awards[].visible |
boolean | Whether the user shows it on their profile. Only visible awards are returned here. |
awards[].displayOrder |
integer | Order chosen by the user; lower first. |
awards[].revokedAt |
string or null | Always null for awards returned here. |
Releases[edit | edit source]
GET /api/v1/releases
Lists published releases of the SimTX Transmitter application, newest first.
{
"releases": [
{
"releaseId": "7edca7c6-97ca-4291-9691-3f0a5cd41a20",
"version": "0.3.7",
"title": "SimTX 0.3.7",
"notes": ["WFM now accepts baseband directly.", "Added rate selection up to 384 kHz."],
"downloadUrl": "/downloads/simtx-transmitter-0.3.7.jar",
"artifactFilename": "simtx-transmitter-0.3.7.jar",
"artifactSize": 8087129,
"artifactSha256": "8632bc25e1271146c8638c2780e4a6bdb40379d0dd7cae8f0631f8e16b5da69b",
"published": true,
"createdAt": "2026-09-14T19:37:41.639246Z",
"updatedAt": "2026-09-14T19:38:53.435832Z",
"publishedAt": "2026-09-14T19:37:41.639246Z"
}
]
}
| Field | Type | Description |
|---|---|---|
version |
string | Version number. |
title |
string | Release title. |
notes |
array of string | Change notes, one entry per item. |
downloadUrl |
string or null | Download location. A value starting with / is relative to https://auth.simtx.net; otherwise it is an absolute URL.
|
artifactFilename, artifactSize, artifactSha256 |
string, integer, string | File name, size in bytes and lowercase hex SHA-256 of the download. Verify the hash after downloading. |
published |
boolean | Always true here. |
createdAt, updatedAt, publishedAt |
string | Timestamps. |
Release downloads[edit | edit source]
GET /downloads/{filename} returns the stored file with Content-Disposition: attachment, an ETag equal to the quoted SHA-256, and Cache-Control: public, max-age=300. Unknown files return 404 release_artifact_not_found.
Update manifest[edit | edit source]
GET /downloads/transmitter-update.properties returns the newest downloadable release as a Java properties file (text/plain; charset=utf-8, cached for 60 seconds).
version=0.3.7
url=/downloads/simtx-transmitter-0.3.7.jar
sha256=8632bc25e1271146c8638c2780e4a6bdb40379d0dd7cae8f0631f8e16b5da69b
notes=WFM now accepts baseband directly.
When a release has several notes, they are joined on a single line, separated by a space, the character U+00B7 and a space. Returns 404 release_manifest_unavailable when no release has a download.
Network test[edit | edit source]
Two endpoints let a client estimate latency and upload bandwidth to SimTX infrastructure.
Latency probe[edit | edit source]
GET /api/v1/network-test/ping
{ "serverTimeMillis": 1793016000000 }
serverTimeMillis is the server's clock in Unix milliseconds. Measure the round-trip time on the client side. Rate limit: 60 per minute.
Upload probe[edit | edit source]
POST /api/v1/network-test/upload with Content-Type: application/octet-stream and a body of 1 byte to 1 MiB (1,048,576 bytes). The Content-Length header is required.
{ "receivedBytes": 1048576, "serverReadMillis": 412.7 }
| Field | Description |
|---|---|
receivedBytes |
Number of body bytes read. |
serverReadMillis |
Time the server spent reading the body, in milliseconds. |
Errors: 415 network_test_content_type for any other content type, 413 network_test_chunk_size for an empty, missing-length or oversized body. Rate limit: 144 per minute.