------------------------
        Simple Content Subscription Protocol (SCSP) Version 0.3
        ------------------------

        SCSP requires the SRX method of sending and receiving messages via HTTP GET/POST 
        and XML response. The following is the specification of messages provided in 
        SCSP. The SRX protocol specification is located here.
        
        An SCSP response must include <scsp> as the first element with a version 
        attribute indicating the SCSP specification version used in the format #.#.
        
        URLs may be included in the "success" responses as well as the "user not logged 
        in" responses, to tell the client where to redirect the browser.

        1) Subscribe
            Form elements: 
                type (string: "channel", "show")
                id (string)

            Allowed Responses:
                SUCCESS            = [ 1, 'Your transaction has completed.']
                UNKNOWN_ERROR      = [-1, 'There was an unknown error.']
                CONTENT_NOT_VALID  = [-3, 'The item you are requesting is not valid.']
                ALREADY_SUBSCRIBED = [-6, 'You already have a subscription to this item.']
                USER_NOT_LOGGED_IN = [-8, 'Please log in first.']
            
            Note: In the case of protected content, success returns a DRM action token to 
            acquire the subscription node.


        2) Unsubscribe
            Form elements: 
                type (string: "channel", "show")
                id (string)

            Allowed Responses:
                SUCCESS            = [ 1, 'Your transaction has completed.']
                UNKNOWN_ERROR      = [-1, 'There was an unknown error.']
                CONTENT_NOT_VALID  = [-3, 'The item you are requesting is not valid.']
                USER_NOT_LOGGED_IN = [-8, 'Please log in first.']
                NOT_SUBSCRIBED     = [-15, 'You are not subscribed to this channel or show.']


            Note: In the case of protected content, success returns a DRM action token to 
            purge the subscription node.

            Sample response:
                <scsp version=x.x>
                    <response>
                        <code>1</code>
                        <message>Succeeded</message>
                        <url>/go/here/now</url>
                    </response>
                    <actionToken>
                        ⋮
                    </actionToken> 
                </scsp>
        
        
        3) Check
            Form elements: none

            Returns list of current subscriptions. Each subscription item in the list 
            includes a title, item type, item id, renewal URL and expiration date/time.

            Allowed Responses:
                SUCCESS            = [ 1, 'Your transaction has completed.']
                USER_NOT_LOGGED_IN = [-8, 'Please log in first.']

            Sample response:
                <scsp version=x.x>
                    <response>
                        <code>1</code>
                        <message>Succeeded</message>
                    </response>
                    <subscriptions>
                        <subscription>
                            <subscription_id>6</subscription_id>
                            <expiration>2007-04-28</expiration>
                            <renew>/transact/subscribe_channel/6</renew>
                            <type>Channel</type>
                            <title>Cartoon Network</title>
                        </subscription>
                        <subscription>
                            <subscription_id>7</subscription_id>
                            <expiration>2008-05-31</expiration>
                            <renew>/transact/subscribe_channel/7</renew>
                            <type>Channel</type>
                            <title>CBS</title>
                        </subscription>
                        ⋮
                    </subscriptions>
                </scsp>

        
        4) Renew
        Form elements: 
            username (string)
            password (string) 
            type     (string: "package", "channel", "show")
            id       (string)

        Allowed Responses:
        SUCCESS = [1,'Succeeded']
        UNKNOWN_ERROR = [-1, 'Unknown Error']
        CONTENT_NOT_VALID = [-3,'Content ID Not Valid']
        NOT_SUBSCRIBED = [-14, 'Not Subscribed']
        RENEWAL_TOO_EARLY = [-15, 'Renewal Too Early']        

        Notes: In the case of protected content, success returns a DRM action token to 
        acquire the new subscription node. In the case of early renewal, it is possible 
        that the service will not allow renewal until the subscription has entered a 
        renewal period which is some portion of time before the actual expiration of the 
        subscription. For example a 30-day subscription may actually deliver 45-day 
        subscription nodes, allowing for a 15 day grace period for renewal.
        
        Also, a service may set the expiration date of subsequent subscription nodes to 
        be the period of time until the next account billing cycle, instead of a 
        consistent period of time from the point of renewal. For example, a 45-day 
        subscription with a 15-day renewal period may be renewed 35 days from the last 
        renewal, and in this case the service may deliver a 40-day subscription in order 
        to keep the account billing cycle on the same day each month. There is no 
        requirement for how the service determines subscription durations upon each 
        renewal. This is a service implementation choice.

        Sample response:

        The response XML looks takes the following form:
        <scsp version=x.x>
            <response>
                <code>1</code>
                <message>Succeeded</message>
                <url>/go/here/now</url>
            </response>
            <actionToken>
                ...
            </actionToken> 
        </scsp>


        The <url> element is not always present, only if needed.

        Error code glossary:
            see sctp spec
            SUCCESS                       = [ 1, 'Your transaction has completed.']
            UNKNOWN_ERROR                 = [-1, 'There was an unknown error.']
            DEVICE_NOT_AUTHORIZED         = [-2, 'This device is not yet authorized for your account.']
            CONTENT_NOT_VALID             = [-3, 'The item you are requesting is not valid.']
            CONTENT_NOT_AVAILABLE         = [-4, 'The item you are requesting is not available.']
            ALREADY_PURCHASED             = [-5, 'You have already purchased this item.']
            ALREADY_SUBSCRIBED            = [-6, 'You already have a subscription to this item.']
            USER_NOT_AUTHORIZED           = [-7, 'Sorry, you are not subscribed to this channel or show, 
                                                  or you have not purchased or rented this item. Please 
                                                  do so first.']
            USER_NOT_LOGGED_IN            = [-8, 'Please log in first.']
            DEVICE_ALREADY_AUTHORIZED     = [-9, 'This device is already authorized for your account.']
            DEVICE_LIMIT_EXCEEDED         = [-10, 'You have already reached the maximum number of 5 home 
                                                   players for your account. You can de-authorize an 
                                                   existing home player in order to authorize this device.']
            USER_ALREADY_REGISTERED       = [-11, 'You are already registered.']
            EXTENDED_ERROR_INFO_AVAILABLE = [-12, 'More error information is available.']
            INVALID_CREDENTIALS           = [-13, 'The user name and password combination is incorrect.']
            DEVICE_NOT_PERSONALIZED       = [-14, 'This device is not yet registered with SyncTV. Please make 
                                                   sure your Internet connection is working properly. Device 
                                                   registration will happen automatically.']
            NOT_SUBSCRIBED                = [-15, 'You are not subscribed to this channel or show.']
            ALREADY_RENTED                = [-16, 'You are currently renting this item.']
            INPUT_ABSENT                  = [-17, 'Please fill in all required information.']
            GATEWAY_FAILURE               = [-18, 'Payment gateway temporarily unavailable. Please try again.']
            PAYMENT_FAILURE               = [-19, 'Your payment failed. Please input a valid payment method.']
            TRANSACTION_DENIED            = [-20, 'Sorry, you can only purchase 5 individual episodes with this 
                                                   press account.']
            DEVICE_LOCATION_RESTRICTED    = [-21, 'The device you are authorizing does not appear to be located 
                                                   in the United States.']
            INACTIVE_ACCOUNT_LOGIN        = [-22, 'This account is not yet active.  Please activate before 
                                                   attempting to log in.']
            INAPPROPRIATE_VALUE           = [-23, 'One or more form elements contain an inappropriate value.']
            MISSING_ELEMENT               = [-24, 'One or more required form elements are missing.']
            

This specifications provided here are licensed to the public under a Creative Commons Attribution 3.0 license.