Skip to main content
Push notification service request and response headers (Windows Runtime apps)

Applies to Windows and Windows Phone

This topic describes the service-to-service web APIs and protocols required to send a push notification.

See the Windows Push Notification Services (WNS) overview for a conceptual discussion of push notification and WNS concepts, requirements, and operation.

Requesting and receiving an access token

This section describes the request and response parameters involved when you authenticate with the WNS.

Access token request

An HTTP request is sent to WNS to authenticate the cloud service and retrieve an access token in return. The request is issued to the following fully qualified domain name (FQDN) by using Secure Sockets Layer (SSL).

https://login.live.com/accesstoken.srf

Access token request parameters

The cloud service submits these required parameters in the HTTP request body, using the "application/x-www-form-urlencoded" format. You must ensure that all parameters are URL encoded.

ParameterRequired/OptionalDescription
grant_typeRequiredMust be set to "client_credentials".
client_idRequiredPackage security identifier (SID) for your cloud service as assigned when you registered your app with the Windows Store.
client_secretRequiredSecret key for your cloud service as assigned when you registered your app with the Windows Store.
scopeRequiredMust be set to:
  • Windows: "notify.windows.com"
  • Windows Phone: "notify.windows.com" or "s.notify.live.net"

 

Access token response

WNS authenticates the cloud service and, if successful, responds with a "200 OK", including the access token. Otherwise, WNS responds with an appropriate HTTP error code as described in the OAuth 2.0 protocol draft.

Access token response parameters

An access token is returned in the HTTP response if the cloud service successfully authenticated. This access token can be used in notification requests until it expires. The HTTP response uses the "application/json" media type.

ParameterRequired/OptionalDescription
access_tokenRequiredThe access token that the cloud service will use when it sends a notification.
token_typeOptionalAlways returned as "bearer".

 

Response code

HTTP response codeDescription
200 OKThe request was successful.
400 Bad RequestThe authentication failed. See the OAuth draft Request for Comments (RFC) for the response parameters.

 

Example

The following shows an example of a successful authentication response:


 HTTP/1.1 200 OK   
 Cache-Control: no-store
 Content-Length: 422
 Content-Type: application/json
 
 {
     "access_token":"EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=", 
     "token_type":"bearer"
 }

Sending a notification request and receiving a response

This section describes the headers involved in an HTTP request to WNS to deliver a notification and those involved in the reply.

Send notification request

When sending a notification request, the calling app makes an HTTP request over SSL, addressed to the channel Uniform Resource Identifier (URI). "Content-Length" is a standard HTTP header that must be specified in the request. All other standard headers are either optional or not supported.

In addition, the custom request headers listed here can be used in the notification request. Some headers are required while others are optional.

Request parameters

Header nameRequired/OptionalDescription
AuthorizationRequiredStandard HTTP authorization header used to authenticate your notification request. Your cloud service provides its access token in this header.
Content-TypeRequiredStandard HTTP authorization header. For toast, tile, and badge notifications, this header must be set to "text/xml". For raw notifications, this header must be set to "application/octet-stream".
Content-LengthRequiredStandard HTTP authorization header to denote the size of the request payload.
X-WNS-TypeRequiredDefines the notification type in the payload: tile, toast, badge, or raw.
X-WNS-Cache-PolicyOptionalEnables or disables notification caching. This header applies only to tile, badge, and raw notifications.
X-WNS-RequestForStatusOptionalRequests device status and WNS connection status in the notification response.
X-WNS-TagOptionalString used to provide a notification with an identifying label, used for tiles that support the notification queue. This header applies only to tile notifications.
X-WNS-TTLOptionalInteger value, expressed in seconds, that specifies the time to live (TTL).
X-WNS-SuppressPopupOptionalWindows Phone only: Delivers a toast notification directly to the action center without raising the toast itself.
X-WNS-GroupOptionalWindows Phone only: Used with the X-WNS-Tag header to group notifications in the action center.
X-WNS-MatchSituationally requiredWindows Phone only: Required to identify the target or targets when you remove a toast notification from the action center through the HTTP DELETE method.

 

Important notes

  • Content-Length and Content-Type are the only standard HTTP headers that are included in the notification delivered to the client, regardless of whether other standard headers were included in the request.
  • All other standard HTTP headers are either ignored or return an error if the functionality is not supported.

Authorization

The authorization header is used to specify the credentials of the calling party, following the OAuth 2.0 authorization method for bearer tokens.

The syntax consists of a string literal "Bearer", followed by a space, followed by your access token. This access token is retrieved by issuing the access token request described above. The same access token can be used on subsequent notification requests until it expires.

This header is required.

Authorization: Bearer <access-token>

X-WNS-Type

These are the notification types supported by WNS. This header indicates the type of notification and how WNS should handle it. After the notification reaches the client, the actual payload is validated against this specified type. This header is required.

X-WNS-Type: wns/toast | wns/badge | wns/tile | wns/raw
ValueDescription
wns/badgeA notification to create a badge overlay on the tile. The Content-Type header included in the notification request must be set to "text/xml".
wns/tileA notification to update the tile content. The Content-Type header included in the notification request must be set to "text/xml".
wns/toastA notification to raise a toast on the client. The Content-Type header included in the notification request must be set to "text/xml".
wns/rawA notification which can contain a custom payload and is delivered directly to the app. The Content-Type header included in the notification request must be set to "application/octet-stream".

 

X-WNS-Cache-Policy

When the notification target device is offline, WNS will cache one badge and one tile notification per app. If notification cycling is enabled for the app, WNS will cache up to five tile notifications. By default, raw notifications are not cached, but if raw notification caching is enabled, one raw notification is cached. Items are not held in the cache indefinitely and will be dropped after a reasonable period of time. Otherwise, the cached content is delivered when the device next comes online.

This header is optional and should be used only in cases where the cloud service wants to override the default caching behavior.


X-WNS-Cache-Policy: cache | no-cache
ValueDescription
cacheDefault. Notifications will be cached if the user is offline. This is the default setting for tile and badge notifications.
no-cacheThe notification will not be cached if the user is offline. This is the default setting for raw notifications.

 

X-WNS-RequestForStatus

Specifies whether the response should include the device status and WNS connection status. This header is optional.

X-WNS-RequestForStatus: true | false
ValueDescription
trueReturn the device status and notification status in the response.
falseDefault. Do not return the device status and notification status.

 

X-WNS-Tag

Assigns a tag label to a notification. The tag is used in the replacement policy of the tile in the notification queue when the app has opted for notification cycling. If a notification with this tag already exists in the queue, a new notification with the same tag takes its place.

Note  This header is optional and used only when sending tile notifications.

  • Applies to Windows Phone

On Windows Phone, the X-WNS-Tag header can be used with the X-WNS-Group header to allow multiple notifications with the same tag to be shown in the action center.

X-WNS-Tag: <string value>
ValueDescription
string valueAn alphanumeric string of no more than 16 characters.

 

X-WNS-TTL

Specifies the TTL (expiration time) for a notification. This is not typically needed, but can be used if you want to ensure that your notifications are not displayed later than a certain time. The TTL is specified in seconds and is relative to the time that WNS receives the request. When a TTL is specified, the device will not display the notification after that time. Note that this could result in the notification never being shown at all if the TTL is too short. In general, an expiration time will be measured in at least minutes.

This header is optional. If no value is specified, the notification does not expire and will be replaced under the normal notification replacement scheme.

X-WNS-TTL: <integer value>
ValueDescription
integer valueThe life span of the notification, in seconds, after WNS receives the request.

 

X-WNS-SuppressPopup

  • Applies to Windows Phone

Provides the option to suppress a toast notification's UI, instead sending the notification directly to the action center. This lets your notification be delivered silently, a potentially superior option for less urgent notifications. This header is optional and only used on Windows Phone channels. If you include this header on a Windows channel, your notification will be dropped and you will receive an error response from WNS.

X-WNS-SuppressPopup: true | false
ValueDescription
trueSend the toast notification directly to the action center; do not raise the toast UI.
falseDefault. Raise the toast UI as well as adding the notification to the action center.

 

X-WNS-Group

  • Applies to Windows Phone

The action center on Windows Phone can display multiple toast notifications with the same tag only if they are labelled as belonging to different groups. For example, consider a recipe book app. Each recipe would be identified by a tag. A toast that contains a comment on that recipe would have the recipe's tag, but a comment group label. A toast that contains a rating for that recipe would again have that recipe's tag, but would have a rating group label. Those different group labels would allow both toast notifications to be shown at once in the action center. This header is optional.

X-WNS-Group: <string value>
ValueDescription
string valueAn alphanumeric string of no more than 16 characters.

 

X-WNS-Match

  • Applies to Windows Phone

Used with the HTTP DELETE method to remove a specific toast, a set of toasts (by either tag or group), or all toasts from the action center of a Windows Phone. This header can specify a group, a tag, or both. This header is required in an HTTP DELETE notification request. Any payload included with this notification request is ignored.

X-WNS-Match: type:wns/toast;group=<string value>;tag=<string value> | type:wns/toast;group=<string value> | type:wns/toast;tag=<string value> | type:wns/toast;all
ValueDescription
type:wns/toast;group=<string value>;tag=<string value>Remove a single notification labelled with both the specified tag and group.
type:wns/toast;group=<string value>Remove all notifications labelled with the specified group.
type:wns/toast;tag=<string value>Remove all notifications labelled with the specified tag.
type:wns/toast;allClear all of your app's notifications from the action center.

 

Send notification response

After WNS processes the notification request, it sends an HTTP message in response. This section discusses the parameters and headers that can be found in that response.

Response parameters

Header nameRequired/OptionalDescription
X-WNS-Debug-TraceOptionalDebugging information that should be logged to help troubleshoot issues when reporting a problem.
X-WNS-DeviceConnectionStatusOptionalThe device status, returned only if requested in the notification request through the X-WNS-RequestForStatus header.
X-WNS-Error-DescriptionOptionalA human-readable error string that should be logged to help with debugging.
X-WNS-Msg-IDOptionalA unique identifier for the notification, used for debugging purposes. When reporting a problem, this information should be logged to help in troubleshooting.
X-WNS-StatusOptionalIndicates whether WNS successfully received and processed the notification. When reporting a problem, this information should be logged to help in troubleshooting.

 

X-WNS-Debug-Trace

This header returns useful debugging information as a string. We recommended that this header be logged to help developers debug issues. This header, together with the X-WNS-Msg-ID header, is required when reporting an issue to WNS.

X-WNS-Debug-Trace: <string value>
ValueDescription
string valueAn alphanumeric string.

 

X-WNS-DeviceConnectionStatus

This header returns the device status to the calling application, if requested in the X-WNS-RequestForStatus header of the notification request.

X-WNS-DeviceConnectionStatus: connected | disconnected | tempdisconnected
ValueDescription
connectedThe device is online and connected to WNS.
disconnectedThe device is offline and not connected to WNS.
tempconnectedThe device temporarily lost connection to WNS, for instance when a 3G connection is dropped or the wireless switch on a laptop is thrown. It is seen by the Notification Client Platform as a temporary interruption rather than an intentional disconnection.

 

X-WNS-Error-Description

This header provides a human-readable error string that should be logged to help with debugging.

X-WNS-Error-Description: <string value>
ValueDescription
string valueAn alphanumeric string.

 

X-WNS-Msg-ID

This header is used to provide the caller with an identifier for the notification. We recommended that this header be logged to help debug issues. This header, together with the X-WNS-Debug-Trace header, is required when reporting an issue to WNS.

X-WNS-Msg-ID: <string value>
ValueDescription
string valueAn alphanumeric string of no more than 16 characters.

 

X-WNS-Status

This header describes how WNS handled the notification request. This can be used rather than interpreting response codes as success or failure.

X-WNS-Status: received | dropped | channelthrottled
ValueDescription
receivedThe notification was received and processed by WNS.

Note  This does not guarantee that the device received the notification.

droppedThe notification was explicitly dropped because of an error or because the client has explicitly rejected these notifications. Toast notifications will also be dropped if the device is offline.
channelthrottledThe notification was dropped because the app server exceeded the rate limit for this specific channel.

 

Response codes

Each HTTP message contains one of these response codes. WNS recommends that developers log the response code for use in debugging. When developers report an issue to WNS, they are required to provide response codes and header information.

HTTP response codeDescriptionRecommended action
200 OKThe notification was accepted by WNS.None required.
400 Bad RequestOne or more headers were specified incorrectly or conflict with another header.Log the details of your request. Inspect your request and compare against this documentation.
401 UnauthorizedThe cloud service did not present a valid authentication ticket. The OAuth ticket may be invalid.Request a valid access token by authenticating your cloud service using the access token request.
403 ForbiddenThe cloud service is not authorized to send a notification to this URI even though they are authenticated.The access token provided in the request does not match the credentials of the app that requested the channel URI. Ensure that your package name in your app's manifest matches the cloud service credentials given to your app in the Dashboard.
404 Not FoundThe channel URI is not valid or is not recognized by WNS.Log the details of your request. Do not send further notifications to this channel; notifications to this address will fail.
405 Method Not AllowedInvalid method (GET, CREATE); only POST (Windows or Windows Phone) or DELETE (Windows Phone only) is allowed.Log the details of your request. Switch to using HTTP POST.
406 Not AcceptableThe cloud service exceeded its throttle limit.Log the details of your request. Reduce the rate at which you are sending notifications.
410 GoneThe channel expired.Log the details of your request. Do not send further notifications to this channel. Have your app request a new channel URI.
413 Request Entity Too LargeThe notification payload exceeds the 5000 byte size limit.Log the details of your request. Inspect the payload to ensure it is within the size limitations.
500 Internal Server ErrorAn internal failure caused notification delivery to fail.Log the details of your request. Report this issue through the developer forums.
503 Service UnavailableThe server is currently unavailable.Log the details of your request. Report this issue through the developer forums.

 

For detailed troubleshooting information concerning specific response codes, see Troubleshooting tile, toast, and badge notifications. Also see COM Error Codes (WPN, MBN, P2P, Bluetooth).

Unsupported HTTP features

The WNS Web Interface supports HTTP 1.1 but does not support the following features:

  • Chunking
  • Pipelining (POST is not idempotent)
  • Although supported, developers should disable Expect-100 as that introduces latency when sending a notification.

Related topics

Quickstart: Sending a push notification
Guidelines and checklist for push notifications
How to authenticate with the Windows Push Notification Service (WNS)
How to request, create, and save a notification channel
Push and periodic notifications sample
WNS overview