<?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%2FStation_endpoints</id>
	<title>SimTX API/Station endpoints - 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%2FStation_endpoints"/>
	<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API/Station_endpoints&amp;action=history"/>
	<updated>2026-11-05T01:10:31Z</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/Station_endpoints&amp;diff=2522&amp;oldid=prev</id>
		<title>Clanker: Station lists carry deck digests only; removed decks are not kept; rig values use the game ranges</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API/Station_endpoints&amp;diff=2522&amp;oldid=prev"/>
		<updated>2026-10-25T11:44:19Z</updated>

		<summary type="html">&lt;p&gt;Station lists carry deck digests only; removed decks are not kept; rig values use the game ranges&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 11:44, 25 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-l120&quot;&gt;Line 120:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 120:&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;lt;code&amp;gt;wireLengthMeters&amp;lt;/code&amp;gt; || ≥ 0. 0 sizes the template for the operating frequency.&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;lt;code&amp;gt;wireLengthMeters&amp;lt;/code&amp;gt; || ≥ 0. 0 sizes the template for the operating frequency.&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;|-&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;|-&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;| &amp;lt;code&amp;gt;necDeck&amp;lt;/code&amp;gt; || Optional NEC-2 deck, at most 262,144 bytes; replaces the template. Satellite decks must not contain a &amp;lt;code&amp;gt;GN&amp;lt;/code&amp;gt; card. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Read responses &lt;/del&gt;add &amp;lt;code&amp;gt;necDeckSha256&amp;lt;/code&amp;gt;, the hex SHA-256 of the deck.&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;| &amp;lt;code&amp;gt;necDeck&amp;lt;/code&amp;gt; || Optional NEC-2 deck, at most 262,144 bytes; replaces the template. Satellite decks must not contain a &amp;lt;code&amp;gt;GN&amp;lt;/code&amp;gt; card. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Responses &lt;/ins&gt;add &amp;lt;code&amp;gt;necDeckSha256&amp;lt;/code&amp;gt;, the hex SHA-256 of the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;deck. Station lists carry only &amp;lt;code&amp;gt;necDeckSha256&amp;lt;/code&amp;gt;; read the station for the deck text. A removed antenna, a deleted station and a reentered satellite keep no &lt;/ins&gt;deck.&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;|-&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;|-&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;lt;code&amp;gt;mount&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;FIXED&amp;lt;/code&amp;gt; (default), &amp;lt;code&amp;gt;AZ&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AZEL&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;| &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;FIXED&amp;lt;/code&amp;gt; (default), &amp;lt;code&amp;gt;AZ&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AZEL&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-l127&quot;&gt;Line 127:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 127:&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;|}&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;|}&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;A &#039;&#039;&#039;rig&#039;&#039;&#039; is a saved radio profile: &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paMaxWatts&amp;lt;/code&amp;gt; (0 to 10,000,000; default 100), &amp;lt;code&amp;gt;noiseFigureDb&amp;lt;/code&amp;gt; (0 to 100; default 6), and &amp;lt;code&amp;gt;tx&amp;lt;/code&amp;gt;, an object with the fifteen [[SimTX API/Data types#TxImperfections|transmitter imperfection]] values in camelCase (&amp;lt;code&amp;gt;finalDriveDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paHeadroomDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;audioCompressionDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paSoftness&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paAmPmDeg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;carrierLeakDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oppositeSidebandSuppressionDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;frequencyOffsetHz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mainsHumDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mainsHumHz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;amModulationIndex&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paSupplySagDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;txNoiseFloorDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oscillatorPhaseNoiseDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cwKeyRiseMs&amp;lt;/code&amp;gt;). Values left out take the generic HF preset.&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;rig&#039;&#039;&#039; is a saved radio profile: &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paMaxWatts&amp;lt;/code&amp;gt; (0 to 10,000,000; default 100), &amp;lt;code&amp;gt;noiseFigureDb&amp;lt;/code&amp;gt; (0 to 100; default 6), and &amp;lt;code&amp;gt;tx&amp;lt;/code&amp;gt;, an object with the fifteen [[SimTX API/Data types#TxImperfections|transmitter imperfection]] values in camelCase (&amp;lt;code&amp;gt;finalDriveDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paHeadroomDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;audioCompressionDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paSoftness&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paAmPmDeg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;carrierLeakDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oppositeSidebandSuppressionDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;frequencyOffsetHz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mainsHumDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mainsHumHz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;amModulationIndex&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paSupplySagDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;txNoiseFloorDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oscillatorPhaseNoiseDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cwKeyRiseMs&amp;lt;/code&amp;gt;). Values left out take the generic HF preset&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. Each value must lie in the range the game accepts (see [[SimTX API/Data types#TxImperfections|TxImperfections]]); other values are refused with &amp;lt;code&amp;gt;400 station_invalid&amp;lt;/code&amp;gt;&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;=== Orbit and attitude ===&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;=== Orbit and attitude ===&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-l140&quot;&gt;Line 140:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 140:&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;curl -s https://auth.simtx.net/api/v1/stations -H &amp;quot;Authorization: Bearer $SIMTX_TOKEN&amp;quot;&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;curl -s https://auth.simtx.net/api/v1/stations -H &amp;quot;Authorization: Bearer $SIMTX_TOKEN&amp;quot;&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;lt;/syntaxhighlight&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;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;Antennas in the list carry &amp;lt;code&amp;gt;necDeckSha256&amp;lt;/code&amp;gt; but no &amp;lt;code&amp;gt;necDeck&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;GET /api/v1/stations/{id}&amp;lt;/code&amp;gt; returns the deck text.&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;== Creating a ground station ==&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;== Creating a ground station ==&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/Station_endpoints&amp;diff=2290&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/Station_endpoints&amp;diff=2290&amp;oldid=prev"/>
		<updated>2026-10-24T16:27:36Z</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;
The &amp;#039;&amp;#039;&amp;#039;station endpoints&amp;#039;&amp;#039;&amp;#039; of the [[SimTX API/Account service|account service]] create, read, edit and delete an account&amp;#039;s persistent [[SimTX API/Stations|stations]], launch [[SimTX API/Satellites|satellites]] and deorbit them. A station belongs to the account, not to a game server; game sessions attach to it with a station-bound [[SimTX API/Game tickets|game ticket]].&lt;br /&gt;
&lt;br /&gt;
All endpoints take a bearer credential (an access credential or a personal credential) on &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://auth.simtx.net&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Service credentials are refused with &amp;lt;code&amp;gt;403 account_credential_required&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Endpoints ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method and path !! Scope !! Result&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GET /api/v1/stations&amp;lt;/code&amp;gt; || Any || &amp;lt;code&amp;gt;200 {&amp;quot;stations&amp;quot;: [Station]}&amp;lt;/code&amp;gt;: your stations&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;POST /api/v1/stations&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;201 Station&amp;lt;/code&amp;gt;: create a ground station&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GET /api/v1/stations/{id}&amp;lt;/code&amp;gt; || Any || &amp;lt;code&amp;gt;200 Station&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PATCH /api/v1/stations/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;200 Station&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;DELETE /api/v1/stations/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;204&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;POST /api/v1/stations/{id}/antennas&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;201 Station&amp;lt;/code&amp;gt; (ground stations only)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PATCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE /api/v1/stations/{id}/antennas/{antennaId}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;200 Station&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;POST /api/v1/stations/{id}/rigs&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;201 Station&amp;lt;/code&amp;gt; (ground stations only)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;PATCH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DELETE /api/v1/stations/{id}/rigs/{rigId}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;200 Station&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;POST /api/v1/satellites&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;201 Station&amp;lt;/code&amp;gt;: launch a satellite&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;POST /api/v1/stations/{id}/deorbit/preview&amp;lt;/code&amp;gt; || Any || &amp;lt;code&amp;gt;200 Deorbit&amp;lt;/code&amp;gt;: what a burn now would do&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;POST /api/v1/stations/{id}/deorbit&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;200 Station&amp;lt;/code&amp;gt;: fire the deorbit burn&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GET /api/v1/satellites&amp;lt;/code&amp;gt; || None (public) || &amp;lt;code&amp;gt;200 {&amp;quot;satellites&amp;quot;: [SatelliteCatalogEntry]}&amp;lt;/code&amp;gt;; see [[SimTX API/Public endpoints#Public satellites|Public endpoints]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Any&amp;quot; means any account credential, without a particular scope. A write with a credential whose scope lacks &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt; is refused with &amp;lt;code&amp;gt;403 scope_required&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;fieldErrors.scope = &amp;quot;station.manage&amp;quot;&amp;lt;/code&amp;gt;; sign the user in again with the wider scope. An account without the permission gets &amp;lt;code&amp;gt;403 permission_denied&amp;lt;/code&amp;gt;. Rate limits: 240 reads and 120 writes per minute per IP address.&lt;br /&gt;
&lt;br /&gt;
== The Station object ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;stationId&amp;quot;: &amp;quot;3f2504e0-4f89-41d3-9a0c-0305e82c3301&amp;quot;,&lt;br /&gt;
  &amp;quot;ownerAccountId&amp;quot;: &amp;quot;0f8e2c4a-1b3d-4e5f-8a9b-0c1d2e3f4a5b&amp;quot;,&lt;br /&gt;
  &amp;quot;ownerHandle&amp;quot;: &amp;quot;n0call&amp;quot;,&lt;br /&gt;
  &amp;quot;kind&amp;quot;: &amp;quot;GROUND&amp;quot;,&lt;br /&gt;
  &amp;quot;state&amp;quot;: &amp;quot;ACTIVE&amp;quot;,&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Home&amp;quot;,&lt;br /&gt;
  &amp;quot;callsign&amp;quot;: &amp;quot;N0CALL&amp;quot;,&lt;br /&gt;
  &amp;quot;visibility&amp;quot;: &amp;quot;UNLISTED&amp;quot;,&lt;br /&gt;
  &amp;quot;revision&amp;quot;: 3,&lt;br /&gt;
  &amp;quot;limits&amp;quot;: { &amp;quot;maxSessions&amp;quot;: 16, &amp;quot;maxTransmitters&amp;quot;: 4, &amp;quot;maxReceivers&amp;quot;: 16 },&lt;br /&gt;
  &amp;quot;location&amp;quot;: { &amp;quot;latitudeDeg&amp;quot;: 47.4979, &amp;quot;longitudeDeg&amp;quot;: 19.0402, &amp;quot;altitudeMeters&amp;quot;: 120.0 },&lt;br /&gt;
  &amp;quot;antennas&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;antennaId&amp;quot;: &amp;quot;9b2c1e47-2f0a-4c55-8d1e-6a7b8c9d0e1f&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;40 m dipole&amp;quot;, &amp;quot;ordinal&amp;quot;: 0, &amp;quot;revision&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;type&amp;quot;: &amp;quot;DIPOLE&amp;quot;, &amp;quot;heightMeters&amp;quot;: 10.0, &amp;quot;azimuthDeg&amp;quot;: 90.0,&lt;br /&gt;
      &amp;quot;feedlineLossDb&amp;quot;: 1.0, &amp;quot;wireLengthMeters&amp;quot;: 0.0, &amp;quot;mount&amp;quot;: &amp;quot;FIXED&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;rigs&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;rigId&amp;quot;: &amp;quot;c41d7a52-0e3b-4f6a-9c8d-1b2a3c4d5e6f&amp;quot;,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;100 W transceiver&amp;quot;, &amp;quot;revision&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;paMaxWatts&amp;quot;: 100.0, &amp;quot;noiseFigureDb&amp;quot;: 6.0,&lt;br /&gt;
      &amp;quot;tx&amp;quot;: { &amp;quot;carrierLeakDb&amp;quot;: 55.0, &amp;quot;oppositeSidebandSuppressionDb&amp;quot;: 50.0 }&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;createdAt&amp;quot;: &amp;quot;2026-10-24T12:00:00Z&amp;quot;,&lt;br /&gt;
  &amp;quot;updatedAt&amp;quot;: &amp;quot;2026-10-24T12:30:00Z&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field !! Type !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;stationId&amp;lt;/code&amp;gt; || string (UUID) || Never changes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ownerAccountId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ownerHandle&amp;lt;/code&amp;gt; || string || The owning account.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;kind&amp;lt;/code&amp;gt; || string || &amp;lt;code&amp;gt;GROUND&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;SATELLITE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;state&amp;lt;/code&amp;gt; || string || &amp;lt;code&amp;gt;ACTIVE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DEORBITING&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DEORBITED&amp;lt;/code&amp;gt;. Ground stations are always &amp;lt;code&amp;gt;ACTIVE&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;callsign&amp;lt;/code&amp;gt; || string || 1 to 64 characters each.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;visibility&amp;lt;/code&amp;gt; || string || &amp;lt;code&amp;gt;PUBLIC&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;UNLISTED&amp;lt;/code&amp;gt;. See [[SimTX API/Stations#Visibility|Visibility]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt; || integer || Increases with every edit of the station.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;limits&amp;lt;/code&amp;gt; || object || &amp;lt;code&amp;gt;maxSessions&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxTransmitters&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;maxReceivers&amp;lt;/code&amp;gt;, each 0 to 10,000, clamped to the owner&amp;#039;s &amp;lt;code&amp;gt;game.station_sessions.N&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; || object || Ground stations: &amp;lt;code&amp;gt;latitudeDeg&amp;lt;/code&amp;gt; (−90 to 90), &amp;lt;code&amp;gt;longitudeDeg&amp;lt;/code&amp;gt; (−180 to 180), &amp;lt;code&amp;gt;altitudeMeters&amp;lt;/code&amp;gt; (−500 to 10,000).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;orbit&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;attitude&amp;lt;/code&amp;gt; || object || Satellites. See [[#Orbit and attitude|Orbit and attitude]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deorbit&amp;lt;/code&amp;gt; || object || Satellites whose deorbit burn has fired. See [[#Deorbiting|Deorbiting]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;antennas&amp;lt;/code&amp;gt; || array || 1 to 8 antennas (satellites: 1 to 4). See [[#Antennas and rigs|Antennas and rigs]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rigs&amp;lt;/code&amp;gt; || array || 0 to 8 rigs.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;createdAt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;updatedAt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;launchedAt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;deorbitedAt&amp;lt;/code&amp;gt; || string || Timestamps; &amp;lt;code&amp;gt;launchedAt&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;deorbitedAt&amp;lt;/code&amp;gt; for satellites.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Antennas and rigs ===&lt;br /&gt;
An &amp;#039;&amp;#039;&amp;#039;antenna&amp;#039;&amp;#039;&amp;#039; has &amp;lt;code&amp;gt;antennaId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; (at most 64 characters), &amp;lt;code&amp;gt;ordinal&amp;lt;/code&amp;gt; (its position; the first antenna is the default for tickets), &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;, and the fields of the game protocol&amp;#039;s [[SimTX API/Data types#AntennaConfig|AntennaConfig]] in camelCase:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || An [[SimTX API/Data types#Antenna types|antenna type]] name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;heightMeters&amp;lt;/code&amp;gt; || ≥ 0. Default 10 for ground stations, 0 for satellites.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;azimuthDeg&amp;lt;/code&amp;gt; || −360 to 360.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;feedlineLossDb&amp;lt;/code&amp;gt; || ≥ 0. Default 1 for ground stations, 0 for satellites.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wireLengthMeters&amp;lt;/code&amp;gt; || ≥ 0. 0 sizes the template for the operating frequency.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;necDeck&amp;lt;/code&amp;gt; || Optional NEC-2 deck, at most 262,144 bytes; replaces the template. Satellite decks must not contain a &amp;lt;code&amp;gt;GN&amp;lt;/code&amp;gt; card. Read responses add &amp;lt;code&amp;gt;necDeckSha256&amp;lt;/code&amp;gt;, the hex SHA-256 of the deck.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mount&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;FIXED&amp;lt;/code&amp;gt; (default), &amp;lt;code&amp;gt;AZ&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AZEL&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pointing&amp;lt;/code&amp;gt; || Steerable mounts only: &amp;lt;code&amp;gt;mode&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;FIXED&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;TRACK&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;azimuthDeg&amp;lt;/code&amp;gt; (−360 to 360), &amp;lt;code&amp;gt;elevationDeg&amp;lt;/code&amp;gt; (−90 to 90), &amp;lt;code&amp;gt;targetStationId&amp;lt;/code&amp;gt; (required for &amp;lt;code&amp;gt;TRACK&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;azimuthRateDegPerSec&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;elevationRateDegPerSec&amp;lt;/code&amp;gt; (0 to 360; 0 = default). A &amp;lt;code&amp;gt;FIXED&amp;lt;/code&amp;gt; mount stores no pointing. See [[SimTX API/Tracking and pointing]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;rig&amp;#039;&amp;#039;&amp;#039; is a saved radio profile: &amp;lt;code&amp;gt;rigId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paMaxWatts&amp;lt;/code&amp;gt; (0 to 10,000,000; default 100), &amp;lt;code&amp;gt;noiseFigureDb&amp;lt;/code&amp;gt; (0 to 100; default 6), and &amp;lt;code&amp;gt;tx&amp;lt;/code&amp;gt;, an object with the fifteen [[SimTX API/Data types#TxImperfections|transmitter imperfection]] values in camelCase (&amp;lt;code&amp;gt;finalDriveDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paHeadroomDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;audioCompressionDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paSoftness&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paAmPmDeg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;carrierLeakDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oppositeSidebandSuppressionDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;frequencyOffsetHz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mainsHumDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mainsHumHz&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;amModulationIndex&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;paSupplySagDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;txNoiseFloorDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oscillatorPhaseNoiseDb&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cwKeyRiseMs&amp;lt;/code&amp;gt;). Values left out take the generic HF preset.&lt;br /&gt;
&lt;br /&gt;
=== Orbit and attitude ===&lt;br /&gt;
&amp;lt;code&amp;gt;orbit&amp;lt;/code&amp;gt; holds the mean elements of the [[SimTX API/Satellites#Orbit model|simtx-j2-v1]] model: &amp;lt;code&amp;gt;model&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;simtx-j2-v1&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;epoch&amp;lt;/code&amp;gt; (read-only), &amp;lt;code&amp;gt;semiMajorAxisKm&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;eccentricity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;inclinationDeg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;raanDeg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;argumentOfPerigeeDeg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;meanAnomalyDeg&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;attitude&amp;lt;/code&amp;gt; has a &amp;lt;code&amp;gt;mode&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;NADIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;INERTIAL&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;SPIN&amp;lt;/code&amp;gt; and the fields of that mode: &amp;lt;code&amp;gt;yawDeg&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;rightAscensionDeg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;declinationDeg&amp;lt;/code&amp;gt; (−90 to 90), &amp;lt;code&amp;gt;rollDeg&amp;lt;/code&amp;gt;; or &amp;lt;code&amp;gt;spinAxis&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;NADIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ORBIT_NORMAL&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VELOCITY&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;spinRateRpm&amp;lt;/code&amp;gt; (0 to 60), &amp;lt;code&amp;gt;spinPhaseDeg&amp;lt;/code&amp;gt;. See [[SimTX API/Satellites#Attitude|Attitude]].&lt;br /&gt;
&lt;br /&gt;
== Listing stations ==&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v1/stations&amp;lt;/code&amp;gt; returns the account&amp;#039;s stations, ground and satellite, including deorbited satellites that have not been deleted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -s https://auth.simtx.net/api/v1/stations -H &amp;quot;Authorization: Bearer $SIMTX_TOKEN&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating a ground station ==&lt;br /&gt;
&amp;lt;code&amp;gt;POST /api/v1/stations&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;Home&amp;quot;,&lt;br /&gt;
  &amp;quot;callsign&amp;quot;: &amp;quot;N0CALL&amp;quot;,&lt;br /&gt;
  &amp;quot;visibility&amp;quot;: &amp;quot;UNLISTED&amp;quot;,&lt;br /&gt;
  &amp;quot;location&amp;quot;: { &amp;quot;latitudeDeg&amp;quot;: 47.4979, &amp;quot;longitudeDeg&amp;quot;: 19.0402, &amp;quot;altitudeMeters&amp;quot;: 120.0 },&lt;br /&gt;
  &amp;quot;antennas&amp;quot;: [ { &amp;quot;name&amp;quot;: &amp;quot;40 m dipole&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;DIPOLE&amp;quot;, &amp;quot;heightMeters&amp;quot;: 10.0, &amp;quot;azimuthDeg&amp;quot;: 90.0 } ],&lt;br /&gt;
  &amp;quot;rigs&amp;quot;: [ { &amp;quot;name&amp;quot;: &amp;quot;100 W transceiver&amp;quot;, &amp;quot;paMaxWatts&amp;quot;: 100.0, &amp;quot;noiseFigureDb&amp;quot;: 6.0 } ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;callsign&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt; and at least one antenna are required. &amp;lt;code&amp;gt;visibility&amp;lt;/code&amp;gt; defaults to &amp;lt;code&amp;gt;UNLISTED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;limits&amp;lt;/code&amp;gt; to 16 sessions, 4 transmitters and 16 receivers before clamping. A ground station is often a real address: clients should keep the UNLISTED default unless the user chooses otherwise.&lt;br /&gt;
&lt;br /&gt;
== Reading, editing and deleting ==&lt;br /&gt;
* &amp;lt;code&amp;gt;GET /api/v1/stations/{id}&amp;lt;/code&amp;gt; returns one station. Another account&amp;#039;s station is &amp;lt;code&amp;gt;404 station_not_found&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;PATCH /api/v1/stations/{id}&amp;lt;/code&amp;gt; takes any of &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;callsign&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;visibility&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;limits&amp;lt;/code&amp;gt; and, for ground stations, &amp;lt;code&amp;gt;location&amp;lt;/code&amp;gt;. Omitted fields keep their values. There is no cooldown on location changes.&lt;br /&gt;
* &amp;lt;code&amp;gt;DELETE /api/v1/stations/{id}&amp;lt;/code&amp;gt; deletes a ground station, or a satellite that has reentered (&amp;lt;code&amp;gt;DEORBITED&amp;lt;/code&amp;gt;). An active or deorbiting satellite is refused with &amp;lt;code&amp;gt;409 satellite_active&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Every edit increases the station&amp;#039;s &amp;lt;code&amp;gt;revision&amp;lt;/code&amp;gt;. Sessions bound to the station either continue with the new values or end; see [[SimTX API/Stations#Edits while sessions run|Edits while sessions run]].&lt;br /&gt;
&lt;br /&gt;
=== Antennas and rigs ===&lt;br /&gt;
Ground stations only; a launched satellite is sealed.&lt;br /&gt;
* &amp;lt;code&amp;gt;POST /api/v1/stations/{id}/antennas&amp;lt;/code&amp;gt; adds an antenna (at most 8). &amp;lt;code&amp;gt;PATCH .../antennas/{antennaId}&amp;lt;/code&amp;gt; changes one; omitted fields keep their values. &amp;lt;code&amp;gt;DELETE .../antennas/{antennaId}&amp;lt;/code&amp;gt; removes one; the last antenna cannot be removed (&amp;lt;code&amp;gt;409 last_antenna&amp;lt;/code&amp;gt;).&lt;br /&gt;
* &amp;lt;code&amp;gt;POST /api/v1/stations/{id}/rigs&amp;lt;/code&amp;gt; adds a rig (at most 8). &amp;lt;code&amp;gt;PATCH .../rigs/{rigId}&amp;lt;/code&amp;gt; changes one; a &amp;lt;code&amp;gt;tx&amp;lt;/code&amp;gt; object replaces the stored imperfection values as a whole. &amp;lt;code&amp;gt;DELETE .../rigs/{rigId}&amp;lt;/code&amp;gt; removes one.&lt;br /&gt;
&lt;br /&gt;
Each returns the whole station.&lt;br /&gt;
&lt;br /&gt;
== Launching a satellite ==&lt;br /&gt;
&amp;lt;code&amp;gt;POST /api/v1/satellites&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;name&amp;quot;: &amp;quot;SimSat-1&amp;quot;,&lt;br /&gt;
  &amp;quot;callsign&amp;quot;: &amp;quot;SSAT1&amp;quot;,&lt;br /&gt;
  &amp;quot;visibility&amp;quot;: &amp;quot;PUBLIC&amp;quot;,&lt;br /&gt;
  &amp;quot;orbit&amp;quot;: {&lt;br /&gt;
    &amp;quot;model&amp;quot;: &amp;quot;simtx-j2-v1&amp;quot;,&lt;br /&gt;
    &amp;quot;semiMajorAxisKm&amp;quot;: 6921.0, &amp;quot;eccentricity&amp;quot;: 0.001, &amp;quot;inclinationDeg&amp;quot;: 97.6,&lt;br /&gt;
    &amp;quot;raanDeg&amp;quot;: 120.0, &amp;quot;argumentOfPerigeeDeg&amp;quot;: 90.0, &amp;quot;meanAnomalyDeg&amp;quot;: 10.0&lt;br /&gt;
  },&lt;br /&gt;
  &amp;quot;attitude&amp;quot;: { &amp;quot;mode&amp;quot;: &amp;quot;NADIR&amp;quot;, &amp;quot;yawDeg&amp;quot;: 0.0 },&lt;br /&gt;
  &amp;quot;antennas&amp;quot;: [ { &amp;quot;name&amp;quot;: &amp;quot;70 cm turnstile&amp;quot;, &amp;quot;type&amp;quot;: &amp;quot;TURNSTILE&amp;quot; } ],&lt;br /&gt;
  &amp;quot;rigs&amp;quot;: [ { &amp;quot;name&amp;quot;: &amp;quot;Beacon&amp;quot;, &amp;quot;paMaxWatts&amp;quot;: 2.0, &amp;quot;noiseFigureDb&amp;quot;: 2.0 } ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;callsign&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;orbit&amp;lt;/code&amp;gt; and 1 to 4 antennas are required; up to 8 rigs.&lt;br /&gt;
* The orbit is sent without &amp;lt;code&amp;gt;epoch&amp;lt;/code&amp;gt;. The account service sets the epoch to the launch instant and interprets the elements at that instant.&lt;br /&gt;
* The orbit must pass [[SimTX API/Satellites#Validation|validation]]: model &amp;lt;code&amp;gt;simtx-j2-v1&amp;lt;/code&amp;gt;, perigee at least 200 km and apogee at most 40,000 km above the 6,371 km sphere, 0 ≤ &amp;#039;&amp;#039;e&amp;#039;&amp;#039; &amp;lt; 1, 0 ≤ &amp;#039;&amp;#039;i&amp;#039;&amp;#039; ≤ 180°, finite angles, spin rate 0 to 60 rpm.&lt;br /&gt;
* Satellite antennas are modelled in free space; their NEC decks must not contain a &amp;lt;code&amp;gt;GN&amp;lt;/code&amp;gt; card.&lt;br /&gt;
* After launch the satellite is &amp;#039;&amp;#039;&amp;#039;sealed&amp;#039;&amp;#039;&amp;#039;: only &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;callsign&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;visibility&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;limits&amp;lt;/code&amp;gt; can change. Changes to the orbit, attitude, antennas or rigs are refused with &amp;lt;code&amp;gt;409 station_sealed&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Deorbiting ==&lt;br /&gt;
* &amp;lt;code&amp;gt;POST /api/v1/stations/{id}/deorbit/preview&amp;lt;/code&amp;gt; returns the &amp;lt;code&amp;gt;Deorbit&amp;lt;/code&amp;gt; object that a burn fired now would produce, without changing anything. It needs no particular scope. Use it to show the user when and where the satellite would reenter before they confirm.&lt;br /&gt;
* &amp;lt;code&amp;gt;POST /api/v1/stations/{id}/deorbit&amp;lt;/code&amp;gt; fires the burn and returns the station, now &amp;lt;code&amp;gt;DEORBITING&amp;lt;/code&amp;gt;, with its &amp;lt;code&amp;gt;orbit&amp;lt;/code&amp;gt; replaced by the post-burn elements (epoch = burn time) and &amp;lt;code&amp;gt;deorbit&amp;lt;/code&amp;gt; set. The burn is irreversible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;burnAt&amp;quot;: &amp;quot;2026-10-24T12:00:00Z&amp;quot;,&lt;br /&gt;
  &amp;quot;reentryAt&amp;quot;: &amp;quot;2026-10-24T12:29:00Z&amp;quot;,&lt;br /&gt;
  &amp;quot;reentryLocation&amp;quot;: { &amp;quot;latitudeDeg&amp;quot;: -12.3, &amp;quot;longitudeDeg&amp;quot;: 101.7, &amp;quot;altitudeMeters&amp;quot;: 80000.0 },&lt;br /&gt;
  &amp;quot;deltaVMps&amp;quot;: 189.0,&lt;br /&gt;
  &amp;quot;orbit&amp;quot;: {&lt;br /&gt;
    &amp;quot;model&amp;quot;: &amp;quot;simtx-j2-v1&amp;quot;, &amp;quot;epoch&amp;quot;: &amp;quot;2026-10-24T12:00:00Z&amp;quot;,&lt;br /&gt;
    &amp;quot;semiMajorAxisKm&amp;quot;: 6596.0, &amp;quot;eccentricity&amp;quot;: 0.0493, &amp;quot;inclinationDeg&amp;quot;: 97.6,&lt;br /&gt;
    &amp;quot;raanDeg&amp;quot;: 120.4, &amp;quot;argumentOfPerigeeDeg&amp;quot;: 270.0, &amp;quot;meanAnomalyDeg&amp;quot;: 180.0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;burnAt&amp;lt;/code&amp;gt; || When the burn fires (or fired).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;reentryAt&amp;lt;/code&amp;gt; || The first time after the burn that the height drops below 80 km. Sessions on the satellite end then, and it becomes &amp;lt;code&amp;gt;DEORBITED&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;reentryLocation&amp;lt;/code&amp;gt; || The sub-satellite point at &amp;lt;code&amp;gt;reentryAt&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;altitudeMeters&amp;lt;/code&amp;gt; is the 80 km interface.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;deltaVMps&amp;lt;/code&amp;gt; || Velocity change of the burn, m/s.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;orbit&amp;lt;/code&amp;gt; || The exact post-burn elements (epoch = &amp;lt;code&amp;gt;burnAt&amp;lt;/code&amp;gt;) that the service stores, or would store. Draw the fall from them; do not re-plan the burn.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The values in the example are illustrative. Deorbiting a satellite that is already deorbiting is refused with &amp;lt;code&amp;gt;409 already_deorbiting&amp;lt;/code&amp;gt;, one that has reentered with &amp;lt;code&amp;gt;409 station_inactive&amp;lt;/code&amp;gt;, and a ground station with &amp;lt;code&amp;gt;400 station_invalid&amp;lt;/code&amp;gt;. See [[SimTX API/Satellites#Deorbit|Deorbit]].&lt;br /&gt;
&lt;br /&gt;
== Quotas ==&lt;br /&gt;
The number of stations an account may own is capped by numeric capabilities of the account: &amp;lt;code&amp;gt;game.owned_stations.N&amp;lt;/code&amp;gt; for all active stations, ground and satellite, and &amp;lt;code&amp;gt;game.owned_satellites.N&amp;lt;/code&amp;gt; for active satellites. Deorbiting satellites count until they reenter. &amp;lt;code&amp;gt;game.station_sessions.N&amp;lt;/code&amp;gt; caps a station&amp;#039;s session limits. Defaults: members 100, 25 and 16; supporters 500, 100 and 64. There are no cooldowns. A creation over a quota is refused with &amp;lt;code&amp;gt;409 station_quota_exceeded&amp;lt;/code&amp;gt;, with &amp;lt;code&amp;gt;fieldErrors.capability&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;fieldErrors.limit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! HTTP !! &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt; !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 400 || &amp;lt;code&amp;gt;station_invalid&amp;lt;/code&amp;gt; || A field is invalid; &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;fieldErrors&amp;lt;/code&amp;gt; name it.&lt;br /&gt;
|-&lt;br /&gt;
| 403 || &amp;lt;code&amp;gt;scope_required&amp;lt;/code&amp;gt; || The credential&amp;#039;s scope lacks &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 403 || &amp;lt;code&amp;gt;permission_denied&amp;lt;/code&amp;gt; || The account lacks &amp;lt;code&amp;gt;station.manage&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 403 || &amp;lt;code&amp;gt;account_credential_required&amp;lt;/code&amp;gt; || A service credential was used.&lt;br /&gt;
|-&lt;br /&gt;
| 404 || &amp;lt;code&amp;gt;station_not_found&amp;lt;/code&amp;gt; || Unknown station, or not yours.&lt;br /&gt;
|-&lt;br /&gt;
| 409 || &amp;lt;code&amp;gt;station_sealed&amp;lt;/code&amp;gt; || The change would modify a launched satellite.&lt;br /&gt;
|-&lt;br /&gt;
| 409 || &amp;lt;code&amp;gt;station_inactive&amp;lt;/code&amp;gt; || The satellite has reentered.&lt;br /&gt;
|-&lt;br /&gt;
| 409 || &amp;lt;code&amp;gt;last_antenna&amp;lt;/code&amp;gt; || A station keeps at least one antenna.&lt;br /&gt;
|-&lt;br /&gt;
| 409 || &amp;lt;code&amp;gt;station_quota_exceeded&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;fieldErrors&amp;lt;/code&amp;gt; name the capability and its limit.&lt;br /&gt;
|-&lt;br /&gt;
| 409 || &amp;lt;code&amp;gt;satellite_active&amp;lt;/code&amp;gt; || Delete refused; deorbit the satellite and wait for its reentry first.&lt;br /&gt;
|-&lt;br /&gt;
| 409 || &amp;lt;code&amp;gt;already_deorbiting&amp;lt;/code&amp;gt; || The burn has already fired.&lt;br /&gt;
|-&lt;br /&gt;
| 413 || &amp;lt;code&amp;gt;request_too_large&amp;lt;/code&amp;gt; || The body is over 2 MiB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{SimTX API navbox}}&lt;br /&gt;
[[Category:SimTX API]]&lt;br /&gt;
[[Category:SimTX API account service]]&lt;/div&gt;</summary>
		<author><name>Clanker</name></author>
	</entry>
</feed>