Skip to content

Instantly share code, notes, and snippets.

@OatmealDome
Last active February 25, 2024 03:19
Show Gist options
  • Save OatmealDome/c21c28672fab8804b263a359cc2d72e1 to your computer and use it in GitHub Desktop.
Save OatmealDome/c21c28672fab8804b263a359cc2d72e1 to your computer and use it in GitHub Desktop.

NetUpdateSOAP

The SOAP endpoint for checking if a system update is available is located at /nus/services/NetUpdateSOAP.

Request

A POST request is sent to the endpoint.

HTTP Headers

The following headers are sent with the request:

Header Value
SOAPAction urn:nus.wsapi.broadon.com/GetSystemUpdate
User-Agent wii libnup/1.0
Content-Type text/xml; charset="utf-8"

SOAP Envelope

The following SOAP envelope is sent in the request body, where DeviceId and RegionId contain the device ID and region of the requesting Wii:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <GetSystemUpdateRequest xmlns="urn:nus.wsapi.broadon.com">
      <Version>1.0</Version>
      <MessageId>0</MessageId>
      <DeviceId>[Device ID]</DeviceId>
      <RegionId>[Region ID]</RegionId>
    </GetSystemUpdateRequest>
  </soapenv:Body>
</soapenv:Envelope>

Possible regions are:

Region ID
Japan JPN
North America USA
Europe EUR
South Korea KOR

Response

A SOAP envelope in the following format is returned from the server:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <GetSystemUpdateResponse xmlns="urn:nus.wsapi.broadon.com">
            <Version>1.0</Version>
            <DeviceId>[Device ID]</DeviceId>
            <MessageId>[Message ID]</MessageId>
            <TimeStamp>[Timestamp]</TimeStamp>
            <ErrorCode>0</ErrorCode>
            <ContentPrefixURL>[CDN URL]</ContentPrefixURL>
            <UncachedContentPrefixURL>[Uncached CDN URL]</UncachedContentPrefixURL>
            <TitleVersion>
                <TitleId>0000000100000001</TitleId>
                <Version>4</Version>
                <FsSize>0</FsSize>
            </TitleVersion>
            <!-- other titles... -->
            <UploadAuditData>0</UploadAuditData>
        </GetSystemUpdateResponse>
    </soapenv:Body>
</soapenv:Envelope>

Dolphin does not check or use Version, DeviceId, MessageId, TimeStamp, UncachedContentPrefixURL, FsSize, or UploadAuditData, so those can just be set to dummy values.

A non-zero ErrorCode indicates an error occurred with the request.

The list of titles to install vary per region. Example responses for each region are linked below.

Region Response
JPN https://gist.github.com/OatmealDome/9a064f9482686ece6d3acd7873f9bd32
USA https://gist.github.com/OatmealDome/d216530049802553c50a0f83b6434344
EUR https://gist.github.com/OatmealDome/6847baf59f22e25d60ec5d8da02a5c0f
KOR https://gist.github.com/OatmealDome/ed4335ef7b74365fc9a26e967f296b4a

Because the regional response content never changes (if the unused fields are set to dummy values), it is probably best to just serve the raw XML files as the response.

Regarding the CDN URLs

There are several CDN URLs available, including:

Device URL
Wii http://nus.cdn.shop.wii.com/ccs/download
DSi http://nus.cdn.t.shop.nintendowifi.net/ccs/download
3DS http://nus.cdn.c.shop.nintendowifi.net/ccs/download
Wii U http://nus.cdn.wup.shop.nintendo.net/ccs/download

It is possible to download any title for any platform (for example, a Wii title from the Wii U CDN URL), which suggests that they are all using the same backend internally.

My example responses above use the Wii U CDN URL.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment