<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.simtx.net/index.php?action=history&amp;feed=atom&amp;title=SimTX_API%2FStations</id>
	<title>SimTX API/Stations - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.simtx.net/index.php?action=history&amp;feed=atom&amp;title=SimTX_API%2FStations"/>
	<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API/Stations&amp;action=history"/>
	<updated>2026-11-04T22:44:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.simtx.net/index.php?title=SimTX_API/Stations&amp;diff=2391&amp;oldid=prev</id>
		<title>Clanker: Remove development history and server internals</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API/Stations&amp;diff=2391&amp;oldid=prev"/>
		<updated>2026-10-24T17:14:26Z</updated>

		<summary type="html">&lt;p&gt;Remove development history and server internals&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:14, 24 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{SimTX API navigation}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{SimTX API navigation}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &#039;&#039;&#039;station&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;in SimTX v25 &lt;/del&gt;is a persistent object owned by an account: a ground station at a fixed place, or a satellite in orbit. Stations are created and edited through the [[SimTX API/Station endpoints|account service]] and live across servers and reconnects. Receiver and transmitter sessions attach to them. This page describes the model and how a session binds to a station on the wire.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &#039;&#039;&#039;station&#039;&#039;&#039; is a persistent object owned by an account: a ground station at a fixed place, or a satellite in orbit. Stations are created and edited through the [[SimTX API/Station endpoints|account service]] and live across servers and reconnects. Receiver and transmitter sessions attach to them. This page describes the model and how a session binds to a station on the wire.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Model ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Model ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l58&quot;&gt;Line 58:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 58:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;Mint a ticket&amp;#039;&amp;#039;&amp;#039; with &amp;lt;code&amp;gt;POST /api/v1/game-tickets&amp;lt;/code&amp;gt;, giving &amp;lt;code&amp;gt;stationId&amp;lt;/code&amp;gt; and optionally &amp;lt;code&amp;gt;antennaId&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt;. Without &amp;lt;code&amp;gt;antennaId&amp;lt;/code&amp;gt; the station&amp;#039;s first antenna is bound; without &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt; its first rig, or none when it has no rigs. The response&amp;#039;s &amp;lt;code&amp;gt;station&amp;lt;/code&amp;gt; object echoes what was bound and the access level. See [[SimTX API/Game tickets]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;Mint a ticket&amp;#039;&amp;#039;&amp;#039; with &amp;lt;code&amp;gt;POST /api/v1/game-tickets&amp;lt;/code&amp;gt;, giving &amp;lt;code&amp;gt;stationId&amp;lt;/code&amp;gt; and optionally &amp;lt;code&amp;gt;antennaId&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt;. Without &amp;lt;code&amp;gt;antennaId&amp;lt;/code&amp;gt; the station&amp;#039;s first antenna is bound; without &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt; its first rig, or none when it has no rigs. The response&amp;#039;s &amp;lt;code&amp;gt;station&amp;lt;/code&amp;gt; object echoes what was bound and the access level. See [[SimTX API/Game tickets]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;Send the hello&amp;#039;&amp;#039;&amp;#039; with &amp;lt;code&amp;gt;auth = AUTH_KIND_GAME_TICKET&amp;lt;/code&amp;gt; and the ticket.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;Send the hello&amp;#039;&amp;#039;&amp;#039; with &amp;lt;code&amp;gt;auth = AUTH_KIND_GAME_TICKET&amp;lt;/code&amp;gt; and the ticket.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &#039;&#039;&#039;Send the start&#039;&#039;&#039; with &amp;lt;code&amp;gt;site.station&amp;lt;/code&amp;gt; set to a [[SimTX API/Data types#StationBinding|StationBinding]]. Copy the ids from the ticket response; an empty &amp;lt;code&amp;gt;antenna_id&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rig_id&amp;lt;/code&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;accepts &lt;/del&gt;the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;part &lt;/del&gt;the ticket &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;bound&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &#039;&#039;&#039;Send the start&#039;&#039;&#039; with &amp;lt;code&amp;gt;site.station&amp;lt;/code&amp;gt; set to a [[SimTX API/Data types#StationBinding|StationBinding]]. Copy the ids from the ticket response; an empty &amp;lt;code&amp;gt;antenna_id&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rig_id&amp;lt;/code&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;selects &lt;/ins&gt;the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;station&#039;s first antenna or rig, or the one &lt;/ins&gt;the ticket &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;was minted for&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The server checks the binding against the ticket. The start is refused with [[SimTX API/Packets/SessionStatus|SessionStatus]] &amp;lt;code&amp;gt;REJECTED&amp;lt;/code&amp;gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The server checks the binding against the ticket. The start is refused with [[SimTX API/Packets/SessionStatus|SessionStatus]] &amp;lt;code&amp;gt;REJECTED&amp;lt;/code&amp;gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l81&quot;&gt;Line 81:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 81:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;UNLISTED&amp;#039;&amp;#039;&amp;#039; is the private default. Other accounts see an UNLISTED station only as an ad-hoc-style entry with the callsign of its live sessions; its id and placement are hidden.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;UNLISTED&amp;#039;&amp;#039;&amp;#039; is the private default. Other accounts see an UNLISTED station only as an ad-hoc-style entry with the callsign of its live sessions; its id and placement are hidden.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A ground station is often a real address. &lt;/del&gt;Clients should default new ground stations to UNLISTED.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Clients should default new ground stations to UNLISTED.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Ad-hoc transmitters ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Ad-hoc transmitters ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;An ad-hoc transmitter, with an inline callsign, position and antenna, is accepted only for principals that hold the &amp;lt;code&amp;gt;tx.adhoc&amp;lt;/code&amp;gt; permission (service integrations) or when the server&#039;s ad-hoc policy allows it. The default policy refuses it with &amp;lt;code&amp;gt;ERROR_CODE_STATION_REQUIRED&amp;lt;/code&amp;gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The official applications always &lt;/del&gt;transmit through a station&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, and third-party clients should do the same&lt;/del&gt;. Ad-hoc receivers are supported without restriction.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;An ad-hoc transmitter, with an inline callsign, position and antenna, is accepted only for principals that hold the &amp;lt;code&amp;gt;tx.adhoc&amp;lt;/code&amp;gt; permission (service integrations) or when the server&#039;s ad-hoc policy allows it. The default policy refuses it with &amp;lt;code&amp;gt;ERROR_CODE_STATION_REQUIRED&amp;lt;/code&amp;gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Third-party clients should &lt;/ins&gt;transmit through a station. Ad-hoc receivers are supported without restriction.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Edits while sessions run ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Edits while sessions run ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A session keeps the snapshot of the station it was bound with. When the owner edits the station, the bound antenna or the bound rig:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A session keeps the snapshot of the station it was bound with. When the owner edits the station, the bound antenna or the bound rig:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* clients whose hello announced &amp;lt;code&amp;gt;protocol_revision&amp;lt;/code&amp;gt; ≥ 1 receive [[SimTX API/Packets/SessionStatus|SessionStatus]] &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;update_reason = UPDATE_REASON_STATION_EDIT&amp;lt;/code&amp;gt; and the new station snapshot, and the session continues on the new values;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* clients whose hello announced &amp;lt;code&amp;gt;protocol_revision&amp;lt;/code&amp;gt; ≥ 1 receive [[SimTX API/Packets/SessionStatus|SessionStatus]] &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;update_reason = UPDATE_REASON_STATION_EDIT&amp;lt;/code&amp;gt; and the new station snapshot, and the session continues on the new values;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;older &lt;/del&gt;clients get &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; and must reconnect.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;other &lt;/ins&gt;clients get &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; and must reconnect.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Deleting the station, removing the bound antenna or rig, or revoking access always ends the session. See [[SimTX API/Session status]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Deleting the station, removing the bound antenna or rig, or revoking access always ends the session. See [[SimTX API/Session status]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Clanker</name></author>
	</entry>
	<entry>
		<id>https://wiki.simtx.net/index.php?title=SimTX_API/Stations&amp;diff=2261&amp;oldid=prev</id>
		<title>Clanker: Protocol v25 reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API/Stations&amp;diff=2261&amp;oldid=prev"/>
		<updated>2026-10-24T16:19:24Z</updated>

		<summary type="html">&lt;p&gt;Protocol v25 reference&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{SimTX API navigation}}&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;station&amp;#039;&amp;#039;&amp;#039; in SimTX v25 is a persistent object owned by an account: a ground station at a fixed place, or a satellite in orbit. Stations are created and edited through the [[SimTX API/Station endpoints|account service]] and live across servers and reconnects. Receiver and transmitter sessions attach to them. This page describes the model and how a session binds to a station on the wire.&lt;br /&gt;
&lt;br /&gt;
== Model ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Station  (persistent, owned by an account, global across servers)&lt;br /&gt;
├─ id (UUID, never changes), name, callsign, kind GROUND | SATELLITE,&lt;br /&gt;
│  visibility PUBLIC | UNLISTED, revision&lt;br /&gt;
├─ limits      maxSessions, maxTransmitters, maxReceivers&lt;br /&gt;
├─ placement   GROUND: latitude, longitude, altitude (editable at any time)&lt;br /&gt;
│              SATELLITE: orbit and attitude (sealed at launch)&lt;br /&gt;
├─ antennas    1 to 8 (satellites: 1 to 4); each with its own id and revision&lt;br /&gt;
└─ rigs        0 to 8 saved radio profiles; each with its own id and revision:&lt;br /&gt;
               PA cap, receiver noise figure, transmitter imperfection knobs&lt;br /&gt;
Session = one TCP connection = a station + an antenna (+ a rig) + per-session radio settings&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Many transmitter and receiver sessions can attach to one station at once, up to its limits.&lt;br /&gt;
* On a satellite, a transmitter session is a downlink transmitter at the satellite&amp;#039;s position, and a receiver session hears the uplink. See [[SimTX API/Satellites]].&lt;br /&gt;
* The revision of the station, and of each antenna and rig, increases with every edit.&lt;br /&gt;
&lt;br /&gt;
== Station-bound and ad-hoc sessions ==&lt;br /&gt;
Every session start carries a [[SimTX API/Data types#SessionSite|SessionSite]]: either a [[SimTX API/Data types#StationBinding|StationBinding]] to a persistent station, or an inline [[SimTX API/Data types#AdhocStation|AdhocStation]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !! Ad hoc (&amp;lt;code&amp;gt;AdhocStation&amp;lt;/code&amp;gt;) !! Station-bound (&amp;lt;code&amp;gt;StationBinding&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| Who || Anyone; receivers anonymously || Signed-in accounts&lt;br /&gt;
|-&lt;br /&gt;
| Ticket || None for receivers || A ticket minted for the same station, antenna and rig&lt;br /&gt;
|-&lt;br /&gt;
| Callsign, placement, antenna || Inline in the start || From the station&lt;br /&gt;
|-&lt;br /&gt;
| Receive || Always || Your stations, or anyone&amp;#039;s PUBLIC station&lt;br /&gt;
|-&lt;br /&gt;
| Transmit || Refused with &amp;lt;code&amp;gt;STATION_REQUIRED&amp;lt;/code&amp;gt;, unless &amp;lt;code&amp;gt;tx.adhoc&amp;lt;/code&amp;gt; or server policy || Your stations only&lt;br /&gt;
|-&lt;br /&gt;
| Satellites || No || Yes&lt;br /&gt;
|-&lt;br /&gt;
| Rig and PA cap || Generic HF preset; the account&amp;#039;s &amp;lt;code&amp;gt;tx.pa_limit&amp;lt;/code&amp;gt; || The bound rig&lt;br /&gt;
|-&lt;br /&gt;
| Pointing and tracking || No steerable antenna || Full; see [[SimTX API/Tracking and pointing]]&lt;br /&gt;
|-&lt;br /&gt;
| In the station list || An entry of kind &amp;lt;code&amp;gt;ADHOC&amp;lt;/code&amp;gt; with one session || Under the station&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What the station dictates ==&lt;br /&gt;
A station-bound session takes from the station:&lt;br /&gt;
* the callsign and the placement: a fixed ground location, or the satellite&amp;#039;s orbit and attitude;&lt;br /&gt;
* the antenna&amp;#039;s geometry, mount and default pointing;&lt;br /&gt;
* from the bound rig: the PA cap, the receiver noise figure, and the transmitter imperfection knobs other than drive, compression, frequency offset and AM index.&lt;br /&gt;
&lt;br /&gt;
The session still chooses the modulation, frequency, power up to the cap, source, sample rate, gain, bandwidth, low cut, tone and duty cycle, plus drive, compression, frequency offset and AM index, which default to the rig&amp;#039;s values. Without a rig the generic HF preset is used and the cap is the account&amp;#039;s &amp;lt;code&amp;gt;tx.pa_limit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The server reports what it resolved in the [[SimTX API/Data types#BoundStation|BoundStation]] of [[SimTX API/Packets/SessionStatus|SessionStatus]] &amp;lt;code&amp;gt;BOUND&amp;lt;/code&amp;gt;. Show the user what the station dictates from that message.&lt;br /&gt;
&lt;br /&gt;
== Binding a session ==&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Mint a ticket&amp;#039;&amp;#039;&amp;#039; with &amp;lt;code&amp;gt;POST /api/v1/game-tickets&amp;lt;/code&amp;gt;, giving &amp;lt;code&amp;gt;stationId&amp;lt;/code&amp;gt; and optionally &amp;lt;code&amp;gt;antennaId&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt;. Without &amp;lt;code&amp;gt;antennaId&amp;lt;/code&amp;gt; the station&amp;#039;s first antenna is bound; without &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt; its first rig, or none when it has no rigs. The response&amp;#039;s &amp;lt;code&amp;gt;station&amp;lt;/code&amp;gt; object echoes what was bound and the access level. See [[SimTX API/Game tickets]].&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Send the hello&amp;#039;&amp;#039;&amp;#039; with &amp;lt;code&amp;gt;auth = AUTH_KIND_GAME_TICKET&amp;lt;/code&amp;gt; and the ticket.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Send the start&amp;#039;&amp;#039;&amp;#039; with &amp;lt;code&amp;gt;site.station&amp;lt;/code&amp;gt; set to a [[SimTX API/Data types#StationBinding|StationBinding]]. Copy the ids from the ticket response; an empty &amp;lt;code&amp;gt;antenna_id&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rig_id&amp;lt;/code&amp;gt; accepts the part the ticket bound.&lt;br /&gt;
&lt;br /&gt;
The server checks the binding against the ticket. The start is refused with [[SimTX API/Packets/SessionStatus|SessionStatus]] &amp;lt;code&amp;gt;REJECTED&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;FORBIDDEN&amp;lt;/code&amp;gt; when the station, antenna or rig differs from the ticket&amp;#039;s, when a station-bound start arrives without a ticket for that station, when a ticket bound to a station is used with an ad-hoc site, or when a transmitter is started on a station the account does not own;&lt;br /&gt;
* &amp;lt;code&amp;gt;STATION_INACTIVE&amp;lt;/code&amp;gt; when the station was deleted or the satellite has reentered.&lt;br /&gt;
&lt;br /&gt;
Station tickets are issued only for servers that advertise the feature &amp;lt;code&amp;gt;stations.v1&amp;lt;/code&amp;gt;; see [[SimTX API/Server directory]].&lt;br /&gt;
&lt;br /&gt;
== Access ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Access !! Who !! Allows&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;OWNER&amp;lt;/code&amp;gt; || The account that owns the station || Transmitting and receiving.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;LISTENER&amp;lt;/code&amp;gt; || Any other signed-in account, on a PUBLIC station || Receiving only.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Transmitting through someone else&amp;#039;s station is refused, and so is receiving through someone else&amp;#039;s UNLISTED station; the account service refuses those tickets with &amp;lt;code&amp;gt;403 station_forbidden&amp;lt;/code&amp;gt;. The access level is in the ticket response.&lt;br /&gt;
&lt;br /&gt;
== Visibility ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PUBLIC&amp;#039;&amp;#039;&amp;#039; stations appear in the [[SimTX API/Packets/StationList|station list]] with their id, owner and placement, and any signed-in account may receive through them. PUBLIC satellites also appear in the public satellite catalog (&amp;lt;code&amp;gt;GET /api/v1/satellites&amp;lt;/code&amp;gt;) and in every station list, even with nobody attached.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;UNLISTED&amp;#039;&amp;#039;&amp;#039; is the private default. Other accounts see an UNLISTED station only as an ad-hoc-style entry with the callsign of its live sessions; its id and placement are hidden.&lt;br /&gt;
&lt;br /&gt;
A ground station is often a real address. Clients should default new ground stations to UNLISTED.&lt;br /&gt;
&lt;br /&gt;
== Ad-hoc transmitters ==&lt;br /&gt;
An ad-hoc transmitter, with an inline callsign, position and antenna, is accepted only for principals that hold the &amp;lt;code&amp;gt;tx.adhoc&amp;lt;/code&amp;gt; permission (service integrations) or when the server&amp;#039;s ad-hoc policy allows it. The default policy refuses it with &amp;lt;code&amp;gt;ERROR_CODE_STATION_REQUIRED&amp;lt;/code&amp;gt;. The official applications always transmit through a station, and third-party clients should do the same. Ad-hoc receivers are supported without restriction.&lt;br /&gt;
&lt;br /&gt;
== Edits while sessions run ==&lt;br /&gt;
A session keeps the snapshot of the station it was bound with. When the owner edits the station, the bound antenna or the bound rig:&lt;br /&gt;
* clients whose hello announced &amp;lt;code&amp;gt;protocol_revision&amp;lt;/code&amp;gt; ≥ 1 receive [[SimTX API/Packets/SessionStatus|SessionStatus]] &amp;lt;code&amp;gt;UPDATED&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;update_reason = UPDATE_REASON_STATION_EDIT&amp;lt;/code&amp;gt; and the new station snapshot, and the session continues on the new values;&lt;br /&gt;
* older clients get &amp;lt;code&amp;gt;ENDED&amp;lt;/code&amp;gt; and must reconnect.&lt;br /&gt;
&lt;br /&gt;
Deleting the station, removing the bound antenna or rig, or revoking access always ends the session. See [[SimTX API/Session status]].&lt;br /&gt;
&lt;br /&gt;
== Limits ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Per station:&amp;#039;&amp;#039;&amp;#039; the owner sets &amp;lt;code&amp;gt;maxSessions&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxTransmitters&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;maxReceivers&amp;lt;/code&amp;gt;, each clamped by the owner&amp;#039;s &amp;lt;code&amp;gt;game.station_sessions.N&amp;lt;/code&amp;gt; capability. A start over a station limit is refused with &amp;lt;code&amp;gt;LIMIT_REACHED&amp;lt;/code&amp;gt;. The owner is not counted against the station&amp;#039;s receiver limit.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Per account:&amp;#039;&amp;#039;&amp;#039; the number of stations and satellites an account may own is capped by &amp;lt;code&amp;gt;game.owned_stations.N&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;game.owned_satellites.N&amp;lt;/code&amp;gt;. See [[SimTX API/Permissions#Numeric capabilities|Numeric capabilities]].&lt;br /&gt;
* The usual server, address and account session limits apply as well. See [[SimTX API/Limits and errors]].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[SimTX API/Station endpoints]]: creating and editing stations.&lt;br /&gt;
* [[SimTX API/Satellites]]&lt;br /&gt;
* [[SimTX API/Tracking and pointing]]&lt;br /&gt;
&lt;br /&gt;
{{SimTX API navbox}}&lt;br /&gt;
[[Category:SimTX API]]&lt;/div&gt;</summary>
		<author><name>Clanker</name></author>
	</entry>
</feed>