<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://rt-wiki.bestpractical.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Uidzip</id>
	<title>Request Tracker Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://rt-wiki.bestpractical.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Uidzip"/>
	<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/wiki/Special:Contributions/Uidzip"/>
	<updated>2026-08-22T16:30:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=REST&amp;diff=26520</id>
		<title>REST</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=REST&amp;diff=26520"/>
		<updated>2017-09-07T08:02:40Z</updated>

		<summary type="html">&lt;p&gt;Uidzip: edit linked text for rt-client to conform to rest of list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
The REST Interface gives you access to your RT Database. The complete communication is encapsulated in the HTTP protocol. The interface should be accessible in your installation.&lt;br /&gt;
&lt;br /&gt;
Though you may see references to older 3.x releases of RT below, Best Practice indicates that the REST stuff has not changed in any significant way in 4.x as of, at least, 1/2012.&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/index.php?search={{TALKPAGENAME}}&amp;amp;title=Special:Search Legacy Comments] are available from the previous Wikia instance.&lt;br /&gt;
&lt;br /&gt;
== Interface ==&lt;br /&gt;
&lt;br /&gt;
Base URL: &amp;lt;code&amp;gt;.../REST/1.0/&amp;lt;/code&amp;gt;. The default response should be:&lt;br /&gt;
&lt;br /&gt;
    RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
    # Invalid object specification: &#039;index.html&#039;&lt;br /&gt;
&lt;br /&gt;
    id: index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
The REST Interface does not support HTTP-Authentication. So you must get a valid Session-Token and submit the cookie each request. You usually get a Session-Cookie by submitting the default login form. Use variables &amp;quot;&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;&amp;quot; for login and &amp;quot;&amp;lt;code&amp;gt;pass&amp;lt;/code&amp;gt;&amp;quot; for password values. wget doesn&#039;t escape any characters in the --post-data option so make sure you properly escape any special characters in the password.&lt;br /&gt;
&lt;br /&gt;
See the wget invocation line below:&lt;br /&gt;
&lt;br /&gt;
    wget  --keep-session-cookies \&lt;br /&gt;
    --save-cookies cookies.txt \&lt;br /&gt;
    --post-data &#039;user=UUUU&amp;amp;pass=PPPP&#039; \&lt;br /&gt;
    http://my.rt.server&lt;br /&gt;
&lt;br /&gt;
You need the -keep-session-cookies option to make wget save session cookies.&lt;br /&gt;
&lt;br /&gt;
=== Ticket ===&lt;br /&gt;
&lt;br /&gt;
==== Ticket Properties ====&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single ticket, not including the history and comments.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.4.5 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;&lt;br /&gt;
 Queue: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Owner: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Creator: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Subject: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Status: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Priority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 InitialPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 FinalPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Requestors: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Cc: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 AdminCc: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Created: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Starts: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Started: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Due: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Resolved: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Told: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeEstimated: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeWorked: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeLeft: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Links ====&lt;br /&gt;
&lt;br /&gt;
Gets the ticket links for a single ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links/show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.2 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&lt;br /&gt;
 HasMember: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 ReferredToBy: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 DependedOnBy: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 MemberOf: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 RefersTo: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 DependsOn: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachments ====&lt;br /&gt;
&lt;br /&gt;
Gets a list of all attachments related to the ticket&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachment ====&lt;br /&gt;
Gets the metadata and content of a specific attachment.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments/&amp;amp;lt;attachment-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.8.0 200 Ok&lt;br /&gt;
 &lt;br /&gt;
id: &amp;lt;attachment-id&amp;gt;&lt;br /&gt;
Subject:&lt;br /&gt;
Creator: &amp;lt;user-id&amp;gt;&lt;br /&gt;
Created: &amp;lt;timestamp&amp;gt;&lt;br /&gt;
Transaction: &amp;lt;transaction-id&amp;gt;&lt;br /&gt;
Parent: &amp;lt;parent-id&amp;gt;&lt;br /&gt;
MessageId:&lt;br /&gt;
Filename: &amp;lt;filename&amp;gt;&lt;br /&gt;
ContentType: application/octet-stream&lt;br /&gt;
ContentEncoding: none&lt;br /&gt;
 &lt;br /&gt;
Headers: MIME-Version: 1.0&lt;br /&gt;
         X-Mailer: MIME-tools 5.427 (Entity 5.427)&lt;br /&gt;
         Content-Type: application/octet-stream;&lt;br /&gt;
           name=&amp;quot;&amp;lt;filename&amp;gt;&amp;quot;&lt;br /&gt;
         Content-Disposition: inline; filename=&amp;quot;&amp;lt;filename&amp;gt;&amp;quot;&lt;br /&gt;
         Content-Transfer-Encoding: base64&lt;br /&gt;
         Content-Length: &amp;lt;length in bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content: ...&lt;br /&gt;
         ...&lt;br /&gt;
         ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: RT returns the content indented with 9 spaces on each line, so that it lines up with the &amp;quot;Content:&amp;quot; header. Even if you strip this out with a regexp, the content is still UTF-8, which is probably not what you want. To get the original binary data back, strip out the 9 spaces with a regexp, strip off the 3 carriage returns at the end, and then convert the whole thing from UTF-8 to the native character encoding of the attachment, whatever that is. RT doesn&#039;t tell you, so you have know. If the attachments were uploaded by a U.S. Windows system, odds are that Windows-1252 is what you want. If you can&#039;t get the binary back intact, see the next method below.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachment Content ====&lt;br /&gt;
&lt;br /&gt;
Gets the attachment data content without additional metadata or whitespace characters&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments/&amp;amp;lt;attachment-id&amp;amp;gt;/content&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.0 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
So to get the original content you still have to strip the first 2 lines of the response.&lt;br /&gt;
&lt;br /&gt;
==== Ticket History ====&lt;br /&gt;
Gets a list of all the history items for a given ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;history-count&amp;gt;/&amp;lt;history-count&amp;gt; (/total)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;history-id&amp;gt;: &amp;lt;history-name&amp;gt;&lt;br /&gt;
&amp;lt;history-id&amp;gt;: &amp;lt;history-name&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will get an additional row, for each history entry found. The first entry is usually: &amp;quot;&amp;lt;code&amp;gt;Ticket created by ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are two ways to get history item detail: you can do one of these and then recursively perform &amp;lt;code&amp;gt;ticket/history/id/&amp;amp;lt;history-id&amp;amp;gt;&amp;lt;/code&amp;gt; for each history-id from this REST call, but that is extremely wasteful and will scale horribly. What you really want to do is one REST call but get the long format:&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history?format=l&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.8.2 200 Ok&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;n&amp;gt;/&amp;lt;n&amp;gt; (id/&amp;amp;lt;history-id&amp;amp;gt;/total)&lt;br /&gt;
&lt;br /&gt;
id: &amp;lt;history-id&amp;gt;&lt;br /&gt;
Ticket: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
TimeTaken: &amp;lt;...&amp;gt;&lt;br /&gt;
Type: &amp;lt;...&amp;gt;&lt;br /&gt;
Field: &amp;lt;...&amp;gt;&lt;br /&gt;
OldValue: &amp;lt;...&amp;gt;&lt;br /&gt;
NewValue: &amp;lt;...&amp;gt;&lt;br /&gt;
Data: &amp;lt;...&amp;gt;&lt;br /&gt;
Description: &amp;lt;...&amp;gt;&lt;br /&gt;
Content: &amp;lt;...&amp;gt;&lt;br /&gt;
Creator: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Created: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attachments:&lt;br /&gt;
             &amp;lt;attachment-id&amp;gt;: &amp;lt;filename&amp;gt; (&amp;lt;size&amp;gt;)&lt;br /&gt;
             &amp;lt;attachment-id&amp;gt;: &amp;lt;filename&amp;gt; (&amp;lt;size&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;n&amp;gt;/&amp;lt;n&amp;gt; (id/&amp;amp;lt;history-id&amp;amp;gt;/total)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: the double dash &amp;quot;--&amp;quot; will occur in the long format between each history item. You can split the output on &amp;quot;--&amp;quot; and iterate over it, parsing out the data with an RFC822 parser, such as an email handling library.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Ticket History Entry ====&lt;br /&gt;
Gets the history information for a single history item. Note that the history item must actually correspond to the ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history/id/&amp;amp;lt;history-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
# 70/70 (id/114856/total)&lt;br /&gt;
&lt;br /&gt;
id: &amp;lt;history-id&amp;gt;&lt;br /&gt;
Ticket: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
TimeTaken: &amp;lt;...&amp;gt;&lt;br /&gt;
Type: &amp;lt;...&amp;gt;&lt;br /&gt;
Field: &amp;lt;...&amp;gt;&lt;br /&gt;
OldValue: &amp;lt;...&amp;gt;&lt;br /&gt;
NewValue: &amp;lt;...&amp;gt;&lt;br /&gt;
Data: &amp;lt;...&amp;gt;&lt;br /&gt;
Description: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content: &amp;lt;lin1-0&amp;gt;&lt;br /&gt;
         &amp;lt;line-1&amp;gt;&lt;br /&gt;
         ...&lt;br /&gt;
         &amp;lt;line-n&amp;gt;&lt;br /&gt;
         &lt;br /&gt;
Creator: &amp;lt;...&amp;gt;&lt;br /&gt;
Created: &amp;lt;...&amp;gt;&lt;br /&gt;
Attachments: &amp;lt;...&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;IMPORTANT NOTE: At least with RT 3.8.0, when you request a history item with this method AND you have attached a file that has Mime type text/plain to the same item (eg. a comment with an attachement), RT will return the complete content of the attachment for the key &amp;quot;Content:&amp;quot; and not your real comment that you can see in the web frontend. This may lead to some problems if the requestor does not expect to get a comment content that is for example 1.8 MB of text. With other Mime type attachments this however seems to work. I don&#039;t know if this is a feature or a bug.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Ticket Search&#039;&#039;&#039; ====&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=&amp;amp;lt;query&amp;amp;gt;&amp;amp;orderby=&amp;amp;lt;sort-order&amp;amp;gt;&amp;amp;format=&amp;amp;lt;format&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;query&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can use any query generated by the query builder - or feel free to write your own. Here an example that will do the following: Find all tickets that have no owner and the status new or open&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;query= Owner = &#039;Nobody&#039; AND ( Status = &#039;new&#039; OR Status = &#039;open&#039; )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: to get all the tickets in &amp;quot;fooQueue&amp;quot; you&#039;d access:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: to get the tickets for a custom field &amp;quot;Contact Name&amp;quot; you&#039;d access:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=&#039;CF.{Contact Name}&#039;=&#039;Shaun Wallace&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;orderby&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By this parameter you can change the sort field and order of the search result. To sort a list ascending just put a + before the fieldname, otherwise a -. Eg: -Created (will put the newest tickets at the beginning).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;amp;orderby=+Created&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;format&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* i: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;&lt;br /&gt;
* s: &amp;amp;lt;ticket-id&amp;amp;gt;: &amp;amp;lt;ticket-subject&amp;amp;gt;&lt;br /&gt;
* l: a multi-line format&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;amp;orderby=+Created&amp;amp;format=i&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fields&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A list of fields you would like included in the result set.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=id=42&amp;amp;format=l&amp;amp;fields=Subject,Status,Priority,CF.\{Category\}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you may need to escape characters like the curly braces for CFs.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Ticket Create&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
To create a new ticket: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/new&amp;lt;/code&amp;gt; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line, example:&lt;br /&gt;
&lt;br /&gt;
Testing the new ticket section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: ticket/new&lt;br /&gt;
Queue: &amp;lt;queue name&amp;gt;&lt;br /&gt;
Requestor: &amp;lt;requestor email address&amp;gt;&lt;br /&gt;
Subject: &amp;lt;subject&amp;gt;&lt;br /&gt;
Cc: &amp;lt;...&amp;gt;&lt;br /&gt;
AdminCc: &amp;lt;...&amp;gt;&lt;br /&gt;
Owner: &amp;lt;...&amp;gt;&lt;br /&gt;
Status: &amp;lt;...&amp;gt;&lt;br /&gt;
Priority: &amp;lt;...&amp;gt;&lt;br /&gt;
InitialPriority: &amp;lt;...&amp;gt;&lt;br /&gt;
FinalPriority: &amp;lt;...&amp;gt;&lt;br /&gt;
TimeEstimated: &amp;lt;...&amp;gt;&lt;br /&gt;
Starts: &amp;lt;...&amp;gt;&lt;br /&gt;
Due: &amp;lt;...&amp;gt;&lt;br /&gt;
Text: &amp;lt;The ticket content&amp;gt;&lt;br /&gt;
CF-&amp;lt;CustomFieldName&amp;gt;: &amp;lt;CustomFieldValue&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there are any &amp;quot;special&amp;quot; characters (Umlauts, dash, ...?) in a custom field&#039;s name, you can still access it via its ID:&lt;br /&gt;
 CF-$id: &amp;lt;Value&amp;gt;&lt;br /&gt;
If you want to have a multiline Text, prefix every line with a blank.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Due: &amp;lt;...&amp;gt;&lt;br /&gt;
Text: This is &lt;br /&gt;
 a &lt;br /&gt;
 multiline Text&lt;br /&gt;
 !!!&lt;br /&gt;
CF-&amp;lt;CustomFieldName&amp;gt;: &amp;lt;CustomFieldValue&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The response should look like: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/4.0.6 200 Ok&lt;br /&gt;
&lt;br /&gt;
# Ticket 775 created.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== curl example =====&lt;br /&gt;
    &lt;br /&gt;
  * Create a file containing the ticket form:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: ticket/new&lt;br /&gt;
Queue: queue1&lt;br /&gt;
Requestor: requestor@email&lt;br /&gt;
Priority: 4&lt;br /&gt;
CF-Type of request: Demande&lt;br /&gt;
Subject: Test REST&lt;br /&gt;
Text: Multi line&lt;br /&gt;
 test with&lt;br /&gt;
 special chars: é&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  * Submit using curl:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl --data-urlencode content@file.name &#039;https://HOSTNAME/REST/1.0/ticket/new?user=USER&amp;amp;pass=PASSWORD&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Ticket Edit ====&lt;br /&gt;
To update an existing ticket: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/edit&amp;lt;/code&amp;gt; with a variable named &amp;quot;content&amp;quot;, containing &amp;quot;key: value&amp;quot; line by line (like the one displayed when issuing &amp;lt;code&amp;gt;ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;). Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Priority: 5&lt;br /&gt;
TimeWorked: 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*PHP&lt;br /&gt;
   &amp;lt;pre&amp;gt; &lt;br /&gt;
                    $username = rt_user;&lt;br /&gt;
                    $password = rt_pass;&lt;br /&gt;
                    $url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/&amp;lt;ticket id&amp;gt;/edit?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
                    $request = new HttpRequest($url, HTTP_METH_POST);&lt;br /&gt;
                    $post_data=array(&amp;quot;content&amp;quot;=&amp;gt;&amp;quot;AdminCc: userX\nText: This is a REST test edit ticket\n&amp;quot;);&lt;br /&gt;
                    &lt;br /&gt;
                    // add the post fields  &lt;br /&gt;
                    $request-&amp;gt;addPostFields($postData);&lt;br /&gt;
                    // response from RT&lt;br /&gt;
                    $response = $request-&amp;gt;send()-&amp;gt;getBody();&lt;br /&gt;
                    print_r($response);&lt;br /&gt;
                    &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tickets History Reply ====&lt;br /&gt;
Same as comment: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/comment&amp;lt;/code&amp;gt; with a variable name &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
Action: correspond&lt;br /&gt;
Text: the text comment&lt;br /&gt;
Cc: &amp;lt;...&amp;gt;&lt;br /&gt;
Bcc: &amp;lt;...&amp;gt;&lt;br /&gt;
TimeWorked: &amp;lt;...&amp;gt;&lt;br /&gt;
Attachment: an attachment filename/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Cc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Bcc&amp;lt;/code&amp;gt; are for this reply only (&#039;&#039;I think&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
==== Ticket History Comment ====&lt;br /&gt;
To add a comment to an existing ticket: POST on &amp;quot;&amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/comment&amp;lt;/code&amp;gt;&amp;quot; with a variable name &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
Action: comment&lt;br /&gt;
Text: the text comment&lt;br /&gt;
Attachment: an attachment filename/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Action can be &amp;quot;&amp;lt;code&amp;gt;comment&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;correspond&amp;lt;/code&amp;gt;&amp;quot;. For a list of fields you can use in correspondence, try &amp;quot;&amp;lt;code&amp;gt;/opt/rt3/bin/rt correspond ticket/1&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If your comment contains multiple lines, each new line must be preceded by a space (e.g. &amp;quot;line 1\n line 2&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
If you want to use HTML replies, use &amp;lt;pre&amp;gt;Content-Type: text/html&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you used &amp;quot;&amp;lt;code&amp;gt;Attachment&amp;lt;/code&amp;gt;&amp;quot;, you must add to your POST a variable &amp;quot;&amp;lt;code&amp;gt;attachment_1&amp;lt;/code&amp;gt;&amp;quot; that contains the raw attachment in multi-part file object.&lt;br /&gt;
&lt;br /&gt;
You can upload more attachments as well, in this case you have to separate the file names in the &amp;quot;&amp;lt;code style=&amp;quot;border-style: initial; border-color: initial; &amp;quot;&amp;gt;Attachment&amp;lt;/code&amp;gt;&amp;quot; with &amp;quot;\n &amp;quot;(a newline and space, without quotes) and add a new variable &amp;quot;attachment_$i&amp;quot; to your POST where $i is the index of attachment.&lt;br /&gt;
&lt;br /&gt;
You need to send header to post comments&lt;br /&gt;
&lt;br /&gt;
==== Ticket Links Edit ====&lt;br /&gt;
To update links on an existing ticket: POST on &amp;quot;&amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&amp;lt;/code&amp;gt;&amp;quot; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line (like the one displayed when issuing &amp;quot;&amp;lt;code&amp;gt;ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&amp;lt;/code&amp;gt;&amp;quot;). Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DependsOn: 54354&lt;br /&gt;
RefersTo: http://some.external/link&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User Properties ===&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single user.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/user/&amp;amp;lt;user-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.4 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: user/&amp;amp;lt;user-id&amp;amp;gt;&lt;br /&gt;
 Name: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Password: ********&lt;br /&gt;
 EmailAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 RealName: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Organization: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Privileged: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Disabled: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also you can use user login instead of user ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
==== User Create ====&lt;br /&gt;
&lt;br /&gt;
To create a new user: post on &amp;lt;code&amp;gt;/REST/1.0/user/new&amp;lt;/code&amp;gt; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line, like the response to &amp;lt;code&amp;gt;/user/&amp;amp;lt;ticket-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== User Edit ====&lt;br /&gt;
To update an existing user: post on &amp;lt;code&amp;gt;/REST/1.0/user/&amp;amp;lt;user-id&amp;amp;gt;/edit&amp;lt;/code&amp;gt; with a variable named &amp;quot;content&amp;quot;, containing &amp;quot;key: value&amp;quot; line by line (like the one displayed when issuing &amp;lt;code&amp;gt;user/&amp;amp;lt;user-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Queue Properties ===&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single queue.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/queue/&amp;amp;lt;queue-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.4 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: queue/&amp;amp;lt;queue-id&amp;amp;gt;&lt;br /&gt;
 Name: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Description: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 CorrespondAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 CommentAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 InitialPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 FinalPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 DefaultDueIn: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logout ===&lt;br /&gt;
&lt;br /&gt;
To logout: post on &amp;lt;code&amp;gt;/REST/1.0/logout&amp;lt;/code&amp;gt; with empty content.&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
&lt;br /&gt;
*new&lt;br /&gt;
*open&lt;br /&gt;
*stalled&lt;br /&gt;
*resolved&lt;br /&gt;
*rejected&lt;br /&gt;
*deleted&lt;br /&gt;
+ other custom values defined in you local RT portal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== History entry type ===&lt;br /&gt;
* Create&lt;br /&gt;
* CustomField&lt;br /&gt;
* EmailRecord&lt;br /&gt;
* Status&lt;br /&gt;
* CommentEmailRecord&lt;br /&gt;
* Correspond&lt;br /&gt;
* Comment&lt;br /&gt;
* Priority&lt;br /&gt;
* Give&lt;br /&gt;
* Steal&lt;br /&gt;
* Take&lt;br /&gt;
* Untake&lt;br /&gt;
* AddWatcher&lt;br /&gt;
* DeleteWatcher&lt;br /&gt;
* AddLink&lt;br /&gt;
* DeleteLink&lt;br /&gt;
* AddReminder&lt;br /&gt;
* OpenReminder&lt;br /&gt;
* ResolveReminder&lt;br /&gt;
* Set&lt;br /&gt;
* Force&lt;br /&gt;
* Subject&lt;br /&gt;
* Told&lt;br /&gt;
* PurgeTransaction&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
=== Data format ===&lt;br /&gt;
History entries time returns in UTC, boolean returns as &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (true) and &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;(false). &lt;br /&gt;
Use only &amp;lt;code&amp;gt;&amp;quot;\n&amp;quot;&amp;lt;/code&amp;gt;, not &amp;lt;code&amp;gt;&amp;quot;\r\n&amp;quot;&amp;lt;/code&amp;gt;in post content. &lt;br /&gt;
Comments in response body starts with &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
#symbol.&lt;br /&gt;
&lt;br /&gt;
=== Request status ===&lt;br /&gt;
To get real request/post status you need to check status code in first line of server response.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
To get the results of a single request (without setting the Session-Cookie) - assuming you&#039;ve set:&lt;br /&gt;
&lt;br /&gt;
* $uri to your RT REST URL&lt;br /&gt;
* $access_user to your username&lt;br /&gt;
* $access_password to your password&lt;br /&gt;
* $ticketNumber to the ticket you want to see&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $ua = LWP::UserAgent-&amp;amp;gt;new;&lt;br /&gt;
$ua-&amp;gt;timeout(10);&lt;br /&gt;
$ua-&amp;gt;agent(&amp;quot;YOURUSERAGENTHERE&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
my $response = $ua-&amp;gt;post($uri.&amp;quot;ticket/$ticketNumber&amp;quot;,&lt;br /&gt;
   [&#039;user&#039; =&amp;gt; $access_user, &#039;pass&#039; =&amp;gt; $access_password],&lt;br /&gt;
    &#039;Content_Type&#039; =&amp;gt; &#039;form-data&#039;);&lt;br /&gt;
&lt;br /&gt;
if ($response-&amp;amp;gt;is_success) {&lt;br /&gt;
   print $response-&amp;gt;decoded_content;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import org.apache.commons.httpclient.HttpClient;&lt;br /&gt;
import org.apache.commons.httpclient.methods.PostMethod;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.Part;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.StringPart;&lt;br /&gt;
  &lt;br /&gt;
public class RtTicketCreator {&lt;br /&gt;
   static final String BASE_URI = &amp;quot;http://rt.xxx.com/REST/1.0&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   public static void main(String[] args) throws IOException {&lt;br /&gt;
 &lt;br /&gt;
      PostMethod mPost = new PostMethod(BASE_URI + &amp;quot;/ticket/new?user=username&amp;amp;amp;pass=password&amp;quot;);&lt;br /&gt;
      Part[] parts = { new StringPart(&amp;quot;content&amp;quot;, &amp;quot;Queue: General\nSubject: 123&amp;quot;) };&lt;br /&gt;
      mPost.setRequestEntity(new MultipartRequestEntity(parts, mPost.getParams()));&lt;br /&gt;
      HttpClient cl = new HttpClient();&lt;br /&gt;
      cl.executeMethod(mPost);&lt;br /&gt;
      System.out.println(mPost.getResponseBodyAsString());&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Java ( Based on new Apache HttpComponents library ) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
* RT ticket creator based on the current Apache HttpComponents library 4.1.3&lt;br /&gt;
* Created by Koustubha Kale, kmkale at youtility dot in&lt;br /&gt;
*/&lt;br /&gt;
import org.apache.http.HttpEntity;&lt;br /&gt;
import org.apache.http.HttpResponse;&lt;br /&gt;
import org.apache.http.auth.AuthScope;&lt;br /&gt;
import org.apache.http.auth.UsernamePasswordCredentials;&lt;br /&gt;
import org.apache.http.client.HttpClient;&lt;br /&gt;
import org.apache.http.client.methods.HttpPost;&lt;br /&gt;
import org.apache.http.entity.mime.MultipartEntity;&lt;br /&gt;
import org.apache.http.entity.mime.content.StringBody;&lt;br /&gt;
import org.apache.http.impl.client.DefaultHttpClient;&lt;br /&gt;
import org.apache.http.util.EntityUtils;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class NewApacheHttpcomponentsRtTicketCreator {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        &lt;br /&gt;
        DefaultHttpClient httpclient = new DefaultHttpClient();&lt;br /&gt;
	try {&lt;br /&gt;
            &lt;br /&gt;
            HttpPost httppost = new HttpPost(&amp;quot;http://rt.xxx.com/rt/REST/1.0&amp;quot; +&lt;br /&gt;
                    &amp;quot;/ticket/new?user=username&amp;amp;pass=password&amp;quot;);&lt;br /&gt;
	    StringBody content = new StringBody(&amp;quot;Queue: General\nSubject: 123&amp;quot;);&lt;br /&gt;
	    MultipartEntity reqEntity = new MultipartEntity();&lt;br /&gt;
	    reqEntity.addPart(&amp;quot;content&amp;quot;, content);&lt;br /&gt;
	    httppost.setEntity(reqEntity);&lt;br /&gt;
	    System.out.println(&amp;quot;executing request &amp;quot; + httppost.getRequestLine());&lt;br /&gt;
            HttpResponse response = httpclient.execute(httppost);&lt;br /&gt;
            HttpEntity resEntity = response.getEntity();&lt;br /&gt;
&lt;br /&gt;
            System.out.println(&amp;quot;----------------------------------------&amp;quot;);&lt;br /&gt;
            System.out.println(response.getStatusLine());&lt;br /&gt;
            if (resEntity != null) {&lt;br /&gt;
                System.out.println(&amp;quot;Response content length: &amp;quot; + resEntity.getContentLength());&lt;br /&gt;
            }&lt;br /&gt;
            EntityUtils.consume(resEntity);&lt;br /&gt;
        } finally {&lt;br /&gt;
            try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import cookielib&lt;br /&gt;
import urllib&lt;br /&gt;
import urllib2&lt;br /&gt;
       &lt;br /&gt;
# creates a cookie for the rtserver with the credentials given at initialization.&lt;br /&gt;
# define your credentials here&lt;br /&gt;
access_user = &#039;your_login&#039;&lt;br /&gt;
access_password = &#039;your_password&#039;&lt;br /&gt;
       &lt;br /&gt;
# here is the RequestTracker URI we try to access&lt;br /&gt;
uri = &#039;http://your-rt-instance.com/REST/1.0/&#039;&lt;br /&gt;
       &lt;br /&gt;
# trying login on rt server&lt;br /&gt;
cj = cookielib.LWPCookieJar()&lt;br /&gt;
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))&lt;br /&gt;
urllib2.install_opener(opener)&lt;br /&gt;
data = {&#039;user&#039;: access_user, &#039;pass&#039;: access_password}&lt;br /&gt;
ldata = urllib.urlencode(data)&lt;br /&gt;
login = urllib2.Request(uri, ldata)&lt;br /&gt;
try:&lt;br /&gt;
   response = urllib2.urlopen(login)&lt;br /&gt;
   print response.read()&lt;br /&gt;
   print &amp;quot;login successful&amp;quot;&lt;br /&gt;
except urllib2.URLError:&lt;br /&gt;
   # could not connect to server&lt;br /&gt;
   print &amp;quot;Not able to login&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env ruby&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
user = &#039;username&#039;&lt;br /&gt;
pass = &#039;password&#039;&lt;br /&gt;
uri = URI(&#039;https://rt.example.com/REST/1.0/ticket/123/show&#039;)&lt;br /&gt;
&lt;br /&gt;
req = Net::HTTP::Post.new(uri.path)&lt;br /&gt;
req.set_form_data(&#039;user&#039; =&amp;gt; user, &#039;pass&#039; =&amp;gt; pass)&lt;br /&gt;
&lt;br /&gt;
res = Net::HTTP.start(uri.hostname, uri.port, &lt;br /&gt;
  :use_ssl =&amp;gt; uri.scheme == &#039;https&#039;, &lt;br /&gt;
  :set_debug_output =&amp;gt; $stderr) do |http|&lt;br /&gt;
  http.request(req)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
case res&lt;br /&gt;
when Net::HTTPSuccess, Net::HTTPRedirection&lt;br /&gt;
  # OK&lt;br /&gt;
  puts &amp;quot;HTTP response code:  #{res.code}&amp;quot;&lt;br /&gt;
  puts &amp;quot;HTTP message: #{res.message}&amp;quot;&lt;br /&gt;
  puts &amp;quot;Response:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  res.each do |key,val|&lt;br /&gt;
    puts &amp;quot;#{key} =&amp;gt; #{val}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  puts &amp;quot;Data:&amp;quot;&lt;br /&gt;
  puts res.body&lt;br /&gt;
else&lt;br /&gt;
  res.value&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$username = rt_user;&lt;br /&gt;
$password = rt_pass;&lt;br /&gt;
$url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/&amp;lt;ticket id&amp;gt;/show?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
$request = new HttpRequest($url, HTTP_METH_GET);&lt;br /&gt;
/* if you want&#039;s to pass additional parameters */&lt;br /&gt;
$request-&amp;gt;addQueryData(array());&lt;br /&gt;
$response = $request-&amp;gt;send();&lt;br /&gt;
print_r($response);&lt;br /&gt;
&amp;lt;/pre&amp;gt; OR&amp;lt;pre&amp;gt;&lt;br /&gt;
$username = rt_user;&lt;br /&gt;
$password = rt_pass;&lt;br /&gt;
$url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/new?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
$request = new HttpRequest($url, HTTP_METH_POST);&lt;br /&gt;
// Note : to add data in custom fields you need to add element like below example&lt;br /&gt;
// in $post_data array&lt;br /&gt;
// Example : \nCF-customfield1:testdata&lt;br /&gt;
$post_data=array(&amp;quot;content&amp;quot;=&amp;gt;&amp;quot;Queue: General\nRequestor: user@domain\nSubject: REST test 1\nOwner: userX\nAdminCc: userX\nText: This is a REST test\n&amp;quot;);&lt;br /&gt;
$request-&amp;gt;addPostFields($post_data);&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
response = $request-&amp;gt;send()-&amp;gt;getBody();&lt;br /&gt;
print_r($response);&lt;br /&gt;
}catch (HttpException $ex) {&lt;br /&gt;
echo $ex;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== C# ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Using &amp;quot;WCF REST Starter Kit&amp;quot; (http://msdn.microsoft.com/en-us/netframework/cc950529.aspx)&lt;br /&gt;
using (var client = new HttpClient(&amp;quot;http://rt.site.com/REST/1.0/&amp;quot;))&lt;br /&gt;
{&lt;br /&gt;
   client.TransportSettings.Cookies = new CookieContainer();&lt;br /&gt;
&lt;br /&gt;
   var form = new HttpUrlEncodedForm();&lt;br /&gt;
   form.Add(&amp;quot;user&amp;quot;, &amp;quot;LOGIN&amp;quot;);&lt;br /&gt;
   form.Add(&amp;quot;pass&amp;quot;, &amp;quot;PASSWORD&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   client.Post(string.Empty, form.CreateHttpContent());&lt;br /&gt;
&lt;br /&gt;
   // 1. Get ticket data&lt;br /&gt;
   using (var request = client.Get(&amp;quot;ticket/1234/show&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
      string content = request.Content.ReadAsString();&lt;br /&gt;
      // Some logic&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // 2. Post ticket reply with attachment&lt;br /&gt;
   var formPost = new HttpMultipartMimeForm();&lt;br /&gt;
   byte[] attachment = new byte[];&lt;br /&gt;
   string content = string.Empty;&lt;br /&gt;
         &lt;br /&gt;
   // Store data in attachment&lt;br /&gt;
   // Store data in content string (&amp;quot;Field: Value&amp;quot; line by line)&lt;br /&gt;
   // ...&lt;br /&gt;
         &lt;br /&gt;
   formPost.Add(&amp;quot;content&amp;quot;, content);&lt;br /&gt;
   formPost.Add(&amp;quot;attachment_1&amp;quot;, &amp;quot;attachment_1&amp;quot;, HttpContent.Create(attachment, &amp;quot;application/octet-stream&amp;quot;));&lt;br /&gt;
                             &lt;br /&gt;
   using (var post = client.Post(&amp;quot;ticket/1234/comment&amp;quot;), formPost.CreateHttpContent()))&lt;br /&gt;
      // Some logic&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Powershell (v3)===&lt;br /&gt;
* Escape Powershell reserved chars in user/pass&lt;br /&gt;
* If connecting via SSL, use fqdn of server, not cname&lt;br /&gt;
*Use `n (newline) when composing new ticket structure&lt;br /&gt;
Read RT queue based on query: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$servername=&amp;quot;Your Servername here&amp;quot;&lt;br /&gt;
$u=&amp;quot;user=Username&amp;quot;&lt;br /&gt;
$p=&amp;quot;pass=Password&amp;quot;&lt;br /&gt;
$q=&amp;quot;search/ticket?query=(Status=&#039;open&#039; OR Status=&#039;new&#039;) AND (Queue=&#039;GENERAL&#039; OR Queue=&#039;FOO&#039;) AND Owner=&#039;Nobody&#039;&amp;quot;&lt;br /&gt;
$uri=&amp;quot;https://&amp;quot; + $servername + &amp;quot;/rt/REST/1.0/&amp;quot; + $q + &amp;quot;&amp;amp;&amp;quot; + $u + &amp;quot;&amp;amp;&amp;quot; + $p&lt;br /&gt;
$RT=Invoke-WebRequest -Uri  $uri -SessionVariable sess&lt;br /&gt;
$rt.Content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===VB.NET===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Public Sub AddAttachmentToRT(ByVal url As String, ByVal fileName As String, ByVal filePath As String)&lt;br /&gt;
&lt;br /&gt;
        Dim dataBoundary As String = &amp;quot;--xYzZY&amp;quot;&lt;br /&gt;
        Dim request As HttpWebRequest&lt;br /&gt;
        Dim fileType As String = &amp;quot;image/jpeg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        &#039;Create a POST web request to the REST interface using the passed URL&lt;br /&gt;
        request = CType(WebRequest.Create(url), HttpWebRequest)&lt;br /&gt;
        request.ContentType = &amp;quot;multipart/form-data; boundary=xYzZY&amp;quot;&lt;br /&gt;
        request.Method = &amp;quot;POST&amp;quot;&lt;br /&gt;
        request.KeepAlive = True&lt;br /&gt;
&lt;br /&gt;
        &#039;Write the request to the requestStream&lt;br /&gt;
        Using requestStream As IO.Stream = request.GetRequestStream()&lt;br /&gt;
&lt;br /&gt;
            &#039;Create a variable &amp;quot;attachment_1&amp;quot; in the POST, specify the file name and file type&lt;br /&gt;
            Dim preAttachment As String = dataBoundary + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Disposition: form-data; name=&amp;quot;&amp;quot;attachment_1&amp;quot;&amp;quot;; filename=&amp;quot;&amp;quot;&amp;quot; + fileName + &amp;quot;&amp;quot;&amp;quot;&amp;quot; + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Type: &amp;quot; + fileType + vbCrLf _&lt;br /&gt;
            + vbCrLf&lt;br /&gt;
&lt;br /&gt;
            &#039;Convert this preAttachment string to bytes&lt;br /&gt;
            Dim preAttachmentBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(preAttachment)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write this preAttachment string to the stream&lt;br /&gt;
            requestStream.Write(preAttachmentBytes, 0, preAttachmentBytes.Length)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write the file as bytes to the stream by passing its exact location&lt;br /&gt;
            Using fileStream As New IO.FileStream(Server.MapPath(filePath + fileName), IO.FileMode.Open, IO.FileAccess.Read)&lt;br /&gt;
&lt;br /&gt;
                Dim buffer(4096) As Byte&lt;br /&gt;
                Dim bytesRead As Int32 = fileStream.Read(buffer, 0, buffer.Length)&lt;br /&gt;
&lt;br /&gt;
                Do While (bytesRead &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
                    requestStream.Write(buffer, 0, bytesRead)&lt;br /&gt;
                    bytesRead = fileStream.Read(buffer, 0, buffer.Length)&lt;br /&gt;
&lt;br /&gt;
                Loop&lt;br /&gt;
&lt;br /&gt;
            End Using&lt;br /&gt;
&lt;br /&gt;
            &#039;Create a variable named content in the POST, specify the attachment name and comment text&lt;br /&gt;
            Dim postAttachment As String = vbCrLf _&lt;br /&gt;
            + dataBoundary + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Disposition: form-data; name=&amp;quot;&amp;quot;content&amp;quot;&amp;quot;&amp;quot; + vbCrLf _&lt;br /&gt;
            + vbCrLf _&lt;br /&gt;
            + &amp;quot;Action: comment&amp;quot; + vbLf _&lt;br /&gt;
            + &amp;quot;Attachment: &amp;quot; + fileName + vbCrLf _&lt;br /&gt;
            + &amp;quot;Text: Whatever You Want&amp;quot; + vbCrLf _&lt;br /&gt;
            + vbCrLf _&lt;br /&gt;
            + &amp;quot;--xYzZY--&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            &#039;Convert postAttachment string to bytes&lt;br /&gt;
            Dim postAttachmentBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(postAttachment)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write the postAttachment string to the stream&lt;br /&gt;
            requestStream.Write(postAttachmentBytes, 0, postAttachmentBytes.Length)&lt;br /&gt;
&lt;br /&gt;
        End Using&lt;br /&gt;
&lt;br /&gt;
        Dim response As Net.WebResponse = Nothing&lt;br /&gt;
&lt;br /&gt;
        &#039;Get the response from our REST request to RT&lt;br /&gt;
        &#039;Required to capture response, without this Try-Catch attaching will fail&lt;br /&gt;
        Try&lt;br /&gt;
            response = request.GetResponse()&lt;br /&gt;
&lt;br /&gt;
            Using responseStream As IO.Stream = response.GetResponseStream()&lt;br /&gt;
&lt;br /&gt;
                Using responseReader As New IO.StreamReader(responseStream)&lt;br /&gt;
&lt;br /&gt;
                    Dim responseText = responseReader.ReadToEnd()&lt;br /&gt;
&lt;br /&gt;
                End Using&lt;br /&gt;
&lt;br /&gt;
            End Using&lt;br /&gt;
&lt;br /&gt;
        Catch exception As Net.WebException&lt;br /&gt;
&lt;br /&gt;
            response = exception.Response&lt;br /&gt;
&lt;br /&gt;
            If (response IsNot Nothing) Then&lt;br /&gt;
&lt;br /&gt;
                Using reader As New IO.StreamReader(response.GetResponseStream())&lt;br /&gt;
&lt;br /&gt;
                    Dim responseText = reader.ReadToEnd()&lt;br /&gt;
&lt;br /&gt;
                End Using&lt;br /&gt;
&lt;br /&gt;
                response.Close()&lt;br /&gt;
&lt;br /&gt;
            End If&lt;br /&gt;
&lt;br /&gt;
        Finally&lt;br /&gt;
&lt;br /&gt;
            request = Nothing&lt;br /&gt;
&lt;br /&gt;
        End Try&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===JavaScript===&lt;br /&gt;
This is an example of updating the RefersTo field for a ticket. Assuming Zepto/jQuery is also being used.&lt;br /&gt;
 function link_back(url, ticket_num, rt) {&lt;br /&gt;
     var data, link;&lt;br /&gt;
     link = &amp;quot;refersto: &amp;quot; + url;&lt;br /&gt;
     data = {&amp;quot;content&amp;quot;: link};&lt;br /&gt;
 &lt;br /&gt;
     $.ajax({&lt;br /&gt;
         type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
         url: rt + ticket_num + &amp;quot;/links&amp;quot;,&lt;br /&gt;
         data: data,&lt;br /&gt;
         success: function (reply) {&lt;br /&gt;
             console.log(reply);&lt;br /&gt;
         }&lt;br /&gt;
     });&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 var url = &amp;quot;https://www.wikipedia.org/&amp;quot;;&lt;br /&gt;
 var ticket_num = &amp;quot;123456&amp;quot;;&lt;br /&gt;
 var rt = &amp;quot;https://some.rt.url/REST/1.0/ticket/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 link_back(url, ticket_num, rt);&lt;br /&gt;
&lt;br /&gt;
== Convenience libraries ==&lt;br /&gt;
&lt;br /&gt;
There are libraries which do much of the low-level work shown in the examples below for you, and provide an easier programming interface for dealing with RT:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Language&lt;br /&gt;
!Package/Module&lt;br /&gt;
!Source&lt;br /&gt;
!Example&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Perl&#039;&#039;&#039;&lt;br /&gt;
|[http://metacpan.org/module/RT::Client::REST RT::Client::REST]&lt;br /&gt;
|[http://rt-client-rest.googlecode.com/svn/trunk/ Google Code]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;perl -MCPAN -e install RT::Client::REST&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ruby&#039;&#039;&#039;&lt;br /&gt;
|[http://rubygems.org/gems/rt-client rt-client]&lt;br /&gt;
|[https://github.com/uidzip/rt-client GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;gem install rt-client&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ruby&#039;&#039;&#039;&lt;br /&gt;
|[http://rubygems.org/gems/roart Roart]&lt;br /&gt;
|[https://github.com/pjdavis/roart GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;gem install roart&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Python&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/z4r/python-rtkit rtkit]&lt;br /&gt;
|[https://github.com/z4r/python-rtkit GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;pip install python-rtkit&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Python&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/CZ-NIC/python-rt python-rt]&lt;br /&gt;
|[https://github.com/CZ-NIC/python-rt Github]&lt;br /&gt;
|&amp;lt;code&amp;gt;pip install rt&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Java&#039;&#039;&#039;&lt;br /&gt;
|[http://projects.boksa.de/RT-REST/ RT-REST]&lt;br /&gt;
|[https://github.com/bboksa/RT-REST GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;N/A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PHP&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/dersam/RTPHPLib RTPHPLib]&lt;br /&gt;
|[https://github.com/dersam/RTPHPLib GitHub]&lt;br /&gt;
|composer require dersam/rt-php-lib&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Uidzip</name></author>
	</entry>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=REST&amp;diff=26519</id>
		<title>REST</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=REST&amp;diff=26519"/>
		<updated>2017-09-07T08:01:34Z</updated>

		<summary type="html">&lt;p&gt;Uidzip: reverse module/source links for rt-client&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
The REST Interface gives you access to your RT Database. The complete communication is encapsulated in the HTTP protocol. The interface should be accessible in your installation.&lt;br /&gt;
&lt;br /&gt;
Though you may see references to older 3.x releases of RT below, Best Practice indicates that the REST stuff has not changed in any significant way in 4.x as of, at least, 1/2012.&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/index.php?search={{TALKPAGENAME}}&amp;amp;title=Special:Search Legacy Comments] are available from the previous Wikia instance.&lt;br /&gt;
&lt;br /&gt;
== Interface ==&lt;br /&gt;
&lt;br /&gt;
Base URL: &amp;lt;code&amp;gt;.../REST/1.0/&amp;lt;/code&amp;gt;. The default response should be:&lt;br /&gt;
&lt;br /&gt;
    RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
    # Invalid object specification: &#039;index.html&#039;&lt;br /&gt;
&lt;br /&gt;
    id: index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
The REST Interface does not support HTTP-Authentication. So you must get a valid Session-Token and submit the cookie each request. You usually get a Session-Cookie by submitting the default login form. Use variables &amp;quot;&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;&amp;quot; for login and &amp;quot;&amp;lt;code&amp;gt;pass&amp;lt;/code&amp;gt;&amp;quot; for password values. wget doesn&#039;t escape any characters in the --post-data option so make sure you properly escape any special characters in the password.&lt;br /&gt;
&lt;br /&gt;
See the wget invocation line below:&lt;br /&gt;
&lt;br /&gt;
    wget  --keep-session-cookies \&lt;br /&gt;
    --save-cookies cookies.txt \&lt;br /&gt;
    --post-data &#039;user=UUUU&amp;amp;pass=PPPP&#039; \&lt;br /&gt;
    http://my.rt.server&lt;br /&gt;
&lt;br /&gt;
You need the -keep-session-cookies option to make wget save session cookies.&lt;br /&gt;
&lt;br /&gt;
=== Ticket ===&lt;br /&gt;
&lt;br /&gt;
==== Ticket Properties ====&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single ticket, not including the history and comments.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.4.5 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;&lt;br /&gt;
 Queue: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Owner: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Creator: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Subject: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Status: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Priority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 InitialPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 FinalPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Requestors: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Cc: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 AdminCc: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Created: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Starts: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Started: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Due: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Resolved: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Told: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeEstimated: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeWorked: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeLeft: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Links ====&lt;br /&gt;
&lt;br /&gt;
Gets the ticket links for a single ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links/show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.2 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&lt;br /&gt;
 HasMember: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 ReferredToBy: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 DependedOnBy: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 MemberOf: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 RefersTo: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 DependsOn: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachments ====&lt;br /&gt;
&lt;br /&gt;
Gets a list of all attachments related to the ticket&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachment ====&lt;br /&gt;
Gets the metadata and content of a specific attachment.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments/&amp;amp;lt;attachment-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.8.0 200 Ok&lt;br /&gt;
 &lt;br /&gt;
id: &amp;lt;attachment-id&amp;gt;&lt;br /&gt;
Subject:&lt;br /&gt;
Creator: &amp;lt;user-id&amp;gt;&lt;br /&gt;
Created: &amp;lt;timestamp&amp;gt;&lt;br /&gt;
Transaction: &amp;lt;transaction-id&amp;gt;&lt;br /&gt;
Parent: &amp;lt;parent-id&amp;gt;&lt;br /&gt;
MessageId:&lt;br /&gt;
Filename: &amp;lt;filename&amp;gt;&lt;br /&gt;
ContentType: application/octet-stream&lt;br /&gt;
ContentEncoding: none&lt;br /&gt;
 &lt;br /&gt;
Headers: MIME-Version: 1.0&lt;br /&gt;
         X-Mailer: MIME-tools 5.427 (Entity 5.427)&lt;br /&gt;
         Content-Type: application/octet-stream;&lt;br /&gt;
           name=&amp;quot;&amp;lt;filename&amp;gt;&amp;quot;&lt;br /&gt;
         Content-Disposition: inline; filename=&amp;quot;&amp;lt;filename&amp;gt;&amp;quot;&lt;br /&gt;
         Content-Transfer-Encoding: base64&lt;br /&gt;
         Content-Length: &amp;lt;length in bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content: ...&lt;br /&gt;
         ...&lt;br /&gt;
         ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: RT returns the content indented with 9 spaces on each line, so that it lines up with the &amp;quot;Content:&amp;quot; header. Even if you strip this out with a regexp, the content is still UTF-8, which is probably not what you want. To get the original binary data back, strip out the 9 spaces with a regexp, strip off the 3 carriage returns at the end, and then convert the whole thing from UTF-8 to the native character encoding of the attachment, whatever that is. RT doesn&#039;t tell you, so you have know. If the attachments were uploaded by a U.S. Windows system, odds are that Windows-1252 is what you want. If you can&#039;t get the binary back intact, see the next method below.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachment Content ====&lt;br /&gt;
&lt;br /&gt;
Gets the attachment data content without additional metadata or whitespace characters&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments/&amp;amp;lt;attachment-id&amp;amp;gt;/content&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.0 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
So to get the original content you still have to strip the first 2 lines of the response.&lt;br /&gt;
&lt;br /&gt;
==== Ticket History ====&lt;br /&gt;
Gets a list of all the history items for a given ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;history-count&amp;gt;/&amp;lt;history-count&amp;gt; (/total)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;history-id&amp;gt;: &amp;lt;history-name&amp;gt;&lt;br /&gt;
&amp;lt;history-id&amp;gt;: &amp;lt;history-name&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will get an additional row, for each history entry found. The first entry is usually: &amp;quot;&amp;lt;code&amp;gt;Ticket created by ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are two ways to get history item detail: you can do one of these and then recursively perform &amp;lt;code&amp;gt;ticket/history/id/&amp;amp;lt;history-id&amp;amp;gt;&amp;lt;/code&amp;gt; for each history-id from this REST call, but that is extremely wasteful and will scale horribly. What you really want to do is one REST call but get the long format:&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history?format=l&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.8.2 200 Ok&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;n&amp;gt;/&amp;lt;n&amp;gt; (id/&amp;amp;lt;history-id&amp;amp;gt;/total)&lt;br /&gt;
&lt;br /&gt;
id: &amp;lt;history-id&amp;gt;&lt;br /&gt;
Ticket: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
TimeTaken: &amp;lt;...&amp;gt;&lt;br /&gt;
Type: &amp;lt;...&amp;gt;&lt;br /&gt;
Field: &amp;lt;...&amp;gt;&lt;br /&gt;
OldValue: &amp;lt;...&amp;gt;&lt;br /&gt;
NewValue: &amp;lt;...&amp;gt;&lt;br /&gt;
Data: &amp;lt;...&amp;gt;&lt;br /&gt;
Description: &amp;lt;...&amp;gt;&lt;br /&gt;
Content: &amp;lt;...&amp;gt;&lt;br /&gt;
Creator: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Created: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attachments:&lt;br /&gt;
             &amp;lt;attachment-id&amp;gt;: &amp;lt;filename&amp;gt; (&amp;lt;size&amp;gt;)&lt;br /&gt;
             &amp;lt;attachment-id&amp;gt;: &amp;lt;filename&amp;gt; (&amp;lt;size&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;n&amp;gt;/&amp;lt;n&amp;gt; (id/&amp;amp;lt;history-id&amp;amp;gt;/total)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: the double dash &amp;quot;--&amp;quot; will occur in the long format between each history item. You can split the output on &amp;quot;--&amp;quot; and iterate over it, parsing out the data with an RFC822 parser, such as an email handling library.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Ticket History Entry ====&lt;br /&gt;
Gets the history information for a single history item. Note that the history item must actually correspond to the ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history/id/&amp;amp;lt;history-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
# 70/70 (id/114856/total)&lt;br /&gt;
&lt;br /&gt;
id: &amp;lt;history-id&amp;gt;&lt;br /&gt;
Ticket: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
TimeTaken: &amp;lt;...&amp;gt;&lt;br /&gt;
Type: &amp;lt;...&amp;gt;&lt;br /&gt;
Field: &amp;lt;...&amp;gt;&lt;br /&gt;
OldValue: &amp;lt;...&amp;gt;&lt;br /&gt;
NewValue: &amp;lt;...&amp;gt;&lt;br /&gt;
Data: &amp;lt;...&amp;gt;&lt;br /&gt;
Description: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content: &amp;lt;lin1-0&amp;gt;&lt;br /&gt;
         &amp;lt;line-1&amp;gt;&lt;br /&gt;
         ...&lt;br /&gt;
         &amp;lt;line-n&amp;gt;&lt;br /&gt;
         &lt;br /&gt;
Creator: &amp;lt;...&amp;gt;&lt;br /&gt;
Created: &amp;lt;...&amp;gt;&lt;br /&gt;
Attachments: &amp;lt;...&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;IMPORTANT NOTE: At least with RT 3.8.0, when you request a history item with this method AND you have attached a file that has Mime type text/plain to the same item (eg. a comment with an attachement), RT will return the complete content of the attachment for the key &amp;quot;Content:&amp;quot; and not your real comment that you can see in the web frontend. This may lead to some problems if the requestor does not expect to get a comment content that is for example 1.8 MB of text. With other Mime type attachments this however seems to work. I don&#039;t know if this is a feature or a bug.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Ticket Search&#039;&#039;&#039; ====&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=&amp;amp;lt;query&amp;amp;gt;&amp;amp;orderby=&amp;amp;lt;sort-order&amp;amp;gt;&amp;amp;format=&amp;amp;lt;format&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;query&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can use any query generated by the query builder - or feel free to write your own. Here an example that will do the following: Find all tickets that have no owner and the status new or open&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;query= Owner = &#039;Nobody&#039; AND ( Status = &#039;new&#039; OR Status = &#039;open&#039; )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: to get all the tickets in &amp;quot;fooQueue&amp;quot; you&#039;d access:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: to get the tickets for a custom field &amp;quot;Contact Name&amp;quot; you&#039;d access:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=&#039;CF.{Contact Name}&#039;=&#039;Shaun Wallace&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;orderby&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By this parameter you can change the sort field and order of the search result. To sort a list ascending just put a + before the fieldname, otherwise a -. Eg: -Created (will put the newest tickets at the beginning).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;amp;orderby=+Created&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;format&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* i: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;&lt;br /&gt;
* s: &amp;amp;lt;ticket-id&amp;amp;gt;: &amp;amp;lt;ticket-subject&amp;amp;gt;&lt;br /&gt;
* l: a multi-line format&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;amp;orderby=+Created&amp;amp;format=i&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fields&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A list of fields you would like included in the result set.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=id=42&amp;amp;format=l&amp;amp;fields=Subject,Status,Priority,CF.\{Category\}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you may need to escape characters like the curly braces for CFs.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Ticket Create&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
To create a new ticket: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/new&amp;lt;/code&amp;gt; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line, example:&lt;br /&gt;
&lt;br /&gt;
Testing the new ticket section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: ticket/new&lt;br /&gt;
Queue: &amp;lt;queue name&amp;gt;&lt;br /&gt;
Requestor: &amp;lt;requestor email address&amp;gt;&lt;br /&gt;
Subject: &amp;lt;subject&amp;gt;&lt;br /&gt;
Cc: &amp;lt;...&amp;gt;&lt;br /&gt;
AdminCc: &amp;lt;...&amp;gt;&lt;br /&gt;
Owner: &amp;lt;...&amp;gt;&lt;br /&gt;
Status: &amp;lt;...&amp;gt;&lt;br /&gt;
Priority: &amp;lt;...&amp;gt;&lt;br /&gt;
InitialPriority: &amp;lt;...&amp;gt;&lt;br /&gt;
FinalPriority: &amp;lt;...&amp;gt;&lt;br /&gt;
TimeEstimated: &amp;lt;...&amp;gt;&lt;br /&gt;
Starts: &amp;lt;...&amp;gt;&lt;br /&gt;
Due: &amp;lt;...&amp;gt;&lt;br /&gt;
Text: &amp;lt;The ticket content&amp;gt;&lt;br /&gt;
CF-&amp;lt;CustomFieldName&amp;gt;: &amp;lt;CustomFieldValue&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there are any &amp;quot;special&amp;quot; characters (Umlauts, dash, ...?) in a custom field&#039;s name, you can still access it via its ID:&lt;br /&gt;
 CF-$id: &amp;lt;Value&amp;gt;&lt;br /&gt;
If you want to have a multiline Text, prefix every line with a blank.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Due: &amp;lt;...&amp;gt;&lt;br /&gt;
Text: This is &lt;br /&gt;
 a &lt;br /&gt;
 multiline Text&lt;br /&gt;
 !!!&lt;br /&gt;
CF-&amp;lt;CustomFieldName&amp;gt;: &amp;lt;CustomFieldValue&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The response should look like: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/4.0.6 200 Ok&lt;br /&gt;
&lt;br /&gt;
# Ticket 775 created.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== curl example =====&lt;br /&gt;
    &lt;br /&gt;
  * Create a file containing the ticket form:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: ticket/new&lt;br /&gt;
Queue: queue1&lt;br /&gt;
Requestor: requestor@email&lt;br /&gt;
Priority: 4&lt;br /&gt;
CF-Type of request: Demande&lt;br /&gt;
Subject: Test REST&lt;br /&gt;
Text: Multi line&lt;br /&gt;
 test with&lt;br /&gt;
 special chars: é&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  * Submit using curl:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl --data-urlencode content@file.name &#039;https://HOSTNAME/REST/1.0/ticket/new?user=USER&amp;amp;pass=PASSWORD&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Ticket Edit ====&lt;br /&gt;
To update an existing ticket: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/edit&amp;lt;/code&amp;gt; with a variable named &amp;quot;content&amp;quot;, containing &amp;quot;key: value&amp;quot; line by line (like the one displayed when issuing &amp;lt;code&amp;gt;ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;). Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Priority: 5&lt;br /&gt;
TimeWorked: 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*PHP&lt;br /&gt;
   &amp;lt;pre&amp;gt; &lt;br /&gt;
                    $username = rt_user;&lt;br /&gt;
                    $password = rt_pass;&lt;br /&gt;
                    $url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/&amp;lt;ticket id&amp;gt;/edit?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
                    $request = new HttpRequest($url, HTTP_METH_POST);&lt;br /&gt;
                    $post_data=array(&amp;quot;content&amp;quot;=&amp;gt;&amp;quot;AdminCc: userX\nText: This is a REST test edit ticket\n&amp;quot;);&lt;br /&gt;
                    &lt;br /&gt;
                    // add the post fields  &lt;br /&gt;
                    $request-&amp;gt;addPostFields($postData);&lt;br /&gt;
                    // response from RT&lt;br /&gt;
                    $response = $request-&amp;gt;send()-&amp;gt;getBody();&lt;br /&gt;
                    print_r($response);&lt;br /&gt;
                    &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tickets History Reply ====&lt;br /&gt;
Same as comment: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/comment&amp;lt;/code&amp;gt; with a variable name &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
Action: correspond&lt;br /&gt;
Text: the text comment&lt;br /&gt;
Cc: &amp;lt;...&amp;gt;&lt;br /&gt;
Bcc: &amp;lt;...&amp;gt;&lt;br /&gt;
TimeWorked: &amp;lt;...&amp;gt;&lt;br /&gt;
Attachment: an attachment filename/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Cc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Bcc&amp;lt;/code&amp;gt; are for this reply only (&#039;&#039;I think&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
==== Ticket History Comment ====&lt;br /&gt;
To add a comment to an existing ticket: POST on &amp;quot;&amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/comment&amp;lt;/code&amp;gt;&amp;quot; with a variable name &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
Action: comment&lt;br /&gt;
Text: the text comment&lt;br /&gt;
Attachment: an attachment filename/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Action can be &amp;quot;&amp;lt;code&amp;gt;comment&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;correspond&amp;lt;/code&amp;gt;&amp;quot;. For a list of fields you can use in correspondence, try &amp;quot;&amp;lt;code&amp;gt;/opt/rt3/bin/rt correspond ticket/1&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If your comment contains multiple lines, each new line must be preceded by a space (e.g. &amp;quot;line 1\n line 2&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
If you want to use HTML replies, use &amp;lt;pre&amp;gt;Content-Type: text/html&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you used &amp;quot;&amp;lt;code&amp;gt;Attachment&amp;lt;/code&amp;gt;&amp;quot;, you must add to your POST a variable &amp;quot;&amp;lt;code&amp;gt;attachment_1&amp;lt;/code&amp;gt;&amp;quot; that contains the raw attachment in multi-part file object.&lt;br /&gt;
&lt;br /&gt;
You can upload more attachments as well, in this case you have to separate the file names in the &amp;quot;&amp;lt;code style=&amp;quot;border-style: initial; border-color: initial; &amp;quot;&amp;gt;Attachment&amp;lt;/code&amp;gt;&amp;quot; with &amp;quot;\n &amp;quot;(a newline and space, without quotes) and add a new variable &amp;quot;attachment_$i&amp;quot; to your POST where $i is the index of attachment.&lt;br /&gt;
&lt;br /&gt;
You need to send header to post comments&lt;br /&gt;
&lt;br /&gt;
==== Ticket Links Edit ====&lt;br /&gt;
To update links on an existing ticket: POST on &amp;quot;&amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&amp;lt;/code&amp;gt;&amp;quot; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line (like the one displayed when issuing &amp;quot;&amp;lt;code&amp;gt;ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&amp;lt;/code&amp;gt;&amp;quot;). Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DependsOn: 54354&lt;br /&gt;
RefersTo: http://some.external/link&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User Properties ===&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single user.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/user/&amp;amp;lt;user-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.4 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: user/&amp;amp;lt;user-id&amp;amp;gt;&lt;br /&gt;
 Name: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Password: ********&lt;br /&gt;
 EmailAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 RealName: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Organization: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Privileged: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Disabled: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also you can use user login instead of user ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
==== User Create ====&lt;br /&gt;
&lt;br /&gt;
To create a new user: post on &amp;lt;code&amp;gt;/REST/1.0/user/new&amp;lt;/code&amp;gt; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line, like the response to &amp;lt;code&amp;gt;/user/&amp;amp;lt;ticket-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== User Edit ====&lt;br /&gt;
To update an existing user: post on &amp;lt;code&amp;gt;/REST/1.0/user/&amp;amp;lt;user-id&amp;amp;gt;/edit&amp;lt;/code&amp;gt; with a variable named &amp;quot;content&amp;quot;, containing &amp;quot;key: value&amp;quot; line by line (like the one displayed when issuing &amp;lt;code&amp;gt;user/&amp;amp;lt;user-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Queue Properties ===&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single queue.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/queue/&amp;amp;lt;queue-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.4 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: queue/&amp;amp;lt;queue-id&amp;amp;gt;&lt;br /&gt;
 Name: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Description: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 CorrespondAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 CommentAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 InitialPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 FinalPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 DefaultDueIn: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logout ===&lt;br /&gt;
&lt;br /&gt;
To logout: post on &amp;lt;code&amp;gt;/REST/1.0/logout&amp;lt;/code&amp;gt; with empty content.&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
&lt;br /&gt;
*new&lt;br /&gt;
*open&lt;br /&gt;
*stalled&lt;br /&gt;
*resolved&lt;br /&gt;
*rejected&lt;br /&gt;
*deleted&lt;br /&gt;
+ other custom values defined in you local RT portal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== History entry type ===&lt;br /&gt;
* Create&lt;br /&gt;
* CustomField&lt;br /&gt;
* EmailRecord&lt;br /&gt;
* Status&lt;br /&gt;
* CommentEmailRecord&lt;br /&gt;
* Correspond&lt;br /&gt;
* Comment&lt;br /&gt;
* Priority&lt;br /&gt;
* Give&lt;br /&gt;
* Steal&lt;br /&gt;
* Take&lt;br /&gt;
* Untake&lt;br /&gt;
* AddWatcher&lt;br /&gt;
* DeleteWatcher&lt;br /&gt;
* AddLink&lt;br /&gt;
* DeleteLink&lt;br /&gt;
* AddReminder&lt;br /&gt;
* OpenReminder&lt;br /&gt;
* ResolveReminder&lt;br /&gt;
* Set&lt;br /&gt;
* Force&lt;br /&gt;
* Subject&lt;br /&gt;
* Told&lt;br /&gt;
* PurgeTransaction&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
=== Data format ===&lt;br /&gt;
History entries time returns in UTC, boolean returns as &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (true) and &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;(false). &lt;br /&gt;
Use only &amp;lt;code&amp;gt;&amp;quot;\n&amp;quot;&amp;lt;/code&amp;gt;, not &amp;lt;code&amp;gt;&amp;quot;\r\n&amp;quot;&amp;lt;/code&amp;gt;in post content. &lt;br /&gt;
Comments in response body starts with &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
#symbol.&lt;br /&gt;
&lt;br /&gt;
=== Request status ===&lt;br /&gt;
To get real request/post status you need to check status code in first line of server response.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
To get the results of a single request (without setting the Session-Cookie) - assuming you&#039;ve set:&lt;br /&gt;
&lt;br /&gt;
* $uri to your RT REST URL&lt;br /&gt;
* $access_user to your username&lt;br /&gt;
* $access_password to your password&lt;br /&gt;
* $ticketNumber to the ticket you want to see&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $ua = LWP::UserAgent-&amp;amp;gt;new;&lt;br /&gt;
$ua-&amp;gt;timeout(10);&lt;br /&gt;
$ua-&amp;gt;agent(&amp;quot;YOURUSERAGENTHERE&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
my $response = $ua-&amp;gt;post($uri.&amp;quot;ticket/$ticketNumber&amp;quot;,&lt;br /&gt;
   [&#039;user&#039; =&amp;gt; $access_user, &#039;pass&#039; =&amp;gt; $access_password],&lt;br /&gt;
    &#039;Content_Type&#039; =&amp;gt; &#039;form-data&#039;);&lt;br /&gt;
&lt;br /&gt;
if ($response-&amp;amp;gt;is_success) {&lt;br /&gt;
   print $response-&amp;gt;decoded_content;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import org.apache.commons.httpclient.HttpClient;&lt;br /&gt;
import org.apache.commons.httpclient.methods.PostMethod;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.Part;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.StringPart;&lt;br /&gt;
  &lt;br /&gt;
public class RtTicketCreator {&lt;br /&gt;
   static final String BASE_URI = &amp;quot;http://rt.xxx.com/REST/1.0&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   public static void main(String[] args) throws IOException {&lt;br /&gt;
 &lt;br /&gt;
      PostMethod mPost = new PostMethod(BASE_URI + &amp;quot;/ticket/new?user=username&amp;amp;amp;pass=password&amp;quot;);&lt;br /&gt;
      Part[] parts = { new StringPart(&amp;quot;content&amp;quot;, &amp;quot;Queue: General\nSubject: 123&amp;quot;) };&lt;br /&gt;
      mPost.setRequestEntity(new MultipartRequestEntity(parts, mPost.getParams()));&lt;br /&gt;
      HttpClient cl = new HttpClient();&lt;br /&gt;
      cl.executeMethod(mPost);&lt;br /&gt;
      System.out.println(mPost.getResponseBodyAsString());&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Java ( Based on new Apache HttpComponents library ) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
* RT ticket creator based on the current Apache HttpComponents library 4.1.3&lt;br /&gt;
* Created by Koustubha Kale, kmkale at youtility dot in&lt;br /&gt;
*/&lt;br /&gt;
import org.apache.http.HttpEntity;&lt;br /&gt;
import org.apache.http.HttpResponse;&lt;br /&gt;
import org.apache.http.auth.AuthScope;&lt;br /&gt;
import org.apache.http.auth.UsernamePasswordCredentials;&lt;br /&gt;
import org.apache.http.client.HttpClient;&lt;br /&gt;
import org.apache.http.client.methods.HttpPost;&lt;br /&gt;
import org.apache.http.entity.mime.MultipartEntity;&lt;br /&gt;
import org.apache.http.entity.mime.content.StringBody;&lt;br /&gt;
import org.apache.http.impl.client.DefaultHttpClient;&lt;br /&gt;
import org.apache.http.util.EntityUtils;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class NewApacheHttpcomponentsRtTicketCreator {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        &lt;br /&gt;
        DefaultHttpClient httpclient = new DefaultHttpClient();&lt;br /&gt;
	try {&lt;br /&gt;
            &lt;br /&gt;
            HttpPost httppost = new HttpPost(&amp;quot;http://rt.xxx.com/rt/REST/1.0&amp;quot; +&lt;br /&gt;
                    &amp;quot;/ticket/new?user=username&amp;amp;pass=password&amp;quot;);&lt;br /&gt;
	    StringBody content = new StringBody(&amp;quot;Queue: General\nSubject: 123&amp;quot;);&lt;br /&gt;
	    MultipartEntity reqEntity = new MultipartEntity();&lt;br /&gt;
	    reqEntity.addPart(&amp;quot;content&amp;quot;, content);&lt;br /&gt;
	    httppost.setEntity(reqEntity);&lt;br /&gt;
	    System.out.println(&amp;quot;executing request &amp;quot; + httppost.getRequestLine());&lt;br /&gt;
            HttpResponse response = httpclient.execute(httppost);&lt;br /&gt;
            HttpEntity resEntity = response.getEntity();&lt;br /&gt;
&lt;br /&gt;
            System.out.println(&amp;quot;----------------------------------------&amp;quot;);&lt;br /&gt;
            System.out.println(response.getStatusLine());&lt;br /&gt;
            if (resEntity != null) {&lt;br /&gt;
                System.out.println(&amp;quot;Response content length: &amp;quot; + resEntity.getContentLength());&lt;br /&gt;
            }&lt;br /&gt;
            EntityUtils.consume(resEntity);&lt;br /&gt;
        } finally {&lt;br /&gt;
            try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import cookielib&lt;br /&gt;
import urllib&lt;br /&gt;
import urllib2&lt;br /&gt;
       &lt;br /&gt;
# creates a cookie for the rtserver with the credentials given at initialization.&lt;br /&gt;
# define your credentials here&lt;br /&gt;
access_user = &#039;your_login&#039;&lt;br /&gt;
access_password = &#039;your_password&#039;&lt;br /&gt;
       &lt;br /&gt;
# here is the RequestTracker URI we try to access&lt;br /&gt;
uri = &#039;http://your-rt-instance.com/REST/1.0/&#039;&lt;br /&gt;
       &lt;br /&gt;
# trying login on rt server&lt;br /&gt;
cj = cookielib.LWPCookieJar()&lt;br /&gt;
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))&lt;br /&gt;
urllib2.install_opener(opener)&lt;br /&gt;
data = {&#039;user&#039;: access_user, &#039;pass&#039;: access_password}&lt;br /&gt;
ldata = urllib.urlencode(data)&lt;br /&gt;
login = urllib2.Request(uri, ldata)&lt;br /&gt;
try:&lt;br /&gt;
   response = urllib2.urlopen(login)&lt;br /&gt;
   print response.read()&lt;br /&gt;
   print &amp;quot;login successful&amp;quot;&lt;br /&gt;
except urllib2.URLError:&lt;br /&gt;
   # could not connect to server&lt;br /&gt;
   print &amp;quot;Not able to login&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env ruby&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
user = &#039;username&#039;&lt;br /&gt;
pass = &#039;password&#039;&lt;br /&gt;
uri = URI(&#039;https://rt.example.com/REST/1.0/ticket/123/show&#039;)&lt;br /&gt;
&lt;br /&gt;
req = Net::HTTP::Post.new(uri.path)&lt;br /&gt;
req.set_form_data(&#039;user&#039; =&amp;gt; user, &#039;pass&#039; =&amp;gt; pass)&lt;br /&gt;
&lt;br /&gt;
res = Net::HTTP.start(uri.hostname, uri.port, &lt;br /&gt;
  :use_ssl =&amp;gt; uri.scheme == &#039;https&#039;, &lt;br /&gt;
  :set_debug_output =&amp;gt; $stderr) do |http|&lt;br /&gt;
  http.request(req)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
case res&lt;br /&gt;
when Net::HTTPSuccess, Net::HTTPRedirection&lt;br /&gt;
  # OK&lt;br /&gt;
  puts &amp;quot;HTTP response code:  #{res.code}&amp;quot;&lt;br /&gt;
  puts &amp;quot;HTTP message: #{res.message}&amp;quot;&lt;br /&gt;
  puts &amp;quot;Response:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  res.each do |key,val|&lt;br /&gt;
    puts &amp;quot;#{key} =&amp;gt; #{val}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  puts &amp;quot;Data:&amp;quot;&lt;br /&gt;
  puts res.body&lt;br /&gt;
else&lt;br /&gt;
  res.value&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$username = rt_user;&lt;br /&gt;
$password = rt_pass;&lt;br /&gt;
$url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/&amp;lt;ticket id&amp;gt;/show?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
$request = new HttpRequest($url, HTTP_METH_GET);&lt;br /&gt;
/* if you want&#039;s to pass additional parameters */&lt;br /&gt;
$request-&amp;gt;addQueryData(array());&lt;br /&gt;
$response = $request-&amp;gt;send();&lt;br /&gt;
print_r($response);&lt;br /&gt;
&amp;lt;/pre&amp;gt; OR&amp;lt;pre&amp;gt;&lt;br /&gt;
$username = rt_user;&lt;br /&gt;
$password = rt_pass;&lt;br /&gt;
$url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/new?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
$request = new HttpRequest($url, HTTP_METH_POST);&lt;br /&gt;
// Note : to add data in custom fields you need to add element like below example&lt;br /&gt;
// in $post_data array&lt;br /&gt;
// Example : \nCF-customfield1:testdata&lt;br /&gt;
$post_data=array(&amp;quot;content&amp;quot;=&amp;gt;&amp;quot;Queue: General\nRequestor: user@domain\nSubject: REST test 1\nOwner: userX\nAdminCc: userX\nText: This is a REST test\n&amp;quot;);&lt;br /&gt;
$request-&amp;gt;addPostFields($post_data);&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
response = $request-&amp;gt;send()-&amp;gt;getBody();&lt;br /&gt;
print_r($response);&lt;br /&gt;
}catch (HttpException $ex) {&lt;br /&gt;
echo $ex;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== C# ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Using &amp;quot;WCF REST Starter Kit&amp;quot; (http://msdn.microsoft.com/en-us/netframework/cc950529.aspx)&lt;br /&gt;
using (var client = new HttpClient(&amp;quot;http://rt.site.com/REST/1.0/&amp;quot;))&lt;br /&gt;
{&lt;br /&gt;
   client.TransportSettings.Cookies = new CookieContainer();&lt;br /&gt;
&lt;br /&gt;
   var form = new HttpUrlEncodedForm();&lt;br /&gt;
   form.Add(&amp;quot;user&amp;quot;, &amp;quot;LOGIN&amp;quot;);&lt;br /&gt;
   form.Add(&amp;quot;pass&amp;quot;, &amp;quot;PASSWORD&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   client.Post(string.Empty, form.CreateHttpContent());&lt;br /&gt;
&lt;br /&gt;
   // 1. Get ticket data&lt;br /&gt;
   using (var request = client.Get(&amp;quot;ticket/1234/show&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
      string content = request.Content.ReadAsString();&lt;br /&gt;
      // Some logic&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // 2. Post ticket reply with attachment&lt;br /&gt;
   var formPost = new HttpMultipartMimeForm();&lt;br /&gt;
   byte[] attachment = new byte[];&lt;br /&gt;
   string content = string.Empty;&lt;br /&gt;
         &lt;br /&gt;
   // Store data in attachment&lt;br /&gt;
   // Store data in content string (&amp;quot;Field: Value&amp;quot; line by line)&lt;br /&gt;
   // ...&lt;br /&gt;
         &lt;br /&gt;
   formPost.Add(&amp;quot;content&amp;quot;, content);&lt;br /&gt;
   formPost.Add(&amp;quot;attachment_1&amp;quot;, &amp;quot;attachment_1&amp;quot;, HttpContent.Create(attachment, &amp;quot;application/octet-stream&amp;quot;));&lt;br /&gt;
                             &lt;br /&gt;
   using (var post = client.Post(&amp;quot;ticket/1234/comment&amp;quot;), formPost.CreateHttpContent()))&lt;br /&gt;
      // Some logic&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Powershell (v3)===&lt;br /&gt;
* Escape Powershell reserved chars in user/pass&lt;br /&gt;
* If connecting via SSL, use fqdn of server, not cname&lt;br /&gt;
*Use `n (newline) when composing new ticket structure&lt;br /&gt;
Read RT queue based on query: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$servername=&amp;quot;Your Servername here&amp;quot;&lt;br /&gt;
$u=&amp;quot;user=Username&amp;quot;&lt;br /&gt;
$p=&amp;quot;pass=Password&amp;quot;&lt;br /&gt;
$q=&amp;quot;search/ticket?query=(Status=&#039;open&#039; OR Status=&#039;new&#039;) AND (Queue=&#039;GENERAL&#039; OR Queue=&#039;FOO&#039;) AND Owner=&#039;Nobody&#039;&amp;quot;&lt;br /&gt;
$uri=&amp;quot;https://&amp;quot; + $servername + &amp;quot;/rt/REST/1.0/&amp;quot; + $q + &amp;quot;&amp;amp;&amp;quot; + $u + &amp;quot;&amp;amp;&amp;quot; + $p&lt;br /&gt;
$RT=Invoke-WebRequest -Uri  $uri -SessionVariable sess&lt;br /&gt;
$rt.Content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===VB.NET===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Public Sub AddAttachmentToRT(ByVal url As String, ByVal fileName As String, ByVal filePath As String)&lt;br /&gt;
&lt;br /&gt;
        Dim dataBoundary As String = &amp;quot;--xYzZY&amp;quot;&lt;br /&gt;
        Dim request As HttpWebRequest&lt;br /&gt;
        Dim fileType As String = &amp;quot;image/jpeg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        &#039;Create a POST web request to the REST interface using the passed URL&lt;br /&gt;
        request = CType(WebRequest.Create(url), HttpWebRequest)&lt;br /&gt;
        request.ContentType = &amp;quot;multipart/form-data; boundary=xYzZY&amp;quot;&lt;br /&gt;
        request.Method = &amp;quot;POST&amp;quot;&lt;br /&gt;
        request.KeepAlive = True&lt;br /&gt;
&lt;br /&gt;
        &#039;Write the request to the requestStream&lt;br /&gt;
        Using requestStream As IO.Stream = request.GetRequestStream()&lt;br /&gt;
&lt;br /&gt;
            &#039;Create a variable &amp;quot;attachment_1&amp;quot; in the POST, specify the file name and file type&lt;br /&gt;
            Dim preAttachment As String = dataBoundary + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Disposition: form-data; name=&amp;quot;&amp;quot;attachment_1&amp;quot;&amp;quot;; filename=&amp;quot;&amp;quot;&amp;quot; + fileName + &amp;quot;&amp;quot;&amp;quot;&amp;quot; + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Type: &amp;quot; + fileType + vbCrLf _&lt;br /&gt;
            + vbCrLf&lt;br /&gt;
&lt;br /&gt;
            &#039;Convert this preAttachment string to bytes&lt;br /&gt;
            Dim preAttachmentBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(preAttachment)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write this preAttachment string to the stream&lt;br /&gt;
            requestStream.Write(preAttachmentBytes, 0, preAttachmentBytes.Length)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write the file as bytes to the stream by passing its exact location&lt;br /&gt;
            Using fileStream As New IO.FileStream(Server.MapPath(filePath + fileName), IO.FileMode.Open, IO.FileAccess.Read)&lt;br /&gt;
&lt;br /&gt;
                Dim buffer(4096) As Byte&lt;br /&gt;
                Dim bytesRead As Int32 = fileStream.Read(buffer, 0, buffer.Length)&lt;br /&gt;
&lt;br /&gt;
                Do While (bytesRead &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
                    requestStream.Write(buffer, 0, bytesRead)&lt;br /&gt;
                    bytesRead = fileStream.Read(buffer, 0, buffer.Length)&lt;br /&gt;
&lt;br /&gt;
                Loop&lt;br /&gt;
&lt;br /&gt;
            End Using&lt;br /&gt;
&lt;br /&gt;
            &#039;Create a variable named content in the POST, specify the attachment name and comment text&lt;br /&gt;
            Dim postAttachment As String = vbCrLf _&lt;br /&gt;
            + dataBoundary + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Disposition: form-data; name=&amp;quot;&amp;quot;content&amp;quot;&amp;quot;&amp;quot; + vbCrLf _&lt;br /&gt;
            + vbCrLf _&lt;br /&gt;
            + &amp;quot;Action: comment&amp;quot; + vbLf _&lt;br /&gt;
            + &amp;quot;Attachment: &amp;quot; + fileName + vbCrLf _&lt;br /&gt;
            + &amp;quot;Text: Whatever You Want&amp;quot; + vbCrLf _&lt;br /&gt;
            + vbCrLf _&lt;br /&gt;
            + &amp;quot;--xYzZY--&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            &#039;Convert postAttachment string to bytes&lt;br /&gt;
            Dim postAttachmentBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(postAttachment)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write the postAttachment string to the stream&lt;br /&gt;
            requestStream.Write(postAttachmentBytes, 0, postAttachmentBytes.Length)&lt;br /&gt;
&lt;br /&gt;
        End Using&lt;br /&gt;
&lt;br /&gt;
        Dim response As Net.WebResponse = Nothing&lt;br /&gt;
&lt;br /&gt;
        &#039;Get the response from our REST request to RT&lt;br /&gt;
        &#039;Required to capture response, without this Try-Catch attaching will fail&lt;br /&gt;
        Try&lt;br /&gt;
            response = request.GetResponse()&lt;br /&gt;
&lt;br /&gt;
            Using responseStream As IO.Stream = response.GetResponseStream()&lt;br /&gt;
&lt;br /&gt;
                Using responseReader As New IO.StreamReader(responseStream)&lt;br /&gt;
&lt;br /&gt;
                    Dim responseText = responseReader.ReadToEnd()&lt;br /&gt;
&lt;br /&gt;
                End Using&lt;br /&gt;
&lt;br /&gt;
            End Using&lt;br /&gt;
&lt;br /&gt;
        Catch exception As Net.WebException&lt;br /&gt;
&lt;br /&gt;
            response = exception.Response&lt;br /&gt;
&lt;br /&gt;
            If (response IsNot Nothing) Then&lt;br /&gt;
&lt;br /&gt;
                Using reader As New IO.StreamReader(response.GetResponseStream())&lt;br /&gt;
&lt;br /&gt;
                    Dim responseText = reader.ReadToEnd()&lt;br /&gt;
&lt;br /&gt;
                End Using&lt;br /&gt;
&lt;br /&gt;
                response.Close()&lt;br /&gt;
&lt;br /&gt;
            End If&lt;br /&gt;
&lt;br /&gt;
        Finally&lt;br /&gt;
&lt;br /&gt;
            request = Nothing&lt;br /&gt;
&lt;br /&gt;
        End Try&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===JavaScript===&lt;br /&gt;
This is an example of updating the RefersTo field for a ticket. Assuming Zepto/jQuery is also being used.&lt;br /&gt;
 function link_back(url, ticket_num, rt) {&lt;br /&gt;
     var data, link;&lt;br /&gt;
     link = &amp;quot;refersto: &amp;quot; + url;&lt;br /&gt;
     data = {&amp;quot;content&amp;quot;: link};&lt;br /&gt;
 &lt;br /&gt;
     $.ajax({&lt;br /&gt;
         type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
         url: rt + ticket_num + &amp;quot;/links&amp;quot;,&lt;br /&gt;
         data: data,&lt;br /&gt;
         success: function (reply) {&lt;br /&gt;
             console.log(reply);&lt;br /&gt;
         }&lt;br /&gt;
     });&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 var url = &amp;quot;https://www.wikipedia.org/&amp;quot;;&lt;br /&gt;
 var ticket_num = &amp;quot;123456&amp;quot;;&lt;br /&gt;
 var rt = &amp;quot;https://some.rt.url/REST/1.0/ticket/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 link_back(url, ticket_num, rt);&lt;br /&gt;
&lt;br /&gt;
== Convenience libraries ==&lt;br /&gt;
&lt;br /&gt;
There are libraries which do much of the low-level work shown in the examples below for you, and provide an easier programming interface for dealing with RT:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Language&lt;br /&gt;
!Package/Module&lt;br /&gt;
!Source&lt;br /&gt;
!Example&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Perl&#039;&#039;&#039;&lt;br /&gt;
|[http://metacpan.org/module/RT::Client::REST RT::Client::REST]&lt;br /&gt;
|[http://rt-client-rest.googlecode.com/svn/trunk/ Google Code]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;perl -MCPAN -e install RT::Client::REST&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ruby&#039;&#039;&#039;&lt;br /&gt;
|[http://rubygems.org/gems/rt-client RubyGems]&lt;br /&gt;
|[https://github.com/uidzip/rt-client RT-Client]&lt;br /&gt;
|&amp;lt;code&amp;gt;gem install rt-client&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ruby&#039;&#039;&#039;&lt;br /&gt;
|[http://rubygems.org/gems/roart Roart]&lt;br /&gt;
|[https://github.com/pjdavis/roart GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;gem install roart&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Python&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/z4r/python-rtkit rtkit]&lt;br /&gt;
|[https://github.com/z4r/python-rtkit GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;pip install python-rtkit&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Python&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/CZ-NIC/python-rt python-rt]&lt;br /&gt;
|[https://github.com/CZ-NIC/python-rt Github]&lt;br /&gt;
|&amp;lt;code&amp;gt;pip install rt&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Java&#039;&#039;&#039;&lt;br /&gt;
|[http://projects.boksa.de/RT-REST/ RT-REST]&lt;br /&gt;
|[https://github.com/bboksa/RT-REST GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;N/A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PHP&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/dersam/RTPHPLib RTPHPLib]&lt;br /&gt;
|[https://github.com/dersam/RTPHPLib GitHub]&lt;br /&gt;
|composer require dersam/rt-php-lib&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Uidzip</name></author>
	</entry>
	<entry>
		<id>https://rt-wiki.bestpractical.com/index.php?title=REST&amp;diff=26518</id>
		<title>REST</title>
		<link rel="alternate" type="text/html" href="https://rt-wiki.bestpractical.com/index.php?title=REST&amp;diff=26518"/>
		<updated>2017-09-07T07:59:43Z</updated>

		<summary type="html">&lt;p&gt;Uidzip: update URL for rt-client ruby gem&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract ==&lt;br /&gt;
&lt;br /&gt;
The REST Interface gives you access to your RT Database. The complete communication is encapsulated in the HTTP protocol. The interface should be accessible in your installation.&lt;br /&gt;
&lt;br /&gt;
Though you may see references to older 3.x releases of RT below, Best Practice indicates that the REST stuff has not changed in any significant way in 4.x as of, at least, 1/2012.&lt;br /&gt;
&lt;br /&gt;
[{{SERVER}}/index.php?search={{TALKPAGENAME}}&amp;amp;title=Special:Search Legacy Comments] are available from the previous Wikia instance.&lt;br /&gt;
&lt;br /&gt;
== Interface ==&lt;br /&gt;
&lt;br /&gt;
Base URL: &amp;lt;code&amp;gt;.../REST/1.0/&amp;lt;/code&amp;gt;. The default response should be:&lt;br /&gt;
&lt;br /&gt;
    RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
    # Invalid object specification: &#039;index.html&#039;&lt;br /&gt;
&lt;br /&gt;
    id: index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
The REST Interface does not support HTTP-Authentication. So you must get a valid Session-Token and submit the cookie each request. You usually get a Session-Cookie by submitting the default login form. Use variables &amp;quot;&amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;&amp;quot; for login and &amp;quot;&amp;lt;code&amp;gt;pass&amp;lt;/code&amp;gt;&amp;quot; for password values. wget doesn&#039;t escape any characters in the --post-data option so make sure you properly escape any special characters in the password.&lt;br /&gt;
&lt;br /&gt;
See the wget invocation line below:&lt;br /&gt;
&lt;br /&gt;
    wget  --keep-session-cookies \&lt;br /&gt;
    --save-cookies cookies.txt \&lt;br /&gt;
    --post-data &#039;user=UUUU&amp;amp;pass=PPPP&#039; \&lt;br /&gt;
    http://my.rt.server&lt;br /&gt;
&lt;br /&gt;
You need the -keep-session-cookies option to make wget save session cookies.&lt;br /&gt;
&lt;br /&gt;
=== Ticket ===&lt;br /&gt;
&lt;br /&gt;
==== Ticket Properties ====&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single ticket, not including the history and comments.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.4.5 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;&lt;br /&gt;
 Queue: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Owner: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Creator: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Subject: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Status: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Priority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 InitialPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 FinalPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Requestors: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Cc: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 AdminCc: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Created: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Starts: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Started: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Due: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Resolved: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Told: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeEstimated: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeWorked: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 TimeLeft: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Links ====&lt;br /&gt;
&lt;br /&gt;
Gets the ticket links for a single ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links/show&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.2 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&lt;br /&gt;
 HasMember: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 ReferredToBy: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 DependedOnBy: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 MemberOf: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 RefersTo: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
 DependsOn: fsck.com-rt://your.server.com/ticket/&amp;amp;lt;another-id&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachments ====&lt;br /&gt;
&lt;br /&gt;
Gets a list of all attachments related to the ticket&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachment ====&lt;br /&gt;
Gets the metadata and content of a specific attachment.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments/&amp;amp;lt;attachment-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.8.0 200 Ok&lt;br /&gt;
 &lt;br /&gt;
id: &amp;lt;attachment-id&amp;gt;&lt;br /&gt;
Subject:&lt;br /&gt;
Creator: &amp;lt;user-id&amp;gt;&lt;br /&gt;
Created: &amp;lt;timestamp&amp;gt;&lt;br /&gt;
Transaction: &amp;lt;transaction-id&amp;gt;&lt;br /&gt;
Parent: &amp;lt;parent-id&amp;gt;&lt;br /&gt;
MessageId:&lt;br /&gt;
Filename: &amp;lt;filename&amp;gt;&lt;br /&gt;
ContentType: application/octet-stream&lt;br /&gt;
ContentEncoding: none&lt;br /&gt;
 &lt;br /&gt;
Headers: MIME-Version: 1.0&lt;br /&gt;
         X-Mailer: MIME-tools 5.427 (Entity 5.427)&lt;br /&gt;
         Content-Type: application/octet-stream;&lt;br /&gt;
           name=&amp;quot;&amp;lt;filename&amp;gt;&amp;quot;&lt;br /&gt;
         Content-Disposition: inline; filename=&amp;quot;&amp;lt;filename&amp;gt;&amp;quot;&lt;br /&gt;
         Content-Transfer-Encoding: base64&lt;br /&gt;
         Content-Length: &amp;lt;length in bytes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content: ...&lt;br /&gt;
         ...&lt;br /&gt;
         ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: RT returns the content indented with 9 spaces on each line, so that it lines up with the &amp;quot;Content:&amp;quot; header. Even if you strip this out with a regexp, the content is still UTF-8, which is probably not what you want. To get the original binary data back, strip out the 9 spaces with a regexp, strip off the 3 carriage returns at the end, and then convert the whole thing from UTF-8 to the native character encoding of the attachment, whatever that is. RT doesn&#039;t tell you, so you have know. If the attachments were uploaded by a U.S. Windows system, odds are that Windows-1252 is what you want. If you can&#039;t get the binary back intact, see the next method below.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Ticket Attachment Content ====&lt;br /&gt;
&lt;br /&gt;
Gets the attachment data content without additional metadata or whitespace characters&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/attachments/&amp;amp;lt;attachment-id&amp;amp;gt;/content&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.0 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
So to get the original content you still have to strip the first 2 lines of the response.&lt;br /&gt;
&lt;br /&gt;
==== Ticket History ====&lt;br /&gt;
Gets a list of all the history items for a given ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;history-count&amp;gt;/&amp;lt;history-count&amp;gt; (/total)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;history-id&amp;gt;: &amp;lt;history-name&amp;gt;&lt;br /&gt;
&amp;lt;history-id&amp;gt;: &amp;lt;history-name&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will get an additional row, for each history entry found. The first entry is usually: &amp;quot;&amp;lt;code&amp;gt;Ticket created by ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are two ways to get history item detail: you can do one of these and then recursively perform &amp;lt;code&amp;gt;ticket/history/id/&amp;amp;lt;history-id&amp;amp;gt;&amp;lt;/code&amp;gt; for each history-id from this REST call, but that is extremely wasteful and will scale horribly. What you really want to do is one REST call but get the long format:&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history?format=l&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.8.2 200 Ok&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;n&amp;gt;/&amp;lt;n&amp;gt; (id/&amp;amp;lt;history-id&amp;amp;gt;/total)&lt;br /&gt;
&lt;br /&gt;
id: &amp;lt;history-id&amp;gt;&lt;br /&gt;
Ticket: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
TimeTaken: &amp;lt;...&amp;gt;&lt;br /&gt;
Type: &amp;lt;...&amp;gt;&lt;br /&gt;
Field: &amp;lt;...&amp;gt;&lt;br /&gt;
OldValue: &amp;lt;...&amp;gt;&lt;br /&gt;
NewValue: &amp;lt;...&amp;gt;&lt;br /&gt;
Data: &amp;lt;...&amp;gt;&lt;br /&gt;
Description: &amp;lt;...&amp;gt;&lt;br /&gt;
Content: &amp;lt;...&amp;gt;&lt;br /&gt;
Creator: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Created: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attachments:&lt;br /&gt;
             &amp;lt;attachment-id&amp;gt;: &amp;lt;filename&amp;gt; (&amp;lt;size&amp;gt;)&lt;br /&gt;
             &amp;lt;attachment-id&amp;gt;: &amp;lt;filename&amp;gt; (&amp;lt;size&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;n&amp;gt;/&amp;lt;n&amp;gt; (id/&amp;amp;lt;history-id&amp;amp;gt;/total)&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;NOTE: the double dash &amp;quot;--&amp;quot; will occur in the long format between each history item. You can split the output on &amp;quot;--&amp;quot; and iterate over it, parsing out the data with an RFC822 parser, such as an email handling library.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Ticket History Entry ====&lt;br /&gt;
Gets the history information for a single history item. Note that the history item must actually correspond to the ticket.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/history/id/&amp;amp;lt;history-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/3.4.5 200 Ok&lt;br /&gt;
&lt;br /&gt;
# 70/70 (id/114856/total)&lt;br /&gt;
&lt;br /&gt;
id: &amp;lt;history-id&amp;gt;&lt;br /&gt;
Ticket: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
TimeTaken: &amp;lt;...&amp;gt;&lt;br /&gt;
Type: &amp;lt;...&amp;gt;&lt;br /&gt;
Field: &amp;lt;...&amp;gt;&lt;br /&gt;
OldValue: &amp;lt;...&amp;gt;&lt;br /&gt;
NewValue: &amp;lt;...&amp;gt;&lt;br /&gt;
Data: &amp;lt;...&amp;gt;&lt;br /&gt;
Description: &amp;lt;...&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Content: &amp;lt;lin1-0&amp;gt;&lt;br /&gt;
         &amp;lt;line-1&amp;gt;&lt;br /&gt;
         ...&lt;br /&gt;
         &amp;lt;line-n&amp;gt;&lt;br /&gt;
         &lt;br /&gt;
Creator: &amp;lt;...&amp;gt;&lt;br /&gt;
Created: &amp;lt;...&amp;gt;&lt;br /&gt;
Attachments: &amp;lt;...&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;IMPORTANT NOTE: At least with RT 3.8.0, when you request a history item with this method AND you have attached a file that has Mime type text/plain to the same item (eg. a comment with an attachement), RT will return the complete content of the attachment for the key &amp;quot;Content:&amp;quot; and not your real comment that you can see in the web frontend. This may lead to some problems if the requestor does not expect to get a comment content that is for example 1.8 MB of text. With other Mime type attachments this however seems to work. I don&#039;t know if this is a feature or a bug.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Ticket Search&#039;&#039;&#039; ====&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=&amp;amp;lt;query&amp;amp;gt;&amp;amp;orderby=&amp;amp;lt;sort-order&amp;amp;gt;&amp;amp;format=&amp;amp;lt;format&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;query&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can use any query generated by the query builder - or feel free to write your own. Here an example that will do the following: Find all tickets that have no owner and the status new or open&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;query= Owner = &#039;Nobody&#039; AND ( Status = &#039;new&#039; OR Status = &#039;open&#039; )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: to get all the tickets in &amp;quot;fooQueue&amp;quot; you&#039;d access:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example: to get the tickets for a custom field &amp;quot;Contact Name&amp;quot; you&#039;d access:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=&#039;CF.{Contact Name}&#039;=&#039;Shaun Wallace&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;orderby&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
By this parameter you can change the sort field and order of the search result. To sort a list ascending just put a + before the fieldname, otherwise a -. Eg: -Created (will put the newest tickets at the beginning).&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;amp;orderby=+Created&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;format&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* i: ticket/&amp;amp;lt;ticket-id&amp;amp;gt;&lt;br /&gt;
* s: &amp;amp;lt;ticket-id&amp;amp;gt;: &amp;amp;lt;ticket-subject&amp;amp;gt;&lt;br /&gt;
* l: a multi-line format&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=Queue=&#039;fooQueue&#039;&amp;amp;orderby=+Created&amp;amp;format=i&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fields&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A list of fields you would like included in the result set.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 &amp;lt;code&amp;gt;/REST/1.0/search/ticket?query=id=42&amp;amp;format=l&amp;amp;fields=Subject,Status,Priority,CF.\{Category\}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you may need to escape characters like the curly braces for CFs.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Ticket Create&#039;&#039;&#039; ====&lt;br /&gt;
&lt;br /&gt;
To create a new ticket: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/new&amp;lt;/code&amp;gt; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line, example:&lt;br /&gt;
&lt;br /&gt;
Testing the new ticket section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: ticket/new&lt;br /&gt;
Queue: &amp;lt;queue name&amp;gt;&lt;br /&gt;
Requestor: &amp;lt;requestor email address&amp;gt;&lt;br /&gt;
Subject: &amp;lt;subject&amp;gt;&lt;br /&gt;
Cc: &amp;lt;...&amp;gt;&lt;br /&gt;
AdminCc: &amp;lt;...&amp;gt;&lt;br /&gt;
Owner: &amp;lt;...&amp;gt;&lt;br /&gt;
Status: &amp;lt;...&amp;gt;&lt;br /&gt;
Priority: &amp;lt;...&amp;gt;&lt;br /&gt;
InitialPriority: &amp;lt;...&amp;gt;&lt;br /&gt;
FinalPriority: &amp;lt;...&amp;gt;&lt;br /&gt;
TimeEstimated: &amp;lt;...&amp;gt;&lt;br /&gt;
Starts: &amp;lt;...&amp;gt;&lt;br /&gt;
Due: &amp;lt;...&amp;gt;&lt;br /&gt;
Text: &amp;lt;The ticket content&amp;gt;&lt;br /&gt;
CF-&amp;lt;CustomFieldName&amp;gt;: &amp;lt;CustomFieldValue&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If there are any &amp;quot;special&amp;quot; characters (Umlauts, dash, ...?) in a custom field&#039;s name, you can still access it via its ID:&lt;br /&gt;
 CF-$id: &amp;lt;Value&amp;gt;&lt;br /&gt;
If you want to have a multiline Text, prefix every line with a blank.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Due: &amp;lt;...&amp;gt;&lt;br /&gt;
Text: This is &lt;br /&gt;
 a &lt;br /&gt;
 multiline Text&lt;br /&gt;
 !!!&lt;br /&gt;
CF-&amp;lt;CustomFieldName&amp;gt;: &amp;lt;CustomFieldValue&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The response should look like: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RT/4.0.6 200 Ok&lt;br /&gt;
&lt;br /&gt;
# Ticket 775 created.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== curl example =====&lt;br /&gt;
    &lt;br /&gt;
  * Create a file containing the ticket form:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: ticket/new&lt;br /&gt;
Queue: queue1&lt;br /&gt;
Requestor: requestor@email&lt;br /&gt;
Priority: 4&lt;br /&gt;
CF-Type of request: Demande&lt;br /&gt;
Subject: Test REST&lt;br /&gt;
Text: Multi line&lt;br /&gt;
 test with&lt;br /&gt;
 special chars: é&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  * Submit using curl:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl --data-urlencode content@file.name &#039;https://HOSTNAME/REST/1.0/ticket/new?user=USER&amp;amp;pass=PASSWORD&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== Ticket Edit ====&lt;br /&gt;
To update an existing ticket: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/edit&amp;lt;/code&amp;gt; with a variable named &amp;quot;content&amp;quot;, containing &amp;quot;key: value&amp;quot; line by line (like the one displayed when issuing &amp;lt;code&amp;gt;ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;). Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Priority: 5&lt;br /&gt;
TimeWorked: 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*PHP&lt;br /&gt;
   &amp;lt;pre&amp;gt; &lt;br /&gt;
                    $username = rt_user;&lt;br /&gt;
                    $password = rt_pass;&lt;br /&gt;
                    $url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/&amp;lt;ticket id&amp;gt;/edit?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
                    $request = new HttpRequest($url, HTTP_METH_POST);&lt;br /&gt;
                    $post_data=array(&amp;quot;content&amp;quot;=&amp;gt;&amp;quot;AdminCc: userX\nText: This is a REST test edit ticket\n&amp;quot;);&lt;br /&gt;
                    &lt;br /&gt;
                    // add the post fields  &lt;br /&gt;
                    $request-&amp;gt;addPostFields($postData);&lt;br /&gt;
                    // response from RT&lt;br /&gt;
                    $response = $request-&amp;gt;send()-&amp;gt;getBody();&lt;br /&gt;
                    print_r($response);&lt;br /&gt;
                    &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Tickets History Reply ====&lt;br /&gt;
Same as comment: post on &amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/comment&amp;lt;/code&amp;gt; with a variable name &amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
Action: correspond&lt;br /&gt;
Text: the text comment&lt;br /&gt;
Cc: &amp;lt;...&amp;gt;&lt;br /&gt;
Bcc: &amp;lt;...&amp;gt;&lt;br /&gt;
TimeWorked: &amp;lt;...&amp;gt;&lt;br /&gt;
Attachment: an attachment filename/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Cc&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Bcc&amp;lt;/code&amp;gt; are for this reply only (&#039;&#039;I think&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
==== Ticket History Comment ====&lt;br /&gt;
To add a comment to an existing ticket: POST on &amp;quot;&amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/comment&amp;lt;/code&amp;gt;&amp;quot; with a variable name &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
id: &amp;lt;ticket-id&amp;gt;&lt;br /&gt;
Action: comment&lt;br /&gt;
Text: the text comment&lt;br /&gt;
Attachment: an attachment filename/path&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Action can be &amp;quot;&amp;lt;code&amp;gt;comment&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;correspond&amp;lt;/code&amp;gt;&amp;quot;. For a list of fields you can use in correspondence, try &amp;quot;&amp;lt;code&amp;gt;/opt/rt3/bin/rt correspond ticket/1&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If your comment contains multiple lines, each new line must be preceded by a space (e.g. &amp;quot;line 1\n line 2&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
If you want to use HTML replies, use &amp;lt;pre&amp;gt;Content-Type: text/html&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you used &amp;quot;&amp;lt;code&amp;gt;Attachment&amp;lt;/code&amp;gt;&amp;quot;, you must add to your POST a variable &amp;quot;&amp;lt;code&amp;gt;attachment_1&amp;lt;/code&amp;gt;&amp;quot; that contains the raw attachment in multi-part file object.&lt;br /&gt;
&lt;br /&gt;
You can upload more attachments as well, in this case you have to separate the file names in the &amp;quot;&amp;lt;code style=&amp;quot;border-style: initial; border-color: initial; &amp;quot;&amp;gt;Attachment&amp;lt;/code&amp;gt;&amp;quot; with &amp;quot;\n &amp;quot;(a newline and space, without quotes) and add a new variable &amp;quot;attachment_$i&amp;quot; to your POST where $i is the index of attachment.&lt;br /&gt;
&lt;br /&gt;
You need to send header to post comments&lt;br /&gt;
&lt;br /&gt;
==== Ticket Links Edit ====&lt;br /&gt;
To update links on an existing ticket: POST on &amp;quot;&amp;lt;code&amp;gt;/REST/1.0/ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&amp;lt;/code&amp;gt;&amp;quot; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line (like the one displayed when issuing &amp;quot;&amp;lt;code&amp;gt;ticket/&amp;amp;lt;ticket-id&amp;amp;gt;/links&amp;lt;/code&amp;gt;&amp;quot;). Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DependsOn: 54354&lt;br /&gt;
RefersTo: http://some.external/link&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== User Properties ===&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single user.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/user/&amp;amp;lt;user-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.4 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: user/&amp;amp;lt;user-id&amp;amp;gt;&lt;br /&gt;
 Name: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Password: ********&lt;br /&gt;
 EmailAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 RealName: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Organization: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Privileged: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Disabled: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also you can use user login instead of user ID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ===&lt;br /&gt;
&lt;br /&gt;
==== User Create ====&lt;br /&gt;
&lt;br /&gt;
To create a new user: post on &amp;lt;code&amp;gt;/REST/1.0/user/new&amp;lt;/code&amp;gt; with a variable named &amp;quot;&amp;lt;code&amp;gt;content&amp;lt;/code&amp;gt;&amp;quot;, containing &amp;quot;&amp;lt;code&amp;gt;key: value&amp;lt;/code&amp;gt;&amp;quot; line by line, like the response to &amp;lt;code&amp;gt;/user/&amp;amp;lt;ticket-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== User Edit ====&lt;br /&gt;
To update an existing user: post on &amp;lt;code&amp;gt;/REST/1.0/user/&amp;amp;lt;user-id&amp;amp;gt;/edit&amp;lt;/code&amp;gt; with a variable named &amp;quot;content&amp;quot;, containing &amp;quot;key: value&amp;quot; line by line (like the one displayed when issuing &amp;lt;code&amp;gt;user/&amp;amp;lt;user-id&amp;amp;gt;/show&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Queue Properties ===&lt;br /&gt;
&lt;br /&gt;
Gets the data for a single queue.&lt;br /&gt;
&lt;br /&gt;
Request: &amp;lt;code&amp;gt;/REST/1.0/queue/&amp;amp;lt;queue-id&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 RT/3.8.4 200 Ok&lt;br /&gt;
 &lt;br /&gt;
 id: queue/&amp;amp;lt;queue-id&amp;amp;gt;&lt;br /&gt;
 Name: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 Description: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 CorrespondAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 CommentAddress: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 InitialPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 FinalPriority: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
 DefaultDueIn: &amp;amp;lt;...&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Logout ===&lt;br /&gt;
&lt;br /&gt;
To logout: post on &amp;lt;code&amp;gt;/REST/1.0/logout&amp;lt;/code&amp;gt; with empty content.&lt;br /&gt;
&lt;br /&gt;
== Types ==&lt;br /&gt;
&lt;br /&gt;
*new&lt;br /&gt;
*open&lt;br /&gt;
*stalled&lt;br /&gt;
*resolved&lt;br /&gt;
*rejected&lt;br /&gt;
*deleted&lt;br /&gt;
+ other custom values defined in you local RT portal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== History entry type ===&lt;br /&gt;
* Create&lt;br /&gt;
* CustomField&lt;br /&gt;
* EmailRecord&lt;br /&gt;
* Status&lt;br /&gt;
* CommentEmailRecord&lt;br /&gt;
* Correspond&lt;br /&gt;
* Comment&lt;br /&gt;
* Priority&lt;br /&gt;
* Give&lt;br /&gt;
* Steal&lt;br /&gt;
* Take&lt;br /&gt;
* Untake&lt;br /&gt;
* AddWatcher&lt;br /&gt;
* DeleteWatcher&lt;br /&gt;
* AddLink&lt;br /&gt;
* DeleteLink&lt;br /&gt;
* AddReminder&lt;br /&gt;
* OpenReminder&lt;br /&gt;
* ResolveReminder&lt;br /&gt;
* Set&lt;br /&gt;
* Force&lt;br /&gt;
* Subject&lt;br /&gt;
* Told&lt;br /&gt;
* PurgeTransaction&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
=== Data format ===&lt;br /&gt;
History entries time returns in UTC, boolean returns as &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (true) and &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;(false). &lt;br /&gt;
Use only &amp;lt;code&amp;gt;&amp;quot;\n&amp;quot;&amp;lt;/code&amp;gt;, not &amp;lt;code&amp;gt;&amp;quot;\r\n&amp;quot;&amp;lt;/code&amp;gt;in post content. &lt;br /&gt;
Comments in response body starts with &amp;lt;code&amp;gt; &amp;lt;/code&amp;gt;&lt;br /&gt;
#symbol.&lt;br /&gt;
&lt;br /&gt;
=== Request status ===&lt;br /&gt;
To get real request/post status you need to check status code in first line of server response.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
To get the results of a single request (without setting the Session-Cookie) - assuming you&#039;ve set:&lt;br /&gt;
&lt;br /&gt;
* $uri to your RT REST URL&lt;br /&gt;
* $access_user to your username&lt;br /&gt;
* $access_password to your password&lt;br /&gt;
* $ticketNumber to the ticket you want to see&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my $ua = LWP::UserAgent-&amp;amp;gt;new;&lt;br /&gt;
$ua-&amp;gt;timeout(10);&lt;br /&gt;
$ua-&amp;gt;agent(&amp;quot;YOURUSERAGENTHERE&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
my $response = $ua-&amp;gt;post($uri.&amp;quot;ticket/$ticketNumber&amp;quot;,&lt;br /&gt;
   [&#039;user&#039; =&amp;gt; $access_user, &#039;pass&#039; =&amp;gt; $access_password],&lt;br /&gt;
    &#039;Content_Type&#039; =&amp;gt; &#039;form-data&#039;);&lt;br /&gt;
&lt;br /&gt;
if ($response-&amp;amp;gt;is_success) {&lt;br /&gt;
   print $response-&amp;gt;decoded_content;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import org.apache.commons.httpclient.HttpClient;&lt;br /&gt;
import org.apache.commons.httpclient.methods.PostMethod;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.Part;&lt;br /&gt;
import org.apache.commons.httpclient.methods.multipart.StringPart;&lt;br /&gt;
  &lt;br /&gt;
public class RtTicketCreator {&lt;br /&gt;
   static final String BASE_URI = &amp;quot;http://rt.xxx.com/REST/1.0&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   public static void main(String[] args) throws IOException {&lt;br /&gt;
 &lt;br /&gt;
      PostMethod mPost = new PostMethod(BASE_URI + &amp;quot;/ticket/new?user=username&amp;amp;amp;pass=password&amp;quot;);&lt;br /&gt;
      Part[] parts = { new StringPart(&amp;quot;content&amp;quot;, &amp;quot;Queue: General\nSubject: 123&amp;quot;) };&lt;br /&gt;
      mPost.setRequestEntity(new MultipartRequestEntity(parts, mPost.getParams()));&lt;br /&gt;
      HttpClient cl = new HttpClient();&lt;br /&gt;
      cl.executeMethod(mPost);&lt;br /&gt;
      System.out.println(mPost.getResponseBodyAsString());&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Java ( Based on new Apache HttpComponents library ) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
* RT ticket creator based on the current Apache HttpComponents library 4.1.3&lt;br /&gt;
* Created by Koustubha Kale, kmkale at youtility dot in&lt;br /&gt;
*/&lt;br /&gt;
import org.apache.http.HttpEntity;&lt;br /&gt;
import org.apache.http.HttpResponse;&lt;br /&gt;
import org.apache.http.auth.AuthScope;&lt;br /&gt;
import org.apache.http.auth.UsernamePasswordCredentials;&lt;br /&gt;
import org.apache.http.client.HttpClient;&lt;br /&gt;
import org.apache.http.client.methods.HttpPost;&lt;br /&gt;
import org.apache.http.entity.mime.MultipartEntity;&lt;br /&gt;
import org.apache.http.entity.mime.content.StringBody;&lt;br /&gt;
import org.apache.http.impl.client.DefaultHttpClient;&lt;br /&gt;
import org.apache.http.util.EntityUtils;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class NewApacheHttpcomponentsRtTicketCreator {&lt;br /&gt;
&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        &lt;br /&gt;
        DefaultHttpClient httpclient = new DefaultHttpClient();&lt;br /&gt;
	try {&lt;br /&gt;
            &lt;br /&gt;
            HttpPost httppost = new HttpPost(&amp;quot;http://rt.xxx.com/rt/REST/1.0&amp;quot; +&lt;br /&gt;
                    &amp;quot;/ticket/new?user=username&amp;amp;pass=password&amp;quot;);&lt;br /&gt;
	    StringBody content = new StringBody(&amp;quot;Queue: General\nSubject: 123&amp;quot;);&lt;br /&gt;
	    MultipartEntity reqEntity = new MultipartEntity();&lt;br /&gt;
	    reqEntity.addPart(&amp;quot;content&amp;quot;, content);&lt;br /&gt;
	    httppost.setEntity(reqEntity);&lt;br /&gt;
	    System.out.println(&amp;quot;executing request &amp;quot; + httppost.getRequestLine());&lt;br /&gt;
            HttpResponse response = httpclient.execute(httppost);&lt;br /&gt;
            HttpEntity resEntity = response.getEntity();&lt;br /&gt;
&lt;br /&gt;
            System.out.println(&amp;quot;----------------------------------------&amp;quot;);&lt;br /&gt;
            System.out.println(response.getStatusLine());&lt;br /&gt;
            if (resEntity != null) {&lt;br /&gt;
                System.out.println(&amp;quot;Response content length: &amp;quot; + resEntity.getContentLength());&lt;br /&gt;
            }&lt;br /&gt;
            EntityUtils.consume(resEntity);&lt;br /&gt;
        } finally {&lt;br /&gt;
            try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import cookielib&lt;br /&gt;
import urllib&lt;br /&gt;
import urllib2&lt;br /&gt;
       &lt;br /&gt;
# creates a cookie for the rtserver with the credentials given at initialization.&lt;br /&gt;
# define your credentials here&lt;br /&gt;
access_user = &#039;your_login&#039;&lt;br /&gt;
access_password = &#039;your_password&#039;&lt;br /&gt;
       &lt;br /&gt;
# here is the RequestTracker URI we try to access&lt;br /&gt;
uri = &#039;http://your-rt-instance.com/REST/1.0/&#039;&lt;br /&gt;
       &lt;br /&gt;
# trying login on rt server&lt;br /&gt;
cj = cookielib.LWPCookieJar()&lt;br /&gt;
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))&lt;br /&gt;
urllib2.install_opener(opener)&lt;br /&gt;
data = {&#039;user&#039;: access_user, &#039;pass&#039;: access_password}&lt;br /&gt;
ldata = urllib.urlencode(data)&lt;br /&gt;
login = urllib2.Request(uri, ldata)&lt;br /&gt;
try:&lt;br /&gt;
   response = urllib2.urlopen(login)&lt;br /&gt;
   print response.read()&lt;br /&gt;
   print &amp;quot;login successful&amp;quot;&lt;br /&gt;
except urllib2.URLError:&lt;br /&gt;
   # could not connect to server&lt;br /&gt;
   print &amp;quot;Not able to login&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env ruby&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
user = &#039;username&#039;&lt;br /&gt;
pass = &#039;password&#039;&lt;br /&gt;
uri = URI(&#039;https://rt.example.com/REST/1.0/ticket/123/show&#039;)&lt;br /&gt;
&lt;br /&gt;
req = Net::HTTP::Post.new(uri.path)&lt;br /&gt;
req.set_form_data(&#039;user&#039; =&amp;gt; user, &#039;pass&#039; =&amp;gt; pass)&lt;br /&gt;
&lt;br /&gt;
res = Net::HTTP.start(uri.hostname, uri.port, &lt;br /&gt;
  :use_ssl =&amp;gt; uri.scheme == &#039;https&#039;, &lt;br /&gt;
  :set_debug_output =&amp;gt; $stderr) do |http|&lt;br /&gt;
  http.request(req)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
case res&lt;br /&gt;
when Net::HTTPSuccess, Net::HTTPRedirection&lt;br /&gt;
  # OK&lt;br /&gt;
  puts &amp;quot;HTTP response code:  #{res.code}&amp;quot;&lt;br /&gt;
  puts &amp;quot;HTTP message: #{res.message}&amp;quot;&lt;br /&gt;
  puts &amp;quot;Response:&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  res.each do |key,val|&lt;br /&gt;
    puts &amp;quot;#{key} =&amp;gt; #{val}&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  puts &amp;quot;Data:&amp;quot;&lt;br /&gt;
  puts res.body&lt;br /&gt;
else&lt;br /&gt;
  res.value&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$username = rt_user;&lt;br /&gt;
$password = rt_pass;&lt;br /&gt;
$url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/&amp;lt;ticket id&amp;gt;/show?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
$request = new HttpRequest($url, HTTP_METH_GET);&lt;br /&gt;
/* if you want&#039;s to pass additional parameters */&lt;br /&gt;
$request-&amp;gt;addQueryData(array());&lt;br /&gt;
$response = $request-&amp;gt;send();&lt;br /&gt;
print_r($response);&lt;br /&gt;
&amp;lt;/pre&amp;gt; OR&amp;lt;pre&amp;gt;&lt;br /&gt;
$username = rt_user;&lt;br /&gt;
$password = rt_pass;&lt;br /&gt;
$url = &amp;quot;http://server.domain.tld/REST/1.0/ticket/new?user=$username&amp;amp;pass=$password&amp;quot;;&lt;br /&gt;
$request = new HttpRequest($url, HTTP_METH_POST);&lt;br /&gt;
// Note : to add data in custom fields you need to add element like below example&lt;br /&gt;
// in $post_data array&lt;br /&gt;
// Example : \nCF-customfield1:testdata&lt;br /&gt;
$post_data=array(&amp;quot;content&amp;quot;=&amp;gt;&amp;quot;Queue: General\nRequestor: user@domain\nSubject: REST test 1\nOwner: userX\nAdminCc: userX\nText: This is a REST test\n&amp;quot;);&lt;br /&gt;
$request-&amp;gt;addPostFields($post_data);&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
response = $request-&amp;gt;send()-&amp;gt;getBody();&lt;br /&gt;
print_r($response);&lt;br /&gt;
}catch (HttpException $ex) {&lt;br /&gt;
echo $ex;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== C# ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Using &amp;quot;WCF REST Starter Kit&amp;quot; (http://msdn.microsoft.com/en-us/netframework/cc950529.aspx)&lt;br /&gt;
using (var client = new HttpClient(&amp;quot;http://rt.site.com/REST/1.0/&amp;quot;))&lt;br /&gt;
{&lt;br /&gt;
   client.TransportSettings.Cookies = new CookieContainer();&lt;br /&gt;
&lt;br /&gt;
   var form = new HttpUrlEncodedForm();&lt;br /&gt;
   form.Add(&amp;quot;user&amp;quot;, &amp;quot;LOGIN&amp;quot;);&lt;br /&gt;
   form.Add(&amp;quot;pass&amp;quot;, &amp;quot;PASSWORD&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
   client.Post(string.Empty, form.CreateHttpContent());&lt;br /&gt;
&lt;br /&gt;
   // 1. Get ticket data&lt;br /&gt;
   using (var request = client.Get(&amp;quot;ticket/1234/show&amp;quot;))&lt;br /&gt;
   {&lt;br /&gt;
      string content = request.Content.ReadAsString();&lt;br /&gt;
      // Some logic&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   // 2. Post ticket reply with attachment&lt;br /&gt;
   var formPost = new HttpMultipartMimeForm();&lt;br /&gt;
   byte[] attachment = new byte[];&lt;br /&gt;
   string content = string.Empty;&lt;br /&gt;
         &lt;br /&gt;
   // Store data in attachment&lt;br /&gt;
   // Store data in content string (&amp;quot;Field: Value&amp;quot; line by line)&lt;br /&gt;
   // ...&lt;br /&gt;
         &lt;br /&gt;
   formPost.Add(&amp;quot;content&amp;quot;, content);&lt;br /&gt;
   formPost.Add(&amp;quot;attachment_1&amp;quot;, &amp;quot;attachment_1&amp;quot;, HttpContent.Create(attachment, &amp;quot;application/octet-stream&amp;quot;));&lt;br /&gt;
                             &lt;br /&gt;
   using (var post = client.Post(&amp;quot;ticket/1234/comment&amp;quot;), formPost.CreateHttpContent()))&lt;br /&gt;
      // Some logic&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Powershell (v3)===&lt;br /&gt;
* Escape Powershell reserved chars in user/pass&lt;br /&gt;
* If connecting via SSL, use fqdn of server, not cname&lt;br /&gt;
*Use `n (newline) when composing new ticket structure&lt;br /&gt;
Read RT queue based on query: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$servername=&amp;quot;Your Servername here&amp;quot;&lt;br /&gt;
$u=&amp;quot;user=Username&amp;quot;&lt;br /&gt;
$p=&amp;quot;pass=Password&amp;quot;&lt;br /&gt;
$q=&amp;quot;search/ticket?query=(Status=&#039;open&#039; OR Status=&#039;new&#039;) AND (Queue=&#039;GENERAL&#039; OR Queue=&#039;FOO&#039;) AND Owner=&#039;Nobody&#039;&amp;quot;&lt;br /&gt;
$uri=&amp;quot;https://&amp;quot; + $servername + &amp;quot;/rt/REST/1.0/&amp;quot; + $q + &amp;quot;&amp;amp;&amp;quot; + $u + &amp;quot;&amp;amp;&amp;quot; + $p&lt;br /&gt;
$RT=Invoke-WebRequest -Uri  $uri -SessionVariable sess&lt;br /&gt;
$rt.Content&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===VB.NET===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Public Sub AddAttachmentToRT(ByVal url As String, ByVal fileName As String, ByVal filePath As String)&lt;br /&gt;
&lt;br /&gt;
        Dim dataBoundary As String = &amp;quot;--xYzZY&amp;quot;&lt;br /&gt;
        Dim request As HttpWebRequest&lt;br /&gt;
        Dim fileType As String = &amp;quot;image/jpeg&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        &#039;Create a POST web request to the REST interface using the passed URL&lt;br /&gt;
        request = CType(WebRequest.Create(url), HttpWebRequest)&lt;br /&gt;
        request.ContentType = &amp;quot;multipart/form-data; boundary=xYzZY&amp;quot;&lt;br /&gt;
        request.Method = &amp;quot;POST&amp;quot;&lt;br /&gt;
        request.KeepAlive = True&lt;br /&gt;
&lt;br /&gt;
        &#039;Write the request to the requestStream&lt;br /&gt;
        Using requestStream As IO.Stream = request.GetRequestStream()&lt;br /&gt;
&lt;br /&gt;
            &#039;Create a variable &amp;quot;attachment_1&amp;quot; in the POST, specify the file name and file type&lt;br /&gt;
            Dim preAttachment As String = dataBoundary + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Disposition: form-data; name=&amp;quot;&amp;quot;attachment_1&amp;quot;&amp;quot;; filename=&amp;quot;&amp;quot;&amp;quot; + fileName + &amp;quot;&amp;quot;&amp;quot;&amp;quot; + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Type: &amp;quot; + fileType + vbCrLf _&lt;br /&gt;
            + vbCrLf&lt;br /&gt;
&lt;br /&gt;
            &#039;Convert this preAttachment string to bytes&lt;br /&gt;
            Dim preAttachmentBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(preAttachment)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write this preAttachment string to the stream&lt;br /&gt;
            requestStream.Write(preAttachmentBytes, 0, preAttachmentBytes.Length)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write the file as bytes to the stream by passing its exact location&lt;br /&gt;
            Using fileStream As New IO.FileStream(Server.MapPath(filePath + fileName), IO.FileMode.Open, IO.FileAccess.Read)&lt;br /&gt;
&lt;br /&gt;
                Dim buffer(4096) As Byte&lt;br /&gt;
                Dim bytesRead As Int32 = fileStream.Read(buffer, 0, buffer.Length)&lt;br /&gt;
&lt;br /&gt;
                Do While (bytesRead &amp;gt; 0)&lt;br /&gt;
&lt;br /&gt;
                    requestStream.Write(buffer, 0, bytesRead)&lt;br /&gt;
                    bytesRead = fileStream.Read(buffer, 0, buffer.Length)&lt;br /&gt;
&lt;br /&gt;
                Loop&lt;br /&gt;
&lt;br /&gt;
            End Using&lt;br /&gt;
&lt;br /&gt;
            &#039;Create a variable named content in the POST, specify the attachment name and comment text&lt;br /&gt;
            Dim postAttachment As String = vbCrLf _&lt;br /&gt;
            + dataBoundary + vbCrLf _&lt;br /&gt;
            + &amp;quot;Content-Disposition: form-data; name=&amp;quot;&amp;quot;content&amp;quot;&amp;quot;&amp;quot; + vbCrLf _&lt;br /&gt;
            + vbCrLf _&lt;br /&gt;
            + &amp;quot;Action: comment&amp;quot; + vbLf _&lt;br /&gt;
            + &amp;quot;Attachment: &amp;quot; + fileName + vbCrLf _&lt;br /&gt;
            + &amp;quot;Text: Whatever You Want&amp;quot; + vbCrLf _&lt;br /&gt;
            + vbCrLf _&lt;br /&gt;
            + &amp;quot;--xYzZY--&amp;quot;&lt;br /&gt;
&lt;br /&gt;
            &#039;Convert postAttachment string to bytes&lt;br /&gt;
            Dim postAttachmentBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(postAttachment)&lt;br /&gt;
&lt;br /&gt;
            &#039;Write the postAttachment string to the stream&lt;br /&gt;
            requestStream.Write(postAttachmentBytes, 0, postAttachmentBytes.Length)&lt;br /&gt;
&lt;br /&gt;
        End Using&lt;br /&gt;
&lt;br /&gt;
        Dim response As Net.WebResponse = Nothing&lt;br /&gt;
&lt;br /&gt;
        &#039;Get the response from our REST request to RT&lt;br /&gt;
        &#039;Required to capture response, without this Try-Catch attaching will fail&lt;br /&gt;
        Try&lt;br /&gt;
            response = request.GetResponse()&lt;br /&gt;
&lt;br /&gt;
            Using responseStream As IO.Stream = response.GetResponseStream()&lt;br /&gt;
&lt;br /&gt;
                Using responseReader As New IO.StreamReader(responseStream)&lt;br /&gt;
&lt;br /&gt;
                    Dim responseText = responseReader.ReadToEnd()&lt;br /&gt;
&lt;br /&gt;
                End Using&lt;br /&gt;
&lt;br /&gt;
            End Using&lt;br /&gt;
&lt;br /&gt;
        Catch exception As Net.WebException&lt;br /&gt;
&lt;br /&gt;
            response = exception.Response&lt;br /&gt;
&lt;br /&gt;
            If (response IsNot Nothing) Then&lt;br /&gt;
&lt;br /&gt;
                Using reader As New IO.StreamReader(response.GetResponseStream())&lt;br /&gt;
&lt;br /&gt;
                    Dim responseText = reader.ReadToEnd()&lt;br /&gt;
&lt;br /&gt;
                End Using&lt;br /&gt;
&lt;br /&gt;
                response.Close()&lt;br /&gt;
&lt;br /&gt;
            End If&lt;br /&gt;
&lt;br /&gt;
        Finally&lt;br /&gt;
&lt;br /&gt;
            request = Nothing&lt;br /&gt;
&lt;br /&gt;
        End Try&lt;br /&gt;
&lt;br /&gt;
    End Sub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===JavaScript===&lt;br /&gt;
This is an example of updating the RefersTo field for a ticket. Assuming Zepto/jQuery is also being used.&lt;br /&gt;
 function link_back(url, ticket_num, rt) {&lt;br /&gt;
     var data, link;&lt;br /&gt;
     link = &amp;quot;refersto: &amp;quot; + url;&lt;br /&gt;
     data = {&amp;quot;content&amp;quot;: link};&lt;br /&gt;
 &lt;br /&gt;
     $.ajax({&lt;br /&gt;
         type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
         url: rt + ticket_num + &amp;quot;/links&amp;quot;,&lt;br /&gt;
         data: data,&lt;br /&gt;
         success: function (reply) {&lt;br /&gt;
             console.log(reply);&lt;br /&gt;
         }&lt;br /&gt;
     });&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 var url = &amp;quot;https://www.wikipedia.org/&amp;quot;;&lt;br /&gt;
 var ticket_num = &amp;quot;123456&amp;quot;;&lt;br /&gt;
 var rt = &amp;quot;https://some.rt.url/REST/1.0/ticket/&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
 link_back(url, ticket_num, rt);&lt;br /&gt;
&lt;br /&gt;
== Convenience libraries ==&lt;br /&gt;
&lt;br /&gt;
There are libraries which do much of the low-level work shown in the examples below for you, and provide an easier programming interface for dealing with RT:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Language&lt;br /&gt;
!Package/Module&lt;br /&gt;
!Source&lt;br /&gt;
!Example&lt;br /&gt;
!Note&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Perl&#039;&#039;&#039;&lt;br /&gt;
|[http://metacpan.org/module/RT::Client::REST RT::Client::REST]&lt;br /&gt;
|[http://rt-client-rest.googlecode.com/svn/trunk/ Google Code]&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;quot;perl -MCPAN -e install RT::Client::REST&amp;quot;&amp;lt;/code&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ruby&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/uidzip/rt-client RT-Client]&lt;br /&gt;
|[http://rubygems.org/gems/rt-client RubyGems]&lt;br /&gt;
|&amp;lt;code&amp;gt;gem install rt-client&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ruby&#039;&#039;&#039;&lt;br /&gt;
|[http://rubygems.org/gems/roart Roart]&lt;br /&gt;
|[https://github.com/pjdavis/roart GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;gem install roart&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Python&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/z4r/python-rtkit rtkit]&lt;br /&gt;
|[https://github.com/z4r/python-rtkit GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;pip install python-rtkit&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Python&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/CZ-NIC/python-rt python-rt]&lt;br /&gt;
|[https://github.com/CZ-NIC/python-rt Github]&lt;br /&gt;
|&amp;lt;code&amp;gt;pip install rt&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Java&#039;&#039;&#039;&lt;br /&gt;
|[http://projects.boksa.de/RT-REST/ RT-REST]&lt;br /&gt;
|[https://github.com/bboksa/RT-REST GitHub]&lt;br /&gt;
|&amp;lt;code&amp;gt;N/A&amp;lt;/code&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PHP&#039;&#039;&#039;&lt;br /&gt;
|[https://github.com/dersam/RTPHPLib RTPHPLib]&lt;br /&gt;
|[https://github.com/dersam/RTPHPLib GitHub]&lt;br /&gt;
|composer require dersam/rt-php-lib&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Uidzip</name></author>
	</entry>
</feed>