<?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_v24%2FGame_tickets</id>
	<title>SimTX API v24/Game tickets - 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_v24%2FGame_tickets"/>
	<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API_v24/Game_tickets&amp;action=history"/>
	<updated>2026-11-05T03:43:02Z</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_v24/Game_tickets&amp;diff=2129&amp;oldid=prev</id>
		<title>Clanker: Archive the v24 protocol reference: use the v24 templates, links and categories</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API_v24/Game_tickets&amp;diff=2129&amp;oldid=prev"/>
		<updated>2026-10-24T16:13:42Z</updated>

		<summary type="html">&lt;p&gt;Archive the v24 protocol reference: use the v24 templates, links and categories&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 16:13, 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; 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;{{SimTX API navigation}}&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;{{SimTX API &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v24 &lt;/ins&gt;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;game ticket&#039;&#039;&#039; is a short-lived, single-use credential that a client presents to a game server in the [[SimTX API/Packets/Handshake|Handshake]]. Tickets keep reusable credentials away from game servers: the server only ever sees a ticket that is worthless sixty seconds later.&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;game ticket&#039;&#039;&#039; is a short-lived, single-use credential that a client presents to a game server in the [[SimTX API &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v24&lt;/ins&gt;/Packets/Handshake|Handshake]]. Tickets keep reusable credentials away from game servers: the server only ever sees a ticket that is worthless sixty seconds later.&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;Anonymous receiver and control connections do not need a 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;Anonymous receiver and control connections do not need a ticket.&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-l16&quot;&gt;Line 16:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&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;! Field !! Type !! Description&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;! Field !! Type !! Description&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;serverId&amp;lt;/code&amp;gt; || string || A &amp;lt;code&amp;gt;serverId&amp;lt;/code&amp;gt; from the [[SimTX API/Server directory|server directory]].&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;serverId&amp;lt;/code&amp;gt; || string || A &amp;lt;code&amp;gt;serverId&amp;lt;/code&amp;gt; from the [[SimTX API &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v24&lt;/ins&gt;/Server directory|server directory]].&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;role&amp;lt;/code&amp;gt; || string || The protocol role the ticket will be used for. See the table below.&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;role&amp;lt;/code&amp;gt; || string || The protocol role the ticket will be used for. See the table below.&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-l40&quot;&gt;Line 40:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 40:&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;There is no ticket role for &amp;lt;code&amp;gt;TIMESTAMPED_RECEIVER&amp;lt;/code&amp;gt; (role 6). That role is anonymous only.&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;There is no ticket role for &amp;lt;code&amp;gt;TIMESTAMPED_RECEIVER&amp;lt;/code&amp;gt; (role 6). That role is anonymous only.&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;An authenticated &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; connection is only needed to publish to or delete from the [[SimTX API/Extension catalog protocol|extension catalog]]. Reading the station list, maps and the catalog works anonymously.&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 authenticated &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; connection is only needed to publish to or delete from the [[SimTX API &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v24&lt;/ins&gt;/Extension catalog protocol|extension catalog]]. Reading the station list, maps and the catalog works anonymously.&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 permission check uses the intersection of the credential&amp;#039;s scopes and the account&amp;#039;s effective permissions on that server. A credential created with scope &amp;lt;code&amp;gt;catalog.publish&amp;lt;/code&amp;gt; cannot obtain a &amp;lt;code&amp;gt;tx-audio&amp;lt;/code&amp;gt; ticket, even if the account itself may transmit.&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 permission check uses the intersection of the credential&amp;#039;s scopes and the account&amp;#039;s effective permissions on that server. A credential created with scope &amp;lt;code&amp;gt;catalog.publish&amp;lt;/code&amp;gt; cannot obtain a &amp;lt;code&amp;gt;tx-audio&amp;lt;/code&amp;gt; ticket, even if the account itself may transmit.&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-l63&quot;&gt;Line 63:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 63:&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;* It is bound to the requested &amp;lt;code&amp;gt;serverId&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt;. Presenting it to another server or with another role fails with &amp;lt;code&amp;gt;CREDENTIAL_INVALID&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;* It is bound to the requested &amp;lt;code&amp;gt;serverId&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt;. Presenting it to another server or with another role fails with &amp;lt;code&amp;gt;CREDENTIAL_INVALID&amp;lt;/code&amp;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;* Fetch a new ticket for every connection, including every reconnect. Do not fetch tickets in advance.&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;* Fetch a new ticket for every connection, including every reconnect. Do not fetch tickets in advance.&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 ticket does not carry the user&#039;s identity in readable form. The server resolves it and returns the account in [[SimTX API/Packets/HandshakeResult|HandshakeResult]].&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 ticket does not carry the user&#039;s identity in readable form. The server resolves it and returns the account in [[SimTX API &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v24&lt;/ins&gt;/Packets/HandshakeResult|HandshakeResult]].&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;== Errors ==&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;== Errors ==&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-l90&quot;&gt;Line 90:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 90:&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 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;{{SimTX API navbox}}&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;{{SimTX API &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v24 &lt;/ins&gt;navbox}}&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;[[Category:SimTX API]]&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;[[Category:SimTX API &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v24&lt;/ins&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;[[Category:SimTX API account service]]&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;[[Category:SimTX API &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;v24 &lt;/ins&gt;account service]]&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_v24/Game_tickets&amp;diff=2106&amp;oldid=prev</id>
		<title>Clanker: Clanker moved page SimTX API/Game tickets to SimTX API v24/Game tickets: Archive the v24 protocol reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API_v24/Game_tickets&amp;diff=2106&amp;oldid=prev"/>
		<updated>2026-10-24T16:12:36Z</updated>

		<summary type="html">&lt;p&gt;Clanker moved page &lt;a href=&quot;/index.php/SimTX_API/Game_tickets&quot; title=&quot;SimTX API/Game tickets&quot;&gt;SimTX API/Game tickets&lt;/a&gt; to &lt;a href=&quot;/index.php/SimTX_API_v24/Game_tickets&quot; title=&quot;SimTX API v24/Game tickets&quot;&gt;SimTX API v24/Game tickets&lt;/a&gt;: Archive the v24 protocol reference&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:12, 24 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&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_v24/Game_tickets&amp;diff=1999&amp;oldid=prev</id>
		<title>Clanker: SimTX API documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.simtx.net/index.php?title=SimTX_API_v24/Game_tickets&amp;diff=1999&amp;oldid=prev"/>
		<updated>2026-10-24T09:51:03Z</updated>

		<summary type="html">&lt;p&gt;SimTX API documentation&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;game ticket&amp;#039;&amp;#039;&amp;#039; is a short-lived, single-use credential that a client presents to a game server in the [[SimTX API/Packets/Handshake|Handshake]]. Tickets keep reusable credentials away from game servers: the server only ever sees a ticket that is worthless sixty seconds later.&lt;br /&gt;
&lt;br /&gt;
Anonymous receiver and control connections do not need a ticket.&lt;br /&gt;
&lt;br /&gt;
== Request ==&lt;br /&gt;
&amp;lt;code&amp;gt;POST /api/v1/game-tickets&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Requires a bearer credential. Rate limit: 120 requests per minute per IP address.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{ &amp;quot;serverId&amp;quot;: &amp;quot;argon&amp;quot;, &amp;quot;role&amp;quot;: &amp;quot;tx-audio&amp;quot; }&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;serverId&amp;lt;/code&amp;gt; || string || A &amp;lt;code&amp;gt;serverId&amp;lt;/code&amp;gt; from the [[SimTX API/Server directory|server directory]].&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; || string || The protocol role the ticket will be used for. See the table below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Roles ===&lt;br /&gt;
The ticket is bound to one role. The role string in the request must correspond to the role byte later sent in the handshake.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Ticket &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; !! Handshake role byte !! Permission required to obtain the ticket&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;receiver&amp;lt;/code&amp;gt; || 1 &amp;lt;code&amp;gt;RECEIVER&amp;lt;/code&amp;gt; || None&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tx-audio&amp;lt;/code&amp;gt; || 2 &amp;lt;code&amp;gt;TX_AUDIO&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;game.transmit&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tx-generated&amp;lt;/code&amp;gt; || 3 &amp;lt;code&amp;gt;TX_GENERATED&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;game.transmit&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; || 4 &amp;lt;code&amp;gt;CONTROL&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;catalog.publish&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;moderation&amp;lt;/code&amp;gt; || 5 &amp;lt;code&amp;gt;MODERATION&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;moderation.manage&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is no ticket role for &amp;lt;code&amp;gt;TIMESTAMPED_RECEIVER&amp;lt;/code&amp;gt; (role 6). That role is anonymous only.&lt;br /&gt;
&lt;br /&gt;
An authenticated &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt; connection is only needed to publish to or delete from the [[SimTX API/Extension catalog protocol|extension catalog]]. Reading the station list, maps and the catalog works anonymously.&lt;br /&gt;
&lt;br /&gt;
The permission check uses the intersection of the credential&amp;#039;s scopes and the account&amp;#039;s effective permissions on that server. A credential created with scope &amp;lt;code&amp;gt;catalog.publish&amp;lt;/code&amp;gt; cannot obtain a &amp;lt;code&amp;gt;tx-audio&amp;lt;/code&amp;gt; ticket, even if the account itself may transmit.&lt;br /&gt;
&lt;br /&gt;
== Response ==&lt;br /&gt;
&amp;lt;code&amp;gt;201 Created&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;
{ &amp;quot;ticket&amp;quot;: &amp;quot;stx_gt1_7e21…&amp;quot;, &amp;quot;expiresAt&amp;quot;: &amp;quot;2026-10-24T12:01:00Z&amp;quot; }&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;ticket&amp;lt;/code&amp;gt; || string || The ticket. Place it in the &amp;lt;code&amp;gt;credential&amp;lt;/code&amp;gt; field of the handshake with &amp;lt;code&amp;gt;authKind = 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;expiresAt&amp;lt;/code&amp;gt; || string || Expiry time, 60 seconds after issue.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
* A ticket is valid for &amp;#039;&amp;#039;&amp;#039;60 seconds&amp;#039;&amp;#039;&amp;#039; and can be used &amp;#039;&amp;#039;&amp;#039;once&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* It is bound to the requested &amp;lt;code&amp;gt;serverId&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt;. Presenting it to another server or with another role fails with &amp;lt;code&amp;gt;CREDENTIAL_INVALID&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Fetch a new ticket for every connection, including every reconnect. Do not fetch tickets in advance.&lt;br /&gt;
* A ticket does not carry the user&amp;#039;s identity in readable form. The server resolves it and returns the account in [[SimTX API/Packets/HandshakeResult|HandshakeResult]].&lt;br /&gt;
&lt;br /&gt;
== Errors ==&lt;br /&gt;
All validation failures use HTTP &amp;lt;code&amp;gt;400&amp;lt;/code&amp;gt; with code &amp;lt;code&amp;gt;ticket_request_invalid&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt; distinguishes the cause:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! &amp;lt;code&amp;gt;message&amp;lt;/code&amp;gt; !! Cause&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;serverId and role are required&amp;lt;/code&amp;gt; || A field is missing or blank.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;unknown protocol role&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;role&amp;lt;/code&amp;gt; is not one of the strings above.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;unknown, disabled, or offline server&amp;lt;/code&amp;gt; || The server is not in the directory right now.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;credential is not authorized for the requested protocol role&amp;lt;/code&amp;gt; || The credential&amp;#039;s scopes, or the account&amp;#039;s permissions, do not include the permission the role requires.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;401 credential_missing&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;401 credential_invalid&amp;lt;/code&amp;gt; apply as for every authenticated endpoint.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -s -X POST https://auth.simtx.net/api/v1/game-tickets \&lt;br /&gt;
  -H &amp;quot;Authorization: Bearer $SIMTX_TOKEN&amp;quot; \&lt;br /&gt;
  -H &amp;#039;Content-Type: application/json&amp;#039; \&lt;br /&gt;
  -d &amp;#039;{&amp;quot;serverId&amp;quot;:&amp;quot;argon&amp;quot;,&amp;quot;role&amp;quot;:&amp;quot;tx-audio&amp;quot;}&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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>