------------------------
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.