diff --git a/setup/doc/api/tickets.md b/setup/doc/api/tickets.md new file mode 100644 index 0000000000000000000000000000000000000000..df74b092648cff7503ae024eea0f7c6542c56a13 --- /dev/null +++ b/setup/doc/api/tickets.md @@ -0,0 +1,114 @@ +Tickets +======= +The API supports ticket creation via the HTTP API (as well as via email, +etc.). Currently, the API support creation of tickets only -- so no +modifications and deletions of existing tickets is possible via the API for +now. + +Create a Ticket +--------------- + +### Fields ###### + +* __email__: *required* Email address of the submitter +* __name__: *required* Name of the submitter +* __subject__: *required* Subject of the ticket +* __message__: *required* Initial message for the ticket thread + +* __alert__: If unset, disable alerts to staff. Default is `true` +* __autorespond__: If unset, disable autoresponses. Default is + `true` +* __ip__: IP address of the submitter +* __phone__: Phone number of the submitter. See examples below for + embedding the extension with the phone number +* __phone_ext__: Phone number extension -- can also be embedded in + *phone* +* __priorityId__: Priority *id* for the new ticket to assume +* __source__: Source of the ticket, default is `API` +* __topicId__: Help topic *id* associated with the ticket + +* __attachments__: An array of files to attach to the initial message. + Each attachment must have some content and also the + following fields: + * __name__: *required* name of the file to be attached. Multiple files + with the same name are allowable + * __type__: Mime type of the file. Default is `text/plain` + * __encoding__: Set to `base64` if content is base64 encoded + +### XMl Payload Example ###### + +The XML data format is extremely lax. Content can be either sent as an +attribute or a named element if it has no sub-content. + +In the example below, the simple element could also be replaced as +attributes on the root `<ticket>` element; however, if a `CDATA` element is +necessary to hold special content, or difficult content such as double +quotes is to be embedded, simple sub-elements are also supported. + +Notice that the phone extension can be sent as the `@ext` attribute of the +`phone` sub-element. + + <?xml version="1.0" encoding="UTF-8"?> + <ticket alert="true" autorespond="true" source="API"> + <name>Peter Rotich</name> + <email>peter@osticket.com</email> + <subject>Testing API</subject> + <phone ext="123">504-305-8634</phone> + <message><![CDATA[Message content here]]></message> + <attachments> + <file name="file.txt" type="plain/text" + encoding="base64"><![CDATA[ + File content is here and is automatically trimmed + ]]></file> + </attachments> + <ip>123.211.233.122</ip> + </ticket> + +### JSON Payload Example ### + +Attachment data for the JSON payload uses the [RFC 2397][] data URL format. +As described above, the content-type and base64 encoding hints are optional. +Furthermore, a character set can be optionally declared for each attachment +and will be automatically converted to UTF-8 for database storage. + +Notice that the phone number extension can be embedded in the `phone` value +denoted with a capital `X` + +Do also note that the JSON format forbids a comma after the last element in +an object or array definition, and newlines are not allowed inside strings. + + { + "alert": true, + "autorespond": true, + "source": "API", + "name": "Peter Rotich", + "email": "peter@osticket.com", + "phone": "5043058634X123", + "subject": "Testing API", + "ip": "123.211.233.122", + "message": "MESSAGE HERE", + "attachments": [ + {"file.txt": "data:text/plain;charset=utf-8,content"}, + {"image.png": "data:image/png;base64,R0lGODdhMAA..."}, + ] + } + +[rfc 2397]: http://www.ietf.org/rfc/rfc2397.txt "Data URLs" + +### Response ###### + +If successful, the server will send `HTTP/201 Created`. Otherwise, it will +send an appropriate HTTP status with the content being the error +description. Most likely offenders are + +* Required field not included +* Data type mismatch (text send for numeric field) +* Incorrectly encoded base64 data +* Unsupported field sent +* Incorrectly formatted payload (bad JSON or XML) + +Upon success, the content of the response will be the external ticket id of +the newly-created ticket. + + Status: 201 Created + 123456