MSN:SOAP/Contact List Management

From IMFreedom Wiki
Revision as of 06:42, 5 April 2008 by Maiku (talk | contribs) (Added a few extra tags to the address book response)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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