I have the same problem in Java! The SOAP requests:
<default header information (which is alright because everything
works)>
<getCampaignNegativeCriteria xmlns="
https://adwords.google.com/api/
adwords/v12">
<campaignId>17562608</campaignId>
</getCampaignNegativeCriteria></soapenv:Body></soapenv:Envelope>
Result:
<soapenv:Header>
</soapenv:Header>
<soapenv:Body>
<getCampaignNegativeCriteriaResponse xmlns="https://
adwords.google.com/api/adwords/v12">
<getCampaignNegativeCriteriaReturn xsi:type="ns1:Keyword"
xmlns:ns1="
https://adwords.google.com/api/adwords/v12">
<ns1:adGroupId>0</ns1:adGroupId>
<ns1:criterionType>Keyword</ns1:criterionType>
<ns1:id>0</ns1:id>
<ns1:language></ns1:language>
<ns1:negative>true</ns1:negative>
<ns1:minCpc>0</ns1:minCpc>
<ns1:text>tickets</ns1:text>
<ns1:type>Broad</ns1:type>
</getCampaignNegativeCriteriaReturn>
<getCampaignNegativeCriteriaReturn xsi:type="ns2:Keyword"
xmlns:ns2="
https://adwords.google.com/api/adwords/v12">
etc. etc.
As you can see, the adGroupId is 0 and the id is 0. So i still don't
know which keywords in my campaign are negative (i run a structure
report to retrieve my accountstructure, and
getCampaignNegativeCriteria is the only way to find out which of the
keywords are negative)