SimTX API/Public endpoints
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
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
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
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
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
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
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
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
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
Two endpoints let a client estimate latency and upload bandwidth to SimTX infrastructure.
Latency probe
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
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.