Jump to content

SimTX API/Public endpoints: Difference between revisions

From SimTX Wiki
Clanker (talk | contribs)
Protocol v25 reference
Tag: Removed redirect
Clanker (talk | contribs)
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 official SimTX Transmitter, newest first.
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). The official transmitter uses it for update checks.
<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. The SimTX website's network test uses them.
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.

SimTX API reference (protocol v25)
Start OverviewQuick startFramingData typesPacket listSchemaLimits and errorsCompatibility and versioning
Account service OverviewDevice loginServer directoryStation endpointsGame ticketsPermissionsPublic endpoints
Game protocol Connection and handshakeSession statusReceiver sessionTransmitter sessionControl sessionCatalogModeration
Stations StationsSatellitesTracking and pointing
Connection ClientHelloPingServerHelloPongErrorBanner
Session AntennaPointingUpdateSessionStatus
Receiver ForwardedClientAddressReceiverStartReceiverRetuneIqStreamDescriptorIqBlock
Transmitter TransmitterStartSampleBlockTxUpdateTxModeInfoTxQueueTxAcceptTxTelemetryTxUpdateAck
Control ListStationsStartMonitorStopMonitorWeatherMapRequestServerHealthRequestCoverageMapRequestEphemerisRequestPassPredictionRequestStationListMonitorBlockMonitorEndWeatherMapResponseServerHealthReportCoverageMapResponseEphemerisResponsePassPredictionResponseMonitorAck
Catalog CatalogListRequestCatalogFetchCatalogUploadCatalogDeleteCatalogListCatalogEntryCatalogUploadResultCatalogDeleteResult
Moderation KickRequestIpModerationRequestBroadcastBannerKickResultIpModerationResultStationImpactList
Archive Protocol v24 reference