NAV Navbar
cUrl
  • 1. Get Started
  • 2. Sales Flow API
  • 3. Release Notes
  • 1. Get Started

    1.1 Overview

    This STiX Cloud REST API Specification Document provides the API endpoints for accessing the resources and operations in the STiX Cloud Ticketing System for event booking flow.

    1.2 Authorization

    To authorize, use this code:

    # With shell, you can just pass the correct header with each request
    curl -u "<client_id>":"<client_secret>" -X POST 
    "https://auth.stixcloud.com/auth/v0/{tenant}/oauth/token?grant_type=client_credentials"
    

    The above command returns JSON structured like this:

    {
        "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9....",
        "token_type": "bearer",
        "expires_in": 3599,
        "scope": "sistic product cart payment patron package membership",
        "jti": "befa68ee-5355-4819-aef3-..."
    }
    

    The STiX Cloud REST API implements the OAuth 2.0 authorization protocol that gives an API client limited access to the resources on web server.

    OAuth 2.0 Endpoint :

    Env URL
    Staging https://api.stixcloudtest.com/auth/v0/{tenant}/oauth/token
    Production https://auth.stixcloud.com/auth/v0/{tenant}/oauth/token

    To access the API, the clients need to first authenticate themselves using the client credential grant in exchange for an access token with the following parameters:

    1.3 Request Header

    The access token is then passed to each API request via the HTTP header.

    curl -H "Authorization: Bearer <accessToken>" <resourceURL>
    
    Key Value Description
    Content-Type application/json
    Authorization Bearer

    1.4 Staging/Production Environment

    Rest API Endpoint:

    Env URL
    Staging https://api.stixcloudtest.com/api/v0/{tenant}
    Production https://api.stixcloud.com/api/v0/{tenant}

    1.5 Sales Flow

    2. Sales Flow API

    This section contains a set of booking REST API endpoints that allow the API client to retrieve the event information such as available event timing, category, section, inventory status, pricing or even to commit an order.

    2.1 Get Events

    Retrieve the list of active events available for sale. The list contains both current and future events.

    Sample request:

    curl --request GET \
      --url https://api.stixcloud.com/api/v0/{tenant}/icc \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json'
    

    The above command returns JSON structured like this:

    Status: 200. Retreive the list of active events available for sale.

    {
        "content": [
            {
                "summaryImagePath": "/public/SISTIC/01-01-2018/1514769287351/238x94.jpg",
                "internetContentCode": "cbest0418",
                "title": "The Best Gift - Cross Talk Play &lt;&lt;最棒的礼物&gt;&gt; 青少年相声剧",
                "promoters": [
                    "&lt;a href =&#39;http://www.yppae.org/&#39;&gt;Young People&rsquo;s Performing Arts Ensemble (YPPAE)&lt;/a&gt;"
                ],
                "genre": [
                    "Drama Chi"
                ],
                "startDate": "2018-04-06T20:00:00+08:00",
                "endDate": "2018-04-07T20:00:00+08:00",
                "sellabilityStartDate": "2018-01-01T00:00:00+08:00",
                "sellabilityEndDate": "2018-04-08T00:00:00+08:00",
                "venue": "Drama Centre Theatre",
                "synopsis": "&lt;p&gt;Inspired by and adapted from Jean-Jacques Semp&eacute; and Ren&eacute; Goscinny&#39;s &quot;Le petit Nicolas&quot;, Young People&#39;s Performing Arts Ensemble (YPPAE) will be presenting Youth Cross Talk Play &lt;strong&gt;&quot;The Best Gift&quot;&lt;/strong&gt; in April 2018.&lt;br /&gt;\n&lt;br /&gt;\nWhat is a gift?&lt;br /&gt;\nHave you received one? Have you given one?&lt;br /&gt;\nWill the gift you give be the best gift someone has ever received?&lt;br /&gt;\n&lt;br /&gt;\nThrough the structure and elements of Cross Talk and Theatre Play, &lt;strong&gt;&quot;The Best Gift&quot;&lt;/strong&gt; depicts the details of Nicolas&#39; everyday life with his parents and friends. Peering through the world through the young and innocent eyes of Nicolas, not only are the stories heartwarming, they are also full of humour.&lt;br /&gt;\n&lt;br /&gt;\nEvery one of us was once &#39;Nicolas&#39;. Let us bring you back to your childhood memories through &quot;The Best Gift&quot;~&lt;/p&gt;\n",
                "bookingUrl": "http://www.sistic.com.sg/events/cbest0418",
                "priceDescription": "&lt;p&gt;Standard: S$27, S$25&lt;/p&gt;\n",
                "duration": "&lt;p&gt;Approximately 1 hour 30 minutes&lt;br /&gt;\n(Inclusive of 15 minutes interval)&lt;/p&gt;\n",
                "admissionRules": "&lt;p&gt;&lt;strong&gt;Rating / Age Limit&lt;/strong&gt;&lt;/p&gt;\n\n&lt;ul&gt;\n\t&lt;li&gt;No admission for infants in arms and person below&nbsp;4&nbsp;years old.&lt;/li&gt;\n\t&lt;li&gt;Patron&nbsp;4 years and above must purchase a ticket for entry.&lt;/li&gt;\n\t&lt;li&gt;Admission is subject to tickets produced at the entrance.&lt;/li&gt;\n&lt;/ul&gt;\n\n&lt;p&gt;&lt;strong&gt;Late Seating Advisory&lt;/strong&gt;&lt;/p&gt;\n\n&lt;ul&gt;\n\t&lt;li&gt; Please be seated 15 minutes before the performance start time.&lt;/li&gt;\n\t&lt;li&gt;Late arrival may result in non-admittance until a suitable break in the performance.&lt;/li&gt;\n&lt;/ul&gt;\n\n&lt;p&gt;&lt;strong&gt;Photography / Video Recording Rules&lt;/strong&gt;&lt;/p&gt;\n\n&lt;ul&gt;\n\t&lt;li&gt;No Photography, Video recording and Audio recording is permitted for this event .&lt;/li&gt;\n&lt;/ul&gt;\n",
                "salesDateText": "&lt;p&gt;&lt;strong&gt;ALL Channel:&lt;/strong&gt;&lt;br /&gt;\n1 Jan 2018, 12pm&lt;/p&gt;\n",
                "languageTitle": "The Best Gift - Cross Talk Play <<最棒的礼物>> 青少年相声剧",
                "updateDate": "2018-01-01T09:14:47+08:00",
                "languageVenue": "&lt;p&gt;&lt;a href=&quot;http://www.sistic.com.sg/venues?id=196&quot;&gt;Drama Centre Theatre&lt;/a&gt;&lt;/p&gt;\n"
            },
            {
                "summaryImagePath": "http://api.stixcloud.com/api/v0/STIX/public/SISTIC/01-02-2018/1517453085160/238 X 94.jpg",
                "internetContentCode": "cescape2016aa",
                "title": "Captivate Escape Rooms Singapore",
                "promoters": [
                    "&lt;a href =&#39;http://www.admiralassociates.com/&#39;&gt;Admiral Associates Pte Ltd&lt;/a&gt;"
                ],
                "genre": [
                    "AttT"
                ],
                "startDate": "2018-01-31T23:59:00+08:00",
                "endDate": "2018-12-31T23:59:00+08:00",
                "sellabilityStartDate": "2016-07-01T00:00:00+08:00",
                "sellabilityEndDate": "2019-01-01T00:00:00+08:00",
                "venue": "Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28,Singapore Shopping Centre, #06-28",
                "synopsis": "&lt;p&gt;Book tickets for the biggest new entertainment buzz since the invention of the TV. &ldquo;Cirque&rdquo; by Captivate is coming to town from August 21st 2017.&lt;br /&gt;\n&lt;br /&gt;\nThe smallest man in the world is murdered and you don&rsquo;t need to be a fortune-teller to know it was murder.&lt;br /&gt;\n&lt;br /&gt;\nCaptivate is rated among the best Escape Rooms in the world so you can expect to have the ultimate adventure.&nbsp;&lt;/p&gt;\n",
                "priceDescription": "&lt;p&gt;Monday - Sunday: S$25 (min 2 pax)&lt;br /&gt;\n&lt;br /&gt;\n&lt;strong&gt;Please ensure that reservations are made prior to your visit.&lt;br /&gt;\n&lt;br /&gt;\nVisit &lt;a href=&quot;http://www.captivateescaperooms.com/&quot;&gt;Captivate Escape Rooms&lt;/a&gt; website&nbsp;for reservations.&lt;/strong&gt;&lt;/p&gt;\n",
                "duration": "&lt;p&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;/p&gt;\n",
                "admissionRules": "&lt;p&gt;&lt;strong&gt;Rating / Age Limit&lt;/strong&gt;&lt;/p&gt;\n\n&lt;ul&gt;\n\t&lt;li&gt;No admission for infant in arms and children below 7 years old&lt;/li&gt;\n\t&lt;li&gt;Children 7 years and above must purchase a ticket for entry&lt;/li&gt;\n&lt;/ul&gt;\n\n&lt;p&gt;&lt;strong&gt;Photography / Video Recording Rules&lt;/strong&gt;&lt;/p&gt;\n\n&lt;ul&gt;\n\t&lt;li&gt;Admission is subject to tickets produced at the entrance&lt;/li&gt;\n\t&lt;li&gt;No Photography, Video recording and Audio recording is permitted for this event&lt;/li&gt;\n&lt;/ul&gt;\n",
                "languageTitle": "Captivate Escape Rooms Singapore",
                "updateDate": "2018-02-01T10:44:45+08:00",
                "languageVenue": "&lt;p&gt;&lt;a href=&quot;http://www.sistic.com.sg/venues?id=955&quot;&gt;Singapore Shopping Centre, #06-28&lt;/a&gt;&lt;/p&gt;\n"
            }
        ],
        "totalPages": 103,
        "totalElements": 205,
        "last": false,
        "size": 2,
        "number": 0,
        "first": true,
        "numberOfElements": 2,
        "links": [
            {
                "rel": "self",
                "href": "http://api.stixcloud.com/api/v0/SISTIC/icc?page=0&size=2&lang=EN_SG"
            },
            {
                "rel": "next",
                "href": "http://api.stixcloud.com/api/v0/SISTIC/icc?lang=EN_SG&page=1&size=2"
            }
        ],
        "url": "http://api.stixcloud.com/api/v0/SISTIC/icc"
    }
    

    Errors:

    Http Code: 500. Internal Server Error

    {
     "httpStatus": "500", 
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName": "java.lang.NullPointerException",
     "statusMessage": "NullPointerException: ",
     "url" : "https://api.stixcloud.com/api/v0/{tenant}/icc"
    }
    

    2.1.1 Request

    You must replace tenant with your tenant code.

    2.1.2 Path Variables and Parameters

    Name Type Description
    tenant String [required] Tenant ID given
    page Number [optional] Page of record, default 0
    size Number [optional] Number of item per page, default 20
    lang String [optional] Language Code
    Defaults to EN_SG
    Below are the supported Locale ID:
    EN_SG English
    ZH_CN Simplified Chinese
    ZH_HK Traditional Chinese
    MS_MY Malay

    2.1.3 Response

    Status Code Meaning
    200 Returns the available events
    500 Internal server error

    2.1.4 Additional Notes

    2.1.5 Data Model

    2.1.5.1 Response Object

    Name Description on attribute Data Type Length/Data Range Nullable
    content List of event details List of content object - Y
    links List of links for pagination

    Rules:
    1. Next page link will appear if have more record
    2. Previous page link will appear if it’s not in the first page
    3. Last page link will appear if there is more than 1 page
    List of link object - Y
    last Flag for last page Boolean 4 Y
    totalPages Total number of page Number 10 Y
    totalElements Total number of records Number 10 Y
    sort Sorting for elements Boolean 255 Y
    numberOfElements Number of record per page Number 10 Y
    first Flag for first page Boolean 4 Y
    size Number of element per page Number 10 Y
    httpStatus Service response code String 255 N
    statusMessage Service response status message String 255 Y
    url Service request url
    API endpoint
    String 255 Y
    exceptionName Exception class name String 255 Y
    exceptionCode defined exception code for multi-language purpose String 255 Y
    errorTime Exception datetime
    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    number Number of Page Integer - Y

    2.1.5.2 Content Object

    Name Description on attribute Data Type Length/Data Range Nullable
    summaryImagePath Image for the event String 255 Y
    internetContentCode Event internet content code

    Unique code for event
    String 255 N
    title Event title

    Value is encoded using htmlEscape() for security purposes. The corresponding htmlUnescape() method must be invoked by client before usage
    String 255 Y
    genre Genre Array of String - Y
    promoters Event promoters

    Value is encoded using htmlEscape() for security purposes. The corresponding htmlUnescape() method must be invoked by client before usage
    Array of String - Y
    startDate Event start date

    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    endDate Event end date

    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    sellabilityStartDate Internet content start selling date

    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    sellabilityEndDate Internet content end selling date

    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    venue Venue String 255 Y
    language Event language String 255 Y
    synopsis Synopsis

    Description returned based on lang parameter
    Value is encoded using htmlEscape() for security purposes. The corresponding htmlUnescape() method must be invoked by client before usage
    String 255 Y
    bookingUrl URL to event booking page String 255 Y
    priceDescription Price description as in StixCloud configuration

    Description returned based on lang parameter
    Value is encoded using htmlEscape() for security purposes. The corresponding htmlUnescape() method must be invoked by client before usage
    String 1000 Y
    duration Show duration

    Description returned based on lang parameter
    Value is encoded using htmlEscape() for security purposes. The corresponding htmlUnescape() method must be invoked by client before usage
    String 1000 Y
    admissionRules Show admission rules

    Description returned based on lang parameter
    Value is encoded using htmlEscape() for security purposes. The corresponding htmlUnescape() method must be invoked by client before usage
    String 1000 Y
    salesDateText Sales date description

    Description returned based on lang parameter
    Value is encoded using htmlEscape() for security purposes. The corresponding htmlUnescape() method must be invoked by client before usage
    String 1000 -
    languageTitle Multi-language Title String 3000 Y
    updateDate Last changed date of internet content record

    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    languageVenue Venue description. String 4000 Y
    Name Description on attribute Data Type Length/Data Range Nullable
    rel Page id String 255 Y
    href Link to other page String 255 Y

    2.2 Get Event Show Date & Time

    Sample request:

    curl --request GET \
      --url https://api.stixcloud.com/api/v0/SISTIC/icc/lkc2015 \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json'
    

    The above command returns JSON structured like this:

    Status: 200. return list of available events info such as the exct event Show Date and Time as well as the availability status

    {
        "summaryImagePath": "/public/SISTIC/12-03-2018/1520849308453/Booking Summary.jpg",
        "sponsoredImagePath": "/public/SISTIC/12-03-2018/1520849308453/Sponsored imagepath.jpg",
        "icAttributesList": [
            "1",
            "2",
            "32",
            "512",
            "64"
        ],
        "promotionStatus": "0",
        "showTimingList": [
            {
                "productId": 270783,
                "showTitle": "Lee Kong Chian Natural History Museum (Jan20) (Group Ticket)",
                "showDateTime": "2020-01-01T20:00:00+08:00",
                "availabilityStatus": 16,
                "isPromo": false,
                "venue": "+博物馆Lee Kong Chian Natural History Museum",
                "ticketType": "GA"
            },
            {
                "productId": 270784,
                "showTitle": "Lee Kong Chian Natural History Museum (Jan20) (Normal Ticket)&",
                "showDateTime": "2020-01-02T20:00:00+08:00",
                "availabilityStatus": 19,
                "isPromo": false,
                "venue": "+博物馆Lee Kong Chian Natural History Museum",
                "ticketType": "GA"
            },
            {
                "productId": 270789,
                "showTitle": "Lee Kong Chian Natural History Museum (Jan20) (Group Ticket)",
                "showDateTime": "2020-01-03T20:00:00+08:00",
                "availabilityStatus": 19,
                "isPromo": false,
                "venue": "+博物馆Lee Kong Chian Natural History Museum",
                "ticketType": "GA"
            },
            {
                "productId": 270790,
                "showTitle": "Lee Kong Chian Natural History Museum (Jan20) (Normal Ticket)%",
                "showDateTime": "2020-01-04T20:00:00+08:00",
                "availabilityStatus": 19,
                "isPromo": false,
                "venue": "+博物馆Lee Kong Chian Natural History Museum",
                "ticketType": "GA"
            },
            {
                "productId": 268915,
                "showTitle": "M+ 博物馆",
                "showDateTime": "2038-06-22T00:00:00+08:00",
                "availabilityStatus": 19,
                "isPromo": false,
                "venue": "+博物馆Lee Kong Chian Natural History Museum",
                "ticketType": "GA"
            },
            {
                "productId": 254829,
                "showTitle": "Wonder Full – Light & Water Show",
                "showDateTime": "2052-10-30T12:00:00+08:00",
                "availabilityStatus": 19,
                "isPromo": false,
                "venue": "National Gallery Singapore",
                "ticketType": "GA"
            }
        ]
    }
    

    Errors

    Error: 400. This exception occurs when the Internet Content Code is invalid or expired.

    {
       "httpStatus":"400",
       "errorCode":" error.product.icc.invalid",
       "errorTime":"2017-07-01T16:53:26.535+08:00",
       "exceptionName":" com.stixcloud.common.exception.SisticApiException",
       "statusMessage":" Invalid Internet Content Code.",
       "url":"https://api.stixcloud.com/api/v0/SISTIC/icc/lkc20153"
    }
    

    Error: 500. Internal Server Error

    {
        "httpStatus": "500",
        "errorTime":"2017-07-01T16:53:26.535+08:00",
        "exceptionName":" java.lang.NullPointerException",
        "statusMessage": "NullPointerException.",
        "url" : "https://api.stixcloud.com/api/v0/SISTIC/icc/lkc20153"
    }
    

    For a given InternetContentCode, the API will return a list of available events info such as the exact event Show Date and Time as well as the availability status.

    2.2.1 Request

    You must replace tenant with your tenant code and internetContentCode retrieved from Get Events.

    2.2.2 Path Variables and Parameters

    Name Type Description
    tenant String [required] Tenant ID given
    internetContentCode Number [required] internet content code selected from "get event list" endpoint
    startDate Number [optional] Show date, default to system date, format YYYYMMDD
    numOfDays String [optional] Shows availability for number of day. Default to 31 if you pass in the startDate
    promoCode String [optional] Use for Private Link purpose.
    Note: Not in used for this module.

    2.2.3 Data Model

    2.2.3.1 Response Object

    Name Description on attribute Data Type Length/Data Range Nullable
    httpStatus Service response code
    Rules

    200, 400 or 500
    String 255 N
    statusMessage Service response status message String 255 Y
    url Service request url

    API endpoint
    String 255 Y
    exceptionName Exception class name String 255 Y
    exceptionCode Sistic defined exception code for multi-language purpose String 255 Y
    errorTime Exception datetime
    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+ -hh:mm (24hours)
    String 25 Y
    summaryImagePath Image for event String 255 Y
    icAttributesList Internet content attributes Array[String] 255 Y
    showTimingList List of product object List of Product JSON object - -
    advisory Advisory message for the event String Y
    promotionStatus To determine if private link is configured and to verify the validity of promocode if there is any.

    Note: Not in used for this module.

    Promo Status 0: Private Link is not being configured.

    Status 1:
    Valid PromoCode entered.
    Status 2:
    Invalid PromoCode entered.

    Status 3:
    Promo code is unavailable for the configured date range.
    String - -
    sponsoredImage Path Image of sponsored Note: Not in used for this module. String 255 Y

    2.2.3.1 Product Object

    Name Description on attribute Data Type Length/Data Range Nullable
    productId Product Id
    Unique key for product
    Number 10 N
    showTitle Show title String 255 N
    showDateTime Show date time
    ISO 8601 Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 N
    availabilityStatus Show availability
    availabilityStatus:20 => COMING SOON

    availabilityStatus:16 => SOLD OUT

    availabilityStatus:17 => SINGLE SEATS

    availabilityStatus:18 => LIMITED SEATS (Front End shows SELLING FAST)

    availabilityStatus:19 => AVAILABLE

    availabilityStatus:-6 => SHOW RECONFIG

    availabilityStatus:-7 => SHOW CANCELLED

    availabilityStatus:-8 => SHOW POSTPONED
    Number 10 Y
    ticketType Ticket type – GA or RS List of ticket Type Y
    venue Venue String 255 Y
    isPromo Is promo code valid or not
    Note: Not in used for this module.
    Boolean N

    2.3 Get Event Overview Seat Map

    To retrieve the event overview seat map based on the product ID. API will return the information such as Overview Seat Map Image, Price Category, Seat Section and also the coodinates for each section.

    Sample Request:

    curl --request GET \
      --url https://api.stixcloud.com/api/v0/{tenant}/products/{productId}/seatmap/overview \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json'
    

    The above command returns JSON structured like this:

    Status: 200. Retreive the event overview seat map based on the product ID

    {
        "hideStandardPrice": 0,
        "imageAvailable": 1,
        "interactive": 1,
        "mode": "SP",
        "imageURL": "/public/SISTIC/SeatmapMapping/3088/espl1805201930_Valentina_Lisitsa.jpg",
        "groupBookingMode": 0,
        "isMembership": 0,
        "seatSectionList": [
            {
                "priceCatAlias": "Cat 1",
                "priceCatAmount": {
                    "amount": 88,
                    "currency": "SGD",
                    "formatted": "$88.00"
                },
                "SeatLevel": [
                    {
                        "seatLevelAlias": "Foyer Stalls",
                        "seatSectionId": 128847,
                        "seatSectionAlias": "Foyer Stalls",
                        "seatSectionType": "RS",
                        "seatEntrance": "Door 2",
                        "priceCategoryNum": 1,
                        "priceCategoryId": 59158,
                        "price": {
                            "amount": 70.4,
                            "currency": "SGD",
                            "formatted": "$70.40"
                        },
                        "redeem": false,
                        "coordinatesList": [
    "564,874,565,862,573,851,589,842,609,836,627,834,649,834,669,838,670,849,662,855,655,866,642,864,627,863,604,869,592,879"
                        ]
                    },
                    {
                        "seatLevelAlias": "Foyer Stalls",
                        "seatSectionId": 128847,
                        "seatSectionAlias": "Foyer Stalls",
                        "seatSectionType": "RS",
                        "seatEntrance": "Door 1",
                        "priceCategoryNum": 1,
                        "priceCategoryId": 59158,
                        "price": {
                            "amount": 70.4,
                            "currency": "SGD",
                            "formatted": "$70.40"
                        },
                        "redeem": false,
                        "coordinatesList": [
    "564,874,565,862,573,851,589,842,609,836,627,834,649,834,669,838,670,849,662,855,655,866,642,864,627,863,604,869,592,879"
                        ]
                    }
                ]
            },
            {
                "priceCatAlias": "Cat 2",
                "priceCatAmount": {
                    "amount": 68,
                    "currency": "SGD",
                    "formatted": "$68.00"
                },
                "SeatLevel": [
                    {
                        "seatLevelAlias": "Circle 1",
                        "seatSectionId": 129804,
                        "seatSectionAlias": "Circle 1",
                        "seatSectionType": "RS",
                        "seatEntrance": "Door 3",
                        "priceCategoryNum": 2,
                        "priceCategoryId": 59159,
                        "price": {
                            "amount": 54.4,
                            "currency": "SGD",
                            "formatted": "$54.40"
                        },
                        "redeem": false,
                        "coordinatesList": [
    "532,549,551,554,552,542,564,529,576,522,590,516,601,513,619,512,631,513,645,516,658,520,660,507,638,503,620,502,601,502,586,504,574,507,562,511,551,517,541,527,534,537"
                        ]
                    },
                    {
                        "seatLevelAlias": "Circle 1",
                        "seatSectionId": 129804,
                        "seatSectionAlias": "Circle 1",
                        "seatSectionType": "RS",
                        "seatEntrance": "Door 4",
                        "priceCategoryNum": 2,
                        "priceCategoryId": 59159,
                        "price": {
                            "amount": 54.4,
                            "currency": "SGD",
                            "formatted": "$54.40"
                        },
                        "redeem": false,
                        "coordinatesList": [
    "532,549,551,554,552,542,564,529,576,522,590,516,601,513,619,512,631,513,645,516,658,520,660,507,638,503,620,502,601,502,586,504,574,507,562,511,551,517,541,527,534,537"
                        ]
                    }
                ]
            }
        ]
    }
    

    Errors:

    Http Code: 400. Error generating overview seatmap

    {
    "httpStatus": "400",
     "errorCode": "error.product.overview-seatmap.generation.fail",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName":"SisticApiInternalErrorException",
     "statusMessage": "Error generating overview seatmap.",
     "url" : "https://api.stixcloud.com/api/v0/SISTIC/products/973113/seatmap/overview"
    }
    

    Http Code: 500. Internal Server Error

    {
     "httpStatus": "500", 
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName":" java.lang.NullPointerException",
     "statusMessage": "NullPointerException: ",
     "url" : "https://api.stixcloud.com/api/v0/SISTIC/icc"
    }
    

    2.3.1 Request

    You must replace tenant with your Tenant code and productId retrieved from Get Event Show Date & Time

    2.3.2 Data model

    2.3.2.1 Response object

    Name Description on attribute Data Type Length / Data Range Nullable
    httpStatus Service response code

    400 or 500
    String 255 N
    statusMessage Service response status message String 255 Y
    url Service request url

    API endpoint
    String 255 Y
    exceptionName Exception class name String 255 Y
    exceptionCode Sistic defined exception code for multi-language purpose String 255 Y
    errorTime Exception datetime

    ISO 8601 Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    hideStandardPrice Flag to hide or show standard price

    0 for false, 1 for true
    Number 2 Y
    imageAvailable Flag to indicate the availability of seat map image

    0 for false, 1 for true
    Number 2 Y
    interactive Flag for Interactive mode for seat selection

    0 for false, 1 for true
    Number 2 Y
    mode Seat selection String 10 Y
    imageURL URL to seat map String 100 Y
    seatSectionList List of Seat section object List of seatMap Json Object - Y
    groupBookingMode Flag for Group Booking Module.
    Note: Not in used for this module.

    0 for false, 1 for true
    Number
    isMembership Flag for Membership Module.
    Note: Not in used for this module.

    0 for false, 1 for true
    Number

    2.3.2.2 SeatMap object

    Name Description on attribute Data Type Length / Data Range Nullable
    priceCatAlias Service response code String 100 Y
    seatLevel List of Seat level object List of seatLevel JSON object - -
    priceCatAmount Price category amount Monetary JSON object - -

    2.3.2.3 SeatLevel object

    Name Description on attribute Data Type Length / Data Range Nullable
    seatLevelAlias level code String 100 Y
    SeatSectionId section id

    Unique key for seat section
    Number 10 N
    seatSectionAlias section code String 100 Y
    seatSectionType Section type String 100 Y
    seatEntrance Entrance door number String 255 Y
    priceCategoryNum Price category number Number 10 Y
    priceCategoryId Price category id

    Unique key for seat section
    Number 10 N
    price Monetary JSON object Monetary JSON object - N
    redeem Flag for ticket redeem Boolean 5 Y
    coordinatesList Seat Section coordinates for mapping purpose.
    Note: Require backend configuration.
    List - Y

    2.3.2.3 Monetary Object

    Name Description on attribute Data Type Length / Data Range Nullable
    amount Amount Number 10 N
    currency Currency code

    Default to SGD for SISTIC Tenant.
    Number 3 N
    formatted Formatted amount String 100 Y

    2.4 Get Seat Section Availability

    Each event may consist of multiple seat section, this API endpoint will return the Availability Status on all section for a given product ID. Supported Seat Section Availability Status:

    Sample Request:

    curl --request GET \
      --url 'https://api.stixcloud.com/api/v0/SISTIC/products/973113/seatmap/availability' \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json'
    

    The above command returns JSON structured like this:

    Status: 200. Return the Availability Status on all section for a given product ID

    [
        {
            "seatSectionId": 129804,
            "priceCategoryId": 59165,
            "seatSectionAvailability": 0
        },
        {
            "seatSectionId": 129804,
            "priceCategoryId": 59164,
            "seatSectionAvailability": 0
        },
        {
            "seatSectionId": 129801,
            "priceCategoryId": 59160,
            "seatSectionAvailability": 2
        },
        {
            "seatSectionId": 128844,
            "priceCategoryId": 59158,
            "seatSectionAvailability": 1
    }
    ]
    

    Errors

    Status: 500. Internal Server Error

    {
     "httpStatus": "500", 
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName":" java.lang.NullPointerException",
     "statusMessage": "NullPointerException: ",
     "url" : "https://api.stixcloud.com/api/v0/SISTIC/icc"
    }
    

    2.4.1 Request

    You must replace {tenant} with your Tenant code and {productId} retrieved from Get Event Show Date & Time

    2.4.2 Path Variables and Parameters

    Name Type Description
    tenant String [required] tenant id given
    productId Number [required] Unique identifier to identify each product.
    promoCode String [optional] Use for Private Link purpose. Note: Not in used for this module.

    2.4.3 Data model

    2.4.4.1 Response object

    Name Description on attribute Data Type Length / Data Range Nullable
    httpStatus Service response code

    500
    String 255 N
    statusMessage Service response status message String 255 Y
    url Service request url

    API endpoint
    String 255 Y
    exceptionName Exception class name String 255 Y
    exceptionCode Sistic defined exception code for multi-language purpose String 255 Y
    errorTime Exception datetime

    ISO 8601 Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    seatAvailibilityList List of seatAvailability object List of seatAvailibility JSON object - -

    2.4.4.2 Seat Section Availability object

    Name Description on attribute Data Type Length / Data Range Nullable
    seatSectionId Seat Section Details Number 10 N
    priceCategoryId Price Category Details Number 10 Y
    seatSectionAvailability Seat Availability Status code

    0 => Sold Out
    1 => Available
    2 => Limited Seats
    3 => Single Seat
    Number 10 N

    2.5 Seat Offer (Applicable for Reserved Seating Event Only)

    The Seat Offer API support the following two Seat Offer Mode:

    BA (Best Avalaible) Mode The system will perform a look up based on best seat ranking to offer 2 SET of seats. For instance, if the chosen Quantity is 2, system will offer you 2 set of 2 seats which is a total number of 4 seats.

    HS (Hot Show) Mode If you are looking for the exact Quantity of seat offer mechanism you may consider HS mode which offer you exactly 1 set of seat(s).

    Sample Request:

    curl --request GET \
      --url 'https://api.stixcloud.com/api/v0/{tenant}/products/{productId}/seatmap/availability?priceCatId={priceCatId}&seatSectionId={seatSectionId}&mode={mode}&quantity={quantity}' \
      --header 'authorization: Bearer <Acess-Token>' \
      --header 'content-type: application/json'
    

    The above command returns JSON structured like this:

    Status: 200. Seat Offer

    {
        "reservedTime": "2018-04-03T15:03:20.451+08:00",
        "imageAvailable": 1,
        "viewFromSeatAvailable": 0,
        "seatSelectedType": "IO",
        "imageURL": "/public/SISTIC/SeatmapMapping/3088/EsplanadeConcertHall_FoyerStalls_Cat4.jpg",
        "overlayImagePath": "/SisticWebApp/images",
        "setsReservedList": [
            {
                "setsReserved": [
                    {
                        "inventoryId": 178886000,
                        "seatRowAlias": "DD",
                        "seatAlias": "46",
                        "seatType": 1,
                        "topLeftCoordinates": "645,310",
                        "seatAngle": "310",
                        "coordinates": "656,310,645,324,659,336,670,322",
                        "isGroupBookingReserved": false
                    }
                ]
            },
            {
                "setsReserved": [
                    {
                        "inventoryId": 178885981,
                        "seatRowAlias": "DD",
                        "seatAlias": "47",
                        "seatType": 1,
                        "topLeftCoordinates": "656,297",
                        "seatAngle": "310",
                        "coordinates": "667,297,656,310,670,322,681,309",
                        "isGroupBookingReserved": false
                    }
                ]
            }
        ],
        "seatsAvailableList": [],
        "seatsUnavailableList": [],
        "groupBookingSeatList": [],
        "sectionAlias": "Foyer Stalls"
    } 
    

    Errors

    Http Code: 400. Note: This exception occurs when system is busy allocating seat and hit the timeout ratio.

    {
    "httpStatus": "400",
     "errorCode": "error.product.detail-seatmap.system-allocation-busy",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName":"SisticApiInternalErrorException",
     "statusMessage": "System is busy allocating seat the seat please try again",
     "url" : "https://api.stixcloud.com/api/v0/SISTIC/products/973113/seatmap/availability"
    }
    

    Http Code: 400. Note: This exception occurs when system detects there is a missing coordinate due to config issue

    {
    "httpStatus": "400",
     "errorCode": "error.product.detail-seatmap.generation.coordinate.missing",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName":"SisticApiInternalErrorException",
     "statusMessage": "Missing seatmap properties - coordinates"
       "url" : "https://api.stixcloud.com/api/v0/SISTIC/products/973113/seatmap/availability"
    }
    

    Http Code: 400. Note: This exception occurs when system detects there is a missing SEAT ANGLE due to config issue.

    {
     "httpStatus": "400",
     "errorCode": "error.product.detail-seatmap.generation.seatangle.missing",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName":"SisticApiInternalErrorException",
     "statusMessage": "Missing seatmap properties - seat angles"
     "url" : "https://api.stixcloud.com/api/v0/SISTIC/products/973113/seatmap/availability"
    }
    

    Http Code: 500. Internal Server Issue

    {
     "httpStatus": "500", 
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName":" java.lang.NullPointerException",
     "statusMessage": "NullPointerException: ",
     "url" : "https://api.stixcloud.com/api/v0/SISTIC/icc"
    }
    

    2.5.1 Request

    You must replace tenant with your Tenant code and productId retrieved from Get Event Show Date & Time

    Supply additional required/optional parameters for the http request, priceCatId, seatSectionId, mode, quantity and promoCode.

    2.5.2 Path Variables and Parameters

    Name Type Description
    tenant String [required] tenant id given
    productId Number [required] Unique identifier to identify each product.
    priceCatId Number [required] Price Category ID of a product. This value can be obtained through the Get Event Overview Seat API call.
    seatSectionId Number [required] Seat Section ID of a product. This value can be obtained through the Get Event Overview Seat API call.
    mode String [required] Two supported mode which is "BA" or "HS"
    quantity Number [required] Number of seats you wish to get.
    promoCode String [optional] Use for Private Link purpose.
    Note: Not in used for this module.

    2.5.3 Data model

    2.5.3.1 Response object

    Name Description on attribute Data Type Length / Data Range Nullable
    httpStatus Service response code String 255 N
    statusMessage Service response status message String 255 Y
    url Service request url String 255 Y
    exceptionName Exception class name String 255 Y
    exceptionCode Sistic defined exception code for multi-language purpose String 255 Y
    errorTime Exception datetime String 25 Y
    imageAvailable Flag to indicate if Detail Seat Map is available Number - -
    imageURL Detail Seat Map Image URL String
    overlayImagePath Note: Not in used for this module. String
    seatSelectedType Note: Not in used for this module. String
    setsReservedList List of Reserved Seat(s) Info JSON object
    seatsAvailableList List of Available Seat(s) Info JSON object
    seatsUnavailableList List of Unavailable Seat(s) Info JSON object
    groupBookingSeatList List of Group Booking Seat(s)
    Note: Not in used for this module.
    JSON object
    sectionAlias Section Name String
    reservedTime The time when seats are being reserved in the system.
    ISO 8601 Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    viewFromSeatAvailable Note: Not in used for this module. Number

    2.5.3.2 setsReservedList object

    Name Description on attribute Data Type Length / Data Range Nullable
    setsReserved List of seat information JSON object -

    2.5.3.3 Seat object

    Name Description on attribute Data Type Length / Data Range Nullable
    inventoryId Inventory id Number
    seatRowAlias Seat Row Alias String
    seatAlias Seat Alias String
    seatType Seat type Number
    topLeftCoordinates Seat coordinates from top left String
    seatAngle Seat angle Number
    coordinates Seat coordinates String 255
    isGroupBookingReserved Is Seat reserved for group booking
    Note: Not in used for this module.
    Boolean 2

    2.5.3.4 SeatUnavailable object

    Name Description on attribute Data Type Length / Data Range Nullable
    topLeftCoordinates Top Left coordinates for the seat String
    seatAngle Seat angle Number
    coordinates Seat coordinates String

    2.6 Release Seat (Applicable for Reserved Seating Event only)

    This API endpoint is only used when you need to release a particular reserved seat. This could happen when you make a SEAT OFFER API called in BA mode which you will get 2 set of seats and you only need to retain 1 set, so you will need to call this Release Seat API endpoint to release another set of reserved seats by passing in the Seat Inventory ID.

    Sample Request:

    curl --request POST \
      --url https://api.stixcloud.com/api/v0/{tenant}/products/{productID}/seats \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json' \
      --data '  {
          "releasedSeatList":[178884948]
      }'
    

    The above command returns JSON structured like this:

    Status: 200. Release seats successfully

    {
      "status" : 0,
      "statusMessage" : "SUCCESS",
      "reservedTime" : "2018-04-02T21:32:46.014+08:00" 
    }
    

    Status: 200. Release seats unsuccesfull

    {
    "status": "1",
    "statusMessage": "Error releasing seats",
    }
    

    2.6.1 Request

    You must replace tenant with your tenant code and productId retrieved from Get Events API

    2.6.2 Path Variables and Parameters

    Name Type Description
    tenant String [required] tenant id given
    productId Number [required] Unique identifier to identify each product.

    2.6.3 Request Body

    List of seat inventory ID to be released in json format. { "releasedSeatList":[131833481] }

    2.6.4 Data model

    2.6.4.1 Response object

    Name Description on attribute Data Type Length / Data Range Nullable
    reservedTime Seat reserved time String Y
    statusMessage Service response status message String 255
    status Service response status String

    2.7 Get Ticket Type

    This API end point will return all the available Ticket Pricing tie to this particular channel as well as the configured booking fee (service fee).

    Sample Request

    curl --request GET \
      --url 'https://api.stixcloud.com/api/v0/{tenant}/products/{productID}/tickettype?priceCatId=52632' \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json'
    

    The above command returns JSON structured like this:

    Status: 200. Retreive the event overview seat map based on the product ID

    [
        {
            "priceClassId": 378981,
            "priceClassCode": "L",
            "priceClassAlias": "Early Bird",
            "priceValueAmount": {
                "amount": 38.4,
                "currency": "SGD",
                "formatted": "$38.40"
            },
            "availableQty": "1,2,3,4,5,6,7,8,9,10,11,12",
            "passwordRequired": 0,
            "feeList": [
                {
                    "code": "Service Fee",
                    "charge": {
                        "amount": 3,
                        "currency": "SGD",
                        "formatted": "$3.00"
                    }
                }
            ]
        },
        {
            "priceClassId": 378981,
            "priceClassCode": "L",
            "priceClassAlias": "Early Bird",
            "priceValueAmount": {
                "amount": 70.4,
                "currency": "SGD",
                "formatted": "$70.40"
            },
            "availableQty": "1,2,3,4,5,6,7,8,9,10,11,12",
            "passwordRequired": 0,
            "feeList": [
                {
                    "code": "Service Fee",
                    "charge": {
                        "amount": 4,
                        "currency": "SGD",
                        "formatted": "$4.00"
                    }
                }
            ]
        },
        {
            "priceClassId": 378981,
            "priceClassCode": "L",
            "priceClassAlias": "Early Bird",
            "priceValueAmount": {
                "amount": 46.4,
                "currency": "SGD",
                "formatted": "$46.40"
            },
            "availableQty": "1,2,3,4,5,6,7,8,9,10,11,12",
            "passwordRequired": 0,
            "feeList": [
                {
                    "code": "Service Fee",
                    "charge": {
                        "amount": 4,
                        "currency": "SGD",
                        "formatted": "$4.00"
                    }
                }
            ]
        },
        {
            "priceClassId": 378981,
            "priceClassCode": "L",
            "priceClassAlias": "Early Bird",
            "priceValueAmount": {
                "amount": 70.4,
                "currency": "SGD",
                "formatted": "$70.40"
            },
            "availableQty": "1,2,3,4,5,6,7,8,9,10,11,12",
            "passwordRequired": 0,
            "feeList": [
                {
                    "code": "Service Fee",
                    "charge": {
                        "amount": 4,
                        "currency": "SGD",
                        "formatted": "$4.00"
                    }
                }
            ]
        }
    ]
    

    Errors

    Error Code 400: Invalid Package Type Class Type

    {
     "httpStatus": "400",
     "errorCode": "error.product.package.classtype.invalid",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "exceptionName":"SisticApiException",
     "statusMessage": "Invalid Package Class Type.",
     "url" : "https://api.stixcloud.com/api/v0/SISTIC/products/270784/tickettype"
    }
    

    Error Code 500: Internal System Error

    {
     "httpStatus": "500",
     "errorCode": "error.sistic.internal",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
      "exceptionName":"SisticApiException",
     "statusMessage": "Internal system error. Please try again later",
     "url" : "https://api.stixcloud.com/api/v0/SISTIC/products/270784/tickettype"
    }
    

    2.7.1 Request

    You must replace tenant with your tenant code and productId retrieved from Get Events API

    2.7.2 Path Variables and Parameters

    Name Type Description
    tenant String [required] Tenant ID given
    productId Number [required] Unique identifier to identify each product.
    priceCatId Number [Optional] Price Category ID of a product. This value can be obtained through the Get Event Overview Seat API
    promoCode String [Optional] Use for Private Link purpose.
    Note: Not in used for now

    2.7.3

    2.7.3.1 Response Object

    Name Description on attribute Data Type Length / Data Range Nullable
    priceClassList List of price class details

    200,400 or 500
    List of priceClass object - N
    httpStatus Service response code String 255
    statusMessage Service response status message String 255 Y
    url Service request url

    API endpoint
    String 255 Y
    exceptionName Exception class name String 255 Y
    exceptionCode Sistic defined exception code for multi-language purpose String 255 Y
    errorTime Exception datetime

    ISO 8601 Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y

    2.7.3.2 PriceClass Object

    Name Description on attribute Data Type Length / Data Range Nullable
    priceClassCode Price class code String 255 N
    priceClassAlias Price class alias String 255 Y
    priceValueAmount Unit price JSON Monetary Object - N
    feeList List of fee object List of fee JSON Object - Y
    availableQty String 255 Y
    priceClassId Price Class ID Long N
    passwordRequire Flag to indicate if the price class require to input password.

    Note: In development.
    Integer Y

    2.7.3.3 Fee Object

    Name Description on attribute Data Type Length / Data Range Nullable
    code Fee code String 255 N
    charge Monetary object Monetary JSON object 10 N

    2.7.3.4 Monetary Object

    Name Description on attribute Data Type Length / Data Range Nullable
    amount Amount Number 10 N
    currency Currency code

    Default to SGD for SISTIC Tenant.
    Number 3 N
    formatted Formatted amount String 100 Y

    2.8 Submit Pre Payment Order

    Submit purchase order and reserved seat for selected events. SISTIC will calculate total amount to be paid and validate against passed in amount. Client is required making payment at its side and calls other endpoint (confirm order) to secure the order and seats.

    The following steps will be carried out by this endpoint:

    1. Create patron account. Reuse existing patron account number if email existed in SISTIC.
    2. If submitted mode has value of type "",
      2.1. Check for seat availability and throw error if seat is not available.
      2.2. Allocate and reserve seats.
    3. If submitted mode has value of type "BA/HS/SP"
      3.1. Pass in a list of valid seatInventoryIds
    4. Validate total amount of cart items. Throw error if amount not match.
    5. Return invoice with transaction reference number and amount to be paid.

    Sample Request

    curl --request POST \
      --url https://api.stixcloud.com/api/v0/SISTIC/orders/ \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json' \
      --data '{
      "externalTransactionId": "{externalTransactionID}",
      "patronInfo":{
          "patronType":"G"
       },
      "cartItemList": [
        {
          "productId": 967298,
          "seatSectionId": 128916,
          "priceCatId": 52632,
          "mode": "",
          "priceClassList": [
            {
              "priceClassCode": "A",
              "quantity": 1,
              "subTotal": {
                "amount": 20,
                "currency": "SGD"
              }
            }
          ],
          "productTotal": {
            "amount": 21,
            "currency": "SGD"
          }
        }
      ],
      "deliveryMethod": {
        "code": "E_TICKET",
        "charge": {
          "amount": 0.0,
          "currency": "SGD"
        }
      },
      "cartItemTotal": {
        "amount": 21,
        "currency": "SGD"
      }
    }
    '
    

    The above command returns JSON structured like this:

    Status: 200. Submit purchase order and reserved seat for selected events.

    {
        "httpStatus": "200",
        "statusMessage": "Pending for payment",
        "accountNo": "5089412",
        "externalTransactionId": "14QCass2",
        "transactionRefNo": "20180326-000040",
        "timeLeftSeconds": 15,
        "lineItemList": [
            {
                "product": {
                    "productId": 270784,
                    "productName": "Lee Kong Chian Natural History Museum (Jan20) (Normal Ticket)&",
                    "productDate": "2020-01-02T20:00:00+08:00",
                    "level": "-",
                    "section": "General Admission",
                    "seatNo": [],
                    "productType": "GA",
                    "venue": "+博物馆Lee Kong Chian Natural History Museum"
                },
                "priceclass": {
                    "priceClassCode": "A",
                    "priceClassName": "Standard Adult"
                },
                "quantity": 1,
                "unitPrice": {
                    "amount": 20,
                    "currency": "SGD",
                    "formatted": "$20.00"
                },
                "feeList": [
                    {
                        "code": "BOOKING",
                        "charge": {
                            "amount": 0,
                            "currency": "SGD",
                            "formatted": "$0.00"
                        }
                    }
                ],
                "subTotal": {
                    "amount": 20,
                    "currency": "SGD",
                    "formatted": "$20.00"
                },
                "cartItemId": "5362033d-9d2d-43b0-bb08-1dc5c614fd97"
            }
        ],
        "deliveryMethod": {
            "code": "E_TICKET",
            "charge": {
                "amount": 0,
                "currency": "SGD",
                "formatted": "$0.00"
            },
            "order": 7,
            "addressRequired": false,
            "feeWaived": false
        },
        "totalLineItems": 1,
        "lineItemTotal": {
            "amount": 20,
            "currency": "SGD",
            "formatted": "$20.00"
        }
    }
    

    Errors

    Error Code: 400. Seats not available for product:{productId}

    {
       "httpStatus":"400",
       "errorCode":"error.cart.order.seat.not-available",
       "errorTime":"2017-07-01T16:53:26.535+08:00",
       "exceptionName":"SisticApiException",
       "statusMessage":"Seats not available for product:261704",
       "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"   
    }
    

    Error Code: 400. Note: This exception occurs when there is a product amount mismatch

    {
       "httpStatus":"400",
       "errorCode":"error.cart.order.product-total-amount.mismatch",
       "errorTime":"2017-07-01T16:53:26.535+08:00",
       "params": {
            "productId": "261704",
            "lineItemTotal": "SGD 92"
        },
       "exceptionName":"SisticApiException",
       "statusMessage":"Product total amount mismatch for product: 261704, expected amount is SGD 92.00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note: Generic Exception might due to empty object Cart Total amount or delivery method.

    {
       "httpStatus":"400",
       "errorCode":"error.cart.order.generic",
       "errorTime":"2017-07-01T16:53:26.535+08:00",
       "exceptionName":"SisticApiException",
       "statusMessage": "Failed to process your order. Please try again later.",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note: This exception occurs when there is a delivery amount mismatch.

    {
        "httpStatus": "400",
        "errorCode": "error.cart.order.delivery-charge.mismatch",
        "params": {
            "lineItemTotal": "SGD 0.5"
        },
        "exceptionName": "com.stixcloud.common.exception.SisticApiException",
        "statusMessage": "Delivery charge not matched. Expected delivery fee is SGD 0.5",
        "errorTime": "2018-04-03T15:15:51.58+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note: The exception occurs when patron type is null or not (G or T)

    {
        "httpStatus": "400",
        "exceptionName": "org.springframework.web.bind.MethodArgumentNotValidException",
        "statusMessage": "Patron type is null or invalid.",
        "errorTime": "2018-04-16T15:24:48.984+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note : This exception occurs when password is null or empty for the individual account.

    {
        "httpStatus": "400",
        "exceptionName": "org.springframework.web.bind.MethodArgumentNotValidException",
        "statusMessage": "Patron password is invalid.",
        "errorTime": "2018-04-16T15:38:17.97+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note: This exception occurs when patron email is null or empty for the guest account

    {
        "httpStatus": "400",
        "exceptionName": "org.springframework.web.bind.MethodArgumentNotValidException",
        "statusMessage": "Patron email is null or invalid.",
        "errorTime": "2018-04-16T15:27:25.53+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note : This exception occurs when list of cart line items of request is null or empty

    {
        "httpStatus": "400",
        "exceptionName": "org.springframework.web.bind.MethodArgumentNotValidException",
        "statusMessage": "The list of cart line items are null or empty.",
        "errorTime": "2018-04-16T15:42:02.314+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note : This exception occurs when total cart items is null in request

    {
        "httpStatus": "400",
        "exceptionName": "org.springframework.web.bind.MethodArgumentNotValidException",
        "statusMessage": "The total cart items is invalid.",
        "errorTime": "2018-04-16T15:43:59.422+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note: This exception occurs when delivery method is null in request

    {
        "httpStatus": "400",
        "exceptionName": "org.springframework.web.bind.MethodArgumentNotValidException",
        "statusMessage": "Delivery method is invalid.",
        "errorTime": "2018-04-16T15:45:16.679+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note: This error is returned when externalTransactionId is already submitted. One externalTransactionId cannot be tied to multiple transactions

    {
        "httpStatus": "400",
        "errorCode": "error.cart.order.external.transaction.submitted",
        "exceptionName": "com.stixcloud.common.exception.SisticApiException",
        "statusMessage": "External transaction id is already submitted",
        "errorTime": "2018-04-24T17:22:42.505+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    Error Code: 400. Note: This error occurs when productid and list of inventory id mismatch

    {
        "httpStatus": "400",
        "errorCode": "error.cart.product.inventory-id.mismatch",
        "exceptionName": "com.stixcloud.cart.AddToCartException",
        "statusMessage": "Product id and Inventory Id values mismatch.",
        "errorTime": "2018-04-27T11:06:47.104+07:00",
        "url": "http://localhost:8082/api/v0/SISTIC/orders"
    }
    

    Error Code: 400. Note: This error occurs when delivery method code mismatch with the code of system

    {
        "httpStatus": "400",
        "errorCode": "error.cart.order.delivery-method.invalid",
        "exceptionName": "com.stixcloud.common.exception.SisticApiException",
        "statusMessage": "Delivery method is invalid.",
        "errorTime": "2018-04-27T13:55:24.32+07:00",
        "url": "http://localhost:8082/api/v0/SISTIC/orders"
    }
    
    

    Error Code: 400. Note : This error occurs when product id or section type was not exist in the system

    {
        "httpStatus": "400",
        "exceptionName": "com.stixcloud.cart.AddToCartException",
        "errorTime": "2018-04-27T14:00:59.943+07:00",
        "url": "http://localhost:8082/api/v0/SISTIC/orders"
    }
    

    Error Code: 400. Note : This error occurs when seatSectionId or priceCatId mismatch with the system

    {
        "httpStatus": "400",
        "errorCode": "error.cart.inventory.seat.insufficient",
        "exceptionName": "com.stixcloud.cart.AddToCartException",
        "statusMessage": "Failed to find seats for GA.",
        "errorTime": "2018-04-27T14:03:49.344+07:00",
        "url": "http://localhost:8082/api/v0/SISTIC/orders"
    }
    

    Error Code: 400. Note :For mode RS, this error occurs when priceCartID mismatch with the system

    {
        "httpStatus": "400",
        "errorCode": "error.cart.postcommit.generic",
        "exceptionName": "com.stixcloud.cart.AddToCartException",
        "statusMessage": "Validate price model template failed!",
        "errorTime": "2018-04-27T14:25:51.346+07:00",
        "url": "http://localhost:8082/api/v0/SISTIC/orders"
    }
    

    Error Code: 500. Note: this error is returned when there is an error which is not hanlded like connection to redis is failed

    {
        "httpStatus": "500",
        "exceptionName": "org.springframework.data.redis.RedisConnectionFailureException",
        "statusMessage": "SocketTimeoutException: Read timed out",
        "errorTime": "2018-04-24T18:26:50.113+07:00",
        "url": "https://api.stixcloud.com/api/v0/SISTIC/orders/"
    }
    

    2.8.1 Request

    You must replace tenant with your tenant code

    2.8.2 Path Variables and Parameters

    Name Type Description
    tenant String [required] Tenant Id given

    2.8.3 Additional Notes

    2.8.4 Data model

    2.8.4.1 Request Object

    Name Description on attribute Data Type Length / Data Range Nullable
    externalTransactionId Client transaction id for future tracking and maintenance purpose

    It is to indicate the transaction created by 3rd party
    String 25 Y
    patronInfo Patron information

    Carry information of user who submitting order. Patron can be a registered user (Individual), guest or anonymous user (Guest)
    JSON object - N
    cartItemList List of cartItemObject Array List - N
    cartItemTotal Monetary object

    Carry the total value of order and is used to check with calculated value based on item list
    JSON object - N
    deliveryMethod Delivery method

    Requested delivery method code
    Json object N

    2.8.4.2 patronInfo Object

    Name Description on attribute Data Type Length / Data Range Nullable
    patronType Patron Account Type

    Accept either two values: G for guest account
    I for individual account
    String - N
    accountNo Sistic patron account no
    Account no given by SISTIC
    String 25 Y
    email Customer email address
    Unique key for patron profile. Email can be omitted if patron type is Guest. (For guest account email can be null)

    If email and external customer id found in the system, SISTIC will reuse the same patron account.
    String 75 N
    password Password to create SISTIC web account

    required for individual account
    String 255 Y
    firstName Given name

    optional for individual account
    String 100 Y
    lastName Family Sir Name

    optional for individual account
    String 100 Y
    contacts List of Contact number object List of JSON object - Y

    2.8.4.3 contact Object

    Name Description on attribute Data Type Length / Data Range Nullable
    contactType Contact type for mobile String 25 N
    country Country object JSON object - Y
    areaCode Phone area code String 100 Y
    phoneNumber Phone number String 100 N

    2.8.4.4 country Object

    Name Description on attribute Data Type Length / Data Range Nullable
    code Country code String 5 N
    callingCode Country calling code String 5 N

    2.8.4.5 cartItemList Object

    Name Description on attribute Data Type Length / Data Range Nullable
    productId Product ID String 5 N
    seatSectionId Seat section id Number 10 N
    priceCatId Price category id Number 10 N
    mode Seat selected mode
    Default to BA
    String 5 Y
    priceClassList List of priceClass Object Array List - Y
    productTotal Total amount of ticket.

    Expected total amount of ticket.
    System will throw error if amount do not reconcile in SISTIC Booking Engine
    JSON Monetary Object - N
    seatInventoryIds Seat inventory id Array List

    2.8.4.6 priceClass Object

    Name Description on attribute Data Type Length / Data Range Nullable
    priceClassCode Price class code String 5 N
    quantity quantity of ticket per price class Number 10 N
    subtotal Subtotal for price class

    subtotal of value getting from "get ticket type" endpoint (priceValueAmount + fee) * quantity
    JSON Monetary Object - N

    2.8.4.7 monetary Object

    Name Description on attribute Data Type Length / Data Range Nullable
    amount Number 10 N
    currency Currency Code

    Default to SGD
    String 5 N

    2.8.4.8 Response Object

    Name Description on attribute Data Type Length / Data Range Nullable
    httpStatus Service response code

    200, 400 or 500
    String 255 N
    statusMessage Service response status message

    Default “pending for payment”
    String 255 Y
    exceptionName Exception class name

    Available in response when there is any errors processing request
    String 255 Y
    errorCode Sistic defined exception code for multi-language purpose

    Available in response when there is any errors processing request
    String 255 Y
    externalTransactionId Client transaction id for future tracking and maintenance purpose String 25 Y
    accountNo Sistic patron account no String 25 N
    transactionRefNo Transaction Reference No

    Unique key. Sistic generated transaction no
    String 255 N
    errorTime Exception datetime
    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 25 Y
    timeLeftSeconds Transaction timeup time Number 10 N
    lineItemList Cart item separated by product, price class and seat row number per item JSON cartItem object - N
    totalLineItems Total line item Number 10 N
    lineItemTotal Total amount of line item JSON Monetary object - N
    deliveryMethod delivery method details

    Default to E_TICKET for now
    deliveryMethod object - Y
    params List of additional information to display error messages when there is error

    Available in response when there is any errors processing request
    Y

    2.8.4.9 cartItem Object

    Name Description on attribute Data Type Length / Data Range Nullable
    product Product details JSON productDetail object - N
    priceClass PriceClass object JSON priceClass object - N
    quantity Ticket quantity Number 10 N
    unitPrice Unit price for ticket JSON Monetary object - N
    feeList List of fee List of fee JSON object - Y
    subTotal Subtotal for price class
    Summation of ticket

    (unitPrice + bookingFee) * quantity
    JSON Monetary object - N
    cartItemId Unique identifier of shopping cart String N
    bookingFee Also known as service fee Object N

    2.8.4.10 productDetail Object

    Name Description on attribute Data Type Length / Data Range Nullable
    productId Product Id Number - N
    productName Product Name String 255 Y
    productDate Product Date
    ISO 8601
    Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 100 N
    level Venue Seating Level String 25 Y
    section Venue Seating Section String 255 Y
    row Seat row number String 25 N
    seatNo Seat number Array - N
    productType Product Type String 25 Y
    venue Venue String 255 N

    2.8.4.11 priceClass Object

    Name Description on attribute Data Type Length / Data Range Nullable
    priceClassCode Price class code String 255 N
    priceClassName Price class name String 255 Y

    2.8.4.12 fee Object

    Name Description on attribute Data Type Length / Data Range Nullable
    code Booking fee code String - N
    charge JSON of monetary object Monetary JSON object - N

    2.8.4.13 deliveryMethod Object

    Name Description on attribute Data Type Length / Data Range Nullable
    code Delivery method code String 100 N
    charge Delivery amount JSON Monetary object - N
    order Ordering Number Number N
    addressRequired Flag to indicate if address is required.

    Default value is false since E_TICKET is default deliver method
    Boolean N
    feeWaived Flag to indicate if the fee waiver is required. Boolean N

    2.8.4.13 monetary Object

    Name Description on attribute Data Type Length / Data Range Nullable
    amount Amount Number 10 N
    currency Currency code String 25 N
    formatted Formatted amount String 255 N

    2.9 Confirm/Cancel Order

    Confirm order after receiving the payment or cancel the order.

    Sample Request: Confirm Order

    curl --request POST \
      --url 'https://api.stixcloud.com/api/v0/SISTIC/orders/{transactionRefNo}?=' \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json' \
      --data '{
       "confirmOrder":true,
       "payment":{
          "paymentRefNo":"20180425-123456",
          "paymentMethod":"VISA",
           "charge":{
             "amount":21.0,
             "currency":"SGD"
          }
       }
    }'
    

    The above command returns JSON structured like this:

    Status: 200. Confirm Order

    {
        "httpStatus": "200",
        "statusMessage": "Order with ref no.20180427-000023 confirmed.",
        "transactionDateTime": "2018-04-27T10:07:40+07:00",
        "deliveryMethod": {
            "code": "E_TICKET",
            "eticketURL": [
                "http://sistic.stixclouduat.com/Stix/pac/acs/downloadEticket.htm?linkId=C3KjceMYMZ"
            ]
        },
        "barcode": {
            "178722432": "45573530839",
            "178722433": "45573530339"
        }
    }
    

    Sample Request:

    curl --request POST \
      --url 'https://api.stixcloud.com/api/v0/SISTIC/orders/{transactionRefNo}?=' \
      --header 'authorization: Bearer <Access-Token>' \
      --header 'content-type: application/json' \
      --data '{
       "confirmOrder":false,
       "payment":{
          "paymentRefNo":"20180425-123456",
          "paymentMethod":"VISA",
           "charge":{
             "amount":21.0,
             "currency":"SGD"
          }
       }
    }'
    

    The above command returns JSON structured like this:

    Status: 200. Cancel Order

    {
       "httpStatus":200,
       "statusMessage ":"Order with ref no. 20180402-000017 cancelled ",
       "transactionDateTime":"2016-06-28T03:00:00+08:00"
    }
    

    Errors

    Error Code 400. Note: This exception occurs when cart is not found or expired.

    {
     "httpStatus": "400",
     "errorCode": "error.cart.order.not-found-expired",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
     "params": {
            "transactionRefNo": "20180405-000024"
        },
     "exceptionName":"SisticApiException",
     "statusMessage": "Order ref no. 20180402-000017 not found or expired."
    }
    

    Error Code 400. Note: This exception occurs when paid amount mismatch.

    {
     "httpStatus": "400",
     "errorCode": "error.cart.order.paid-amount.mismatch",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
       "params": {
            "lineItemTotal": "358.5",
            "transactionRefNo": "20180405-000024 "
        },
       "exceptionName":"SisticApiException",
     "statusMessage": "Order ref no 20180405-000024 paid amount mismatch, expected amount is 358.5"
    }
    

    Error Code 400. Note: This error is returned when an oder reference number is submitted (confirm or cancel) again. An order is valid to submit if the transaction status is PENDING

    {
     "httpStatus": "400",
     "errorCode": "error.cart.order.transaction.submitted",
     "errorTime":"2017-07-01T16:53:26.535+08:00",
       "params": {
            "lineItemTotal": "358.5",
            "transactionRefNo": "20180405-000024 "
        },
       "exceptionName":"SisticApiException",
     "statusMessage": "Order ref no. 20180405-000024 is already submitted"
    }
    

    Error Code 400. Note: This error is returned when an order is using an invalid payment method.

    {
       "httpStatus": "400",
       "errorCode": "error.cart.precommit.payment-method.invalid",
       "params": {
        "transactionRefNo": "20180427-000065"
       },
       "exceptionName": "com.stixcloud.common.exception.SisticApiException",
       "statusMessage": "Invalid payment method",
       "errorTime": "2018-04-27T19:26:04.327+08:00",
       "url": "http://localhost:8082/api/v0/SISTIC/orders/20180427-000065"
    }
    

    Error Code 500. Note: This error is returned when there is an internal system error

    {
       "httpStatus":"500",
       "errorTime":"2017-07-01T16:53:26.535+08:00",
       "exceptionName":" java.lang.NullPointerException",
       "statusMessage": "NullPointerException: "
    }
    

    2.9.1 Request

    You must replace tenant with your Tenant code and transactionRefNo retrieved from Pre Payment Order

    2.9.2 Path Variables and Parameters

    Name Type Description
    tenant String [Required] Tenant Id given
    transactionRefNo String [Required] Transaction ref no.

    2.9.3 Additional Notes

    2.9.4 Data model

    2.9.4.1 Request object

    Name Description on attribute Data Type Length / Data Range Nullable
    confirmOrder Flag to indicate if you wish to proceed to confirm order

    true for confirm order

    false for cancel order
    Boolean 5 N
    payment Payment Info JSON payment object - N

    2.9.4.2 Payment object

    Name Description on attribute Data Type Length / Data Range Nullable
    paymentRefNo Client side payment reference number

    Payment ref. no generated by client
    String 100 N
    paymentyMethod Payment method selected by customer.

    Either VISA, MASTER or AMEX
    String 20 N
    charge MonetaryAmount object MonetaryAmount Object - N

    2.9.4.3 MonetaryAmount object

    Name Description on attribute Data Type Length / Data Range Nullable
    amount Payment amount Number 10 N
    currency Currency code String 5 N

    2.9.4.4 Response object

    Name Description on attribute Data Type Length / Data Range Nullable
    httpStatus Service response code

    200, 400 or 500
    String 255 N
    statusMessage Service response status message String 255 Y
    exceptionName Exception class name String 255 Y
    errorCode Sistic defined exception code for multi-language purpose String 255 Y
    transactionDateTime Transaction date time

    ISO 8601 Date format - yyyy-mm-ddThh:mm:ss+-hh:mm (24hours)
    String 100 Y
    deliveryMethod Ticket delivery details JSON deliveryMethod object - Y
    barcode Barcode of transaction

    Barcode object contains list of sales seat inventory id with its barcode
    String

    2.9.4.5 DeliveryMethod object

    Name Description on attribute Data Type Length / Data Range Nullable
    code Delivery method code String 25 N
    eticketURL Eticket url Array[String] - Y

    3. Release Notes

    2018

    STiX Cloud REST API Release Notes 2018

    Each set of release notes describes changes that apply to the release: