SOAP

Contact List Management

Retrieving the Address Book

The address book is retrieved by posting this SOAP request to http://contacts.msn.com/abservice/abservice.asmx or https://contacts.msn.com/abservice/abservice.asmx for an encrypted connection.

POST /abservice/abservice.asmx HTTP/1.1
SOAPAction: http://www.msn.com/webservices/AddressBook/ABFindAll
Content-Type:text/xml; charset=utf-8
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Accept: */*
Host: contacts.msn.com
Content-Length: Variable Number
Connection: Keep-Alive
Cache-Control: no-cache

<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'
      xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
      xmlns:xsd='http://www.w3.org/2001/XMLSchema'
      xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'>
    <soap:Header>
        <ABApplicationHeader xmlns='http://www.msn.com/webservices/AddressBook'>
            <ApplicationId>09607671-1C32-421F-A6A6-CBFAA51AB5F4</ApplicationId>
            <IsMigration>false</IsMigration>
            <PartnerScenario>Initial</PartnerScenario>
        </ABApplicationHeader>
        <ABAuthHeader xmlns='http://www.msn.com/webservices/AddressBook'>
            <ManagedGroupRequest>false</ManagedGroupRequest>
            <TicketToken>Variable</TicketToken>
        </ABAuthHeader>
    </soap:Header>
    <soap:Body>
        <ABFindAll xmlns='http://www.msn.com/webservices/AddressBook'>
            <abId>00000000-0000-0000-0000-000000000000</abId>
            <abView>Full</abView>
            <deltasOnly>true</deltasOnly>
            <lastChange>0001-01-01T00:00:00.0000000-08:00</lastChange>
        </ABFindAll>
    </soap:Body>
</soap:Envelope>
  • deltasOnly: whether you want to receive a full or partial address book update
  • lastChange: the time your address book was last synchronized

deltasOnly and lastChange are only necessary if you want to do a partial address book update.

The server will then reply with this response.

HTTP/1.1 200 OK
Date: Wed, 02 Apr 2008 03:17:04 GMT
Server: Microsoft-IIS/6.0
P3P:CP="BUS CUR CONo FIN IVDo ONL OUR PHY SAMo TELo"
X-Powered-By: ASP.NET
X-MSNSERVER: BAYABCHWBB128
X-AspNet-Version: 2.0.50727
Cache-Control: private, max-age=0
Content-Type: text/xml; charset=utf-8
Content-Length: Variable Number

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Header>
        <ServiceHeader xmlns="http://www.msn.com/webservices/AddressBook">
            <Version>13.02.2514.0000</Version>
            <CacheKey>Base64 Encoded Data?</CacheKey>
            <CacheKeyChanged>true|false</CacheKeyChanged>
            <PreferredHostName>by4.contacts.msn.com</PreferredHostName>
        </ServiceHeader>
    </soap:Header>
    <soap:Body>
        <ABFindAllResponse xmlns="http://www.msn.com/webservices/AddressBook">
            <ABFindAllResult>
                <groups>
                    <Group>
                        <groupId>GUID</groupId>
                        <groupInfo>
                            <annotations>
                                <Annotation>
                                    <Name>MSN.IM.Display</Name>
                                    <Value>1</Value>
                                </Annotation>
                                <Annotation>
                                    <Name>MSN.IM.HasSharedFolder</Name>
                                    <Value>1</Value>
                                </Annotation>
                            The rest of these annotations have only been seen so far on ContactType of "Me"
                                <Annotation>
                                    <Name>MSN.IM.MBEA</Name>
                                    <Value>0</Value>
                                </Annotation>
                                <Annotation>
                                    <Name>MSN.IM.GTC</Name>
                                    <Value>1</Value>
                                </Annotation>
                                <Annotation>
                                    <Name>MSN.IM.BLP</Name>
                                    <Value>1</Value>
                                </Annotation>
                                <Annotation>
                                    <Name>MSN.IM.RoamLiveProperties</Name>
                                    <Value>1|2</Value>
                                </Annotation>
                            </annotations>
                            <groupType>c8529ce2-6ead-434d-881f-341e17db3ff8</groupType>
                            <name>Group Name</name>
                            <IsNotMobileVisible>true|false</IsNotMobileVisible>
                            <IsPrivate>true|false</IsPrivate>
                        </groupInfo>
                        <propertiesChanged />
                        <fDeleted>true|false</fDeleted>
                        <lastChange>ISO 8601 timestamp</lastChange>
                    </Group>
                    ...
                </groups>
                <contacts>
                    <Contact>
                        <contactId>GUID</contactId>
                        <contactInfo>
                            <phones>
                                <ContactPhone>
                                    <contactPhoneType>ContactPhoneMobile</contactPhoneType>
                                    <number>Phone Number</number>
                                    <isMessengerEnabled>true|false</isMessengerEnabled>
                                    <propertiesChanged />
                                </ContactPhone>
                            </phones>
                            <groupIds>
                                <guid>GUID</guid>
                            </groupIds>
                            <emails>
                                <ContactEmail>
                                    <contactEmailType>ContactEmailPersonal</contactEmailType>
                                    <email>Email Address</email>
                                    <isMessengerEnabled>true|false</isMessengerEnabled>
                                    <Capability>0</Capability>
                                    <MessengerEnabledExternally>true|false</MessengerEnabledExternally>
                                    <propertiesChanged />
                                </ContactEmail>
                            </emails>
                            <contactType>Me|Regular|LivePending</contactType>
                            <quickName>Quick Name</quickName>
                            <firstName>First Name</firstName>
                            <lastName>Last Name</lastName>
                            <passportName>MSN Passport (Email Address)</passportName>
                            <IsPassportNameHidden>true|false</IsPassportNameHidden>
                            <displayName>Display Name</displayName>
                            <puid>0</puid>
                            <CID>Contact Id (Number, some prepended with a hyphen)</CID>
                            <IsNotMobileVisible>true|false</IsNotMobileVisible>
                            <isMobileIMEnabled>true|false</isMobileIMEnabled>
                            <isMessengerUser>true|false</isMessengerUser>
                            <isFavorite>true|false</isFavorite>
                            <isSmtp>true|false</isSmtp>
                            <hasSpace>true|false</hasSpace>
                            <spotWatchState>NoDevice</spotWatchState>
                            <birthdate>ISO 8601 timestamp</birthdate>
                            <primaryEmailType>ContactEmailPersonal</primaryEmailType>
                            <PrimaryLocation>ContactLocationPersonal</PrimaryLocation>
                            <PrimaryPhone>ContactPhonePersonal</PrimaryPhone>
                            <IsPrivate>true|false</IsPrivate>
                            <Gender>Unspecified</Gender>
                            <TimeZone>None</TimeZone>
                        </contactInfo>
                        <propertiesChanged />
                        <fDeleted>true|false</fDeleted>
                        <lastChange>ISO 8601 timestamp</lastChange>
                    </Contact>
                    ...
                </contacts>
                <CircleResult>
                    <CircleTicket>
                        &lt;?xml version="1.0" encoding="utf-16"?&gt;
                        &lt;SignedTicket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                              xmlns:xsd="http://www.w3.org/2001/XMLSchema" ver="1" keyVer="1"&gt;
                            <Data&gt;Base64 Encoded "Ticket"&lt;/Sig&gt;
                        &lt;/SignedTicket&gt;
                    </CircleTicket>
                </CircleResult>
                <ab>
                    <abId>00000000-0000-0000-0000-000000000000</abId>
                    <abInfo>
                        <ownerPuid>0</ownerPuid>
                        <OwnerCID>Number</OwnerCID>
                        <ownerEmail>Email Address</ownerEmail>
                        <fDefault>true|false</fDefault>
                        <joinedNamespace>true|false</joinedNamespace>
                        <IsBot>true|false</IsBot>
                        <IsParentManaged>true|false</IsParentManaged>
                        <SubscribeExternalPartner>true|false</SubscribeExternalPartner>
                        <NotifyExternalPartner>true|false</NotifyExternalPartner>
                        <AddressBookType>Individual</AddressBookType>
                    <MessengerApplicationServiceCreated>false</MessengerApplicationServiceCreated>
                    </abInfo>
                    <lastChange>ISO 8601 timestamp</lastChange>
                    <DynamicItemLastChanged>ISO 8601 timestamp</DynamicItemLastChanged>
                    <RecentActivityItemLastChanged>ISO 8601 timestamp</RecentActivityItemLastChanged>
                    <createDate>ISO 8601 timestamp</createDate>
                    <propertiesChanged />
                </ab>
            </ABFindAllResult>
        </ABFindAllResponse>
    </soap:Body>
</soap:Envelope>
  • CID: is zero for email only contacts
  • birthdate: is 0001-01-01T00:00:00 if not set

passportName and displayName aren't in email only contacts