So I made your request work, but there were several changes i made to your AXL as well as with the header you said you used. The header should be SOAPAction="CUCM

B ver=8.5"
The AXL i used is as follows:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/8.5">
<soapenv:Header/>
<soapenv:Body>
<ns:addDeviceProfile sequence="?">
<deviceProfile ctiid="?">
<name>EMProfile70001</name>
<product>Cisco 7960</product>
<protocol>SCCP</protocol>
<class>Device Profile</class> <protocolSide>User</protocolSide>
<userHoldMohAudioSourceId>1</userHoldMohAudioSourceId>
<mlppIndicationStatus>Off</mlppIndicationStatus>
<preemption>Default</preemption>
<lines>
<lineIdentifier> <directoryNumber>#1014</directoryNumber> <routePartitionName>hudtloff-Speakers</routePartitionName> <index>1</index>
<label>Bobby Gavin Smith</label>
<asciiLabel>Bobby Gavin Smith</asciiLabel>
<display>Bobby Gavin Smith 12345</display>
<ringSetting>Ring</ringSetting>
<consecutiveRingSetting>Use System Default</consecutiveRingSetting>
<displayAscii>Bobby Gavin Smith 12345</displayAscii>
<mwlPolicy>Use System Policy</mwlPolicy>
<maxNumCalls>2</maxNumCalls>
<busyTrigger>1</busyTrigger>
<callInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</callInfoDisplay>
<recordingFlag>Call Recording Disabled</recordingFlag>
<audibleMwi>Default</audibleMwi>
<partitionUsage>General</partitionUsage>
<missedCallLogging>true</missedCallLogging>
</lineIdentifier>
</lines>
<phoneTemplateName uuid="?">Standard 7960 SCCP 2 Line</phoneTemplateName>
<addOnModules>
<addOnModule>
<model>7914 14-Button Line Expansion Module</model>
<index>1</index> </addOnModule>
</addOnModules>
<singleButtonBarge>Default</singleButtonBarge>
<joinAcrossLines>Default</joinAcrossLines>
<ignorePresentationIndicators>false</ignorePresentationIndicators>
<dndOption>Ringer Off</dndOption>
<alwaysUsePrimeLine>Default</alwaysUsePrimeLine>
<alwaysUsePrimeLineForVoiceMessage>Default</alwaysUsePrimeLineForVoiceMessage>
<softkeyTemplateName uuid="?">Standard User</softkeyTemplateName>
<callInfoPrivacyStatus>Default</callInfoPrivacyStatus>
</deviceProfile>
</ns:addDeviceProfile>
</soapenv:Body>
</soapenv:Envelope>
Every thing in red is something i changed. The biggest things are that one of the required fields is
<class>Device Profile</class>. Your request did not have that in there.
The next thing that i changed is in the <lines>. Notice that instead of using <lines><line> </line></lines> i use <lines><lineIdentifier></lineIdentifier></lines>. You had several problems in the line section one being that your first instance of <line> blah blah </line> isnt formed at all correctly. the second instance of <line> blah blah</line> is closer but your missing <index> and <dirn>. Now i am no expert i have yet to have any luck adding any type of line to any type of device using the <lines><line><dirn> </dirn></line></lines>. The only way i have had success is using <lines><lineIdentifier><directoryNumber>xxxx</directoryNumber><routePartitionName>xxxxx</routePartitionName>. Here is what you had to add lines:
<lines>
<line ctiid="?">
<ringSetting>Ring</ringSetting>
<consecutiveRingSetting>Use System Default</consecutiveRingSetting>
<mwlPolicy>Use System Policy</mwlPolicy>
<maxNumCalls>2</maxNumCalls>
<busyTrigger>1</busyTrigger>
<callInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</callInfoDisplay>
<recordingFlag>Call Recording Disabled</recordingFlag>
<audibleMwi>Default</audibleMwi>
<partitionUsage>General</partitionUsage>
<missedCallLogging>true</missedCallLogging>
</line>
<line ctiid="?">
<index>1</index>
<label>Bobby Gavin Smith</label>
<asciiLabel>Bobby Gavin Smith</asciiLabel>
<display>Bobby Gavin Smith 12345</display>
<ringSetting>Ring</ringSetting>
<consecutiveRingSetting>Use System Default</consecutiveRingSetting>
<displayAscii>Bobby Gavin Smith 12345</displayAscii>
<mwlPolicy>Use System Policy</mwlPolicy>
<maxNumCalls>2</maxNumCalls>
<busyTrigger>1</busyTrigger>
<callInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</callInfoDisplay>
<recordingFlag>Call Recording Disabled</recordingFlag>
<audibleMwi>Default</audibleMwi>
<partitionUsage>General</partitionUsage>
<missedCallLogging>true</missedCallLogging>
</line>
</lines>
here is the corrected version (obviously you will need to change the directoryNumber and routePartition)
<lines>
<lineIdentifier>
<directoryNumber>#1014</directoryNumber>
<routePartitionName>hudtloff-Speakers</routePartitionName>
<index>1</index>
<label>Bobby Gavin Smith</label>
<asciiLabel>Bobby Gavin Smith</asciiLabel>
<display>Bobby Gavin Smith 12345</display>
<ringSetting>Ring</ringSetting>
<consecutiveRingSetting>Use System Default</consecutiveRingSetting>
<displayAscii>Bobby Gavin Smith 12345</displayAscii>
<mwlPolicy>Use System Policy</mwlPolicy>
<maxNumCalls>2</maxNumCalls>
<busyTrigger>1</busyTrigger>
<callInfoDisplay>
<callerName>true</callerName>
<callerNumber>false</callerNumber>
<redirectedNumber>false</redirectedNumber>
<dialedNumber>true</dialedNumber>
</callInfoDisplay>
<recordingFlag>Call Recording Disabled</recordingFlag>
<audibleMwi>Default</audibleMwi>
<partitionUsage>General</partitionUsage>
<missedCallLogging>true</missedCallLogging>
</lineIdentifier>
</lines>
Sorry if my response is to long winded. This is my first response to a question and I want to be clear in how i made it work. Its frustrating when someone responds with only corrected code and no explanation. One more thing, I am no expert so if my understanding of any of this is wrong i apologize, i just know how to make this stuff work from time to time.