v2009 API Is quota charged on SOAP Faults

13 views
Skip to first unread message

fred

unread,
Nov 27, 2009, 12:45:05 AM11/27/09
to AdWords API Forum
Hello,
While developing our client for the v2009 API I have been doing some
error condition tests.
I have noticed that the 'operations' and 'units' headers come back
even when requests fail.

Some times this looks like its properly calculated. e.g. If the error
is in a mutate call which adds keywords then the 'operations' matches
the number of keyword objects which had the error, and the units is 15
per operation. So when I submit a mutate to add 5 keywords but 2 are
missing match types, then it says that 30 units were used.

But some times it looks completely random. e.g. I submit a mutate call
which deletes 3 keywords each with the same invalid adgroup id, then
the error is INTERNAL ERROR and I get different values for
'operations' and 'units'. Once was 22/330, another was 14/210. So 15
units per operataion, but operation count is just crud.

So my main question is:
- Are the quota 'units' reported in the header of a SOAP::Fault
actually charged to our account?

And if so, what about the buggy looking situations as shown in my
second example?

AdWords API Advisor

unread,
Nov 30, 2009, 1:43:30 PM11/30/09
to AdWords API Forum
Hi Fred,

Do you have the SOAP XML request and response that shows this
behavior? The request ID would also suffice.

Best,
- Eric Koleda, AdWords API Team

fred

unread,
Nov 30, 2009, 7:27:58 PM11/30/09
to AdWords API Forum
I assume you want the SOAP from the delete call which had the dodgy
operations header. Unfortunately I did not save the XML last week, but
was getting that behaviour consistently on Friday (Thursday evening in
the US)
This week I am unable to reproduce this issue. When deleting keywords
with an invalid adgroup ID it still gives an INTERNAL ERROR but now
returns a response with headers of 1 operation and one 1 unit. Most of
the time. On one occasion I did get a very different operation/unit
count (but still only 1 unit per operation). The SOAP is below.

I will keep an eye on it, and will save the XML if I do get the issue
again. If you wanted other SOAP (e.g. the 15 quota per invalid keyword
in an Add operation) then I can still reproduce that.

Do we actually get charged the quota reported in the headers of SOAP
Faults?

1201-112153 W P4PGoogle.pm/2241 ERROR REQUEST:
POST https://adwords.google.com/api/adwords/cm/v200909/AdGroupCriterionService
HTTP/1.1
Accept: text/xml
Accept: multipart/*
Content-Length: 2032
Content-Type: text/xml; charset=utf-8
SOAPAction: "https://adwords.google.com/api/adwords/cm/v200909#mutate"

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<RequestHeader xmlns="https://adwords.google.com/api/adwords/cm/
v200909" SOAP-ENC:arrayType="xsd:string[4]">
<authToken xsi:type="xsd:string">something1</authToken>
<useragent xsi:type="xsd:string">something2</useragent>
<developerToken xsi:type="xsd:string">something3</developerToken>
<applicationToken xsi:type="xsd:string">something4</applicationToken>
</RequestHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<mutate xmlns="https://adwords.google.com/api/adwords/cm/v200909">
<operations>
<operator>REMOVE</operator>
<operand xsi:type="BiddableAdGroupCriterion">
<bids xsi:type="ManualCPCAdGroupCriterionBids" SOAP-
ENC:arrayType="xsd:anyType[1]">
<maxCpc>
<amount>
<microAmount xsi:nil="true"/>
</amount>
</maxCpc>
</bids>
<adGroupId>36907795200000</adGroupId>
<userStatus xsi:nil="true"/>
<criterion xsi:type="Keyword">
<text xsi:nil="true"/>
<id>14899356282</id>
<matchType>BROAD</matchType>
</criterion>
<destinationUrl xsi:nil="true"/>
</operand>
</operations>
<operations>
<operator>REMOVE</operator>
<operand xsi:type="BiddableAdGroupCriterion">
<bids xsi:type="ManualCPCAdGroupCriterionBids" SOAP-
ENC:arrayType="xsd:anyType[1]">
<maxCpc>
<amount>
<microAmount xsi:nil="true"/>
</amount>
</maxCpc>
</bids>
<adGroupId>36907795200000</adGroupId>
<userStatus xsi:nil="true"/>
<criterion xsi:type="Keyword">
<text xsi:nil="true"/>
<id>14899572282</id>
<matchType>BROAD</matchType>
</criterion>
<destinationUrl xsi:nil="true"/>
</operand>
</operations>
</mutate>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

1201-112153 W P4PGoogle.pm/2243 ERROR RESPONSE:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Connection: close
Date: Tue, 01 Dec 2009 00:21:53 GMT
Server: GFE/2.0
Content-Type: text/xml; charset=UTF-8
Expires: Tue, 01 Dec 2009 00:21:53 GMT
Client-Date: Tue, 01 Dec 2009 00:21:53 GMT
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=Equifax/OU=Equifax Secure Certificate
Authority
Client-SSL-Cert-Subject: /C=US/ST=California/L=Mountain View/O=Google
Inc./CN=adwords.google.com
Client-SSL-Cipher: AES256-SHA
Client-SSL-Warning: Peer certificate not verified
Client-Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 0

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<ResponseHeader xmlns="https://adwords.google.com/api/adwords/cm/
v200909">
<requestId>5e72e19c21b7d51ee7e7304b27770e16</requestId>
<operations>787</operations>
<responseTime>172</responseTime>
<units>787</units>
</ResponseHeader>
</soap:Header>
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>InternalApiError.UNEXPECTED_INTERNAL_API_ERROR @ </
faultstring>
<detail>
<ApiExceptionFault xmlns="https://adwords.google.com/api/adwords/cm/
v200909">
<message>InternalApiError.UNEXPECTED_INTERNAL_API_ERROR @ </message>
<ApplicationException.Type>ApiException</ApplicationException.Type>
<errors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="InternalApiError">
<fieldPath>
</fieldPath>
<trigger>
</trigger>
<ApiError.Type>InternalApiError</ApiError.Type>
<reason>UNEXPECTED_INTERNAL_API_ERROR</reason>
</errors>
</ApiExceptionFault>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>


On Dec 1, 5:43 am, AdWords API Advisor <adwordsapiadvi...@google.com>
wrote:
> > second example?- Hide quoted text -
>
> - Show quoted text -

AdWords API Advisor

unread,
Dec 1, 2009, 11:53:03 AM12/1/09
to AdWords API Forum
Hi Fred,

Thank you for the follow up information. The API units reported in
the SOAP header are billed to your account, even if the request
resulted in an error. In cases where the error was due to a problem
on Google's servers and not user input the units will not be charged
to your account.

Because of the cost associated with errors, we recommend using the new
validateOnly header to check your request for errors before you
actually run them. A blog post on this header will be published later
this week.

Best,
- Eric

On Nov 30, 7:27 pm, fred <dec...@decideinteractive.com> wrote:
> I assume you want the SOAP from the delete call which had the dodgy
> operations header. Unfortunately I did not save the XML last week, but
> was getting that behaviour consistently on Friday (Thursday evening in
> the US)
> This week I am unable to reproduce this issue. When deleting keywords
> with an invalid adgroup ID it still gives an INTERNAL ERROR but now
> returns a response with headers of 1 operation and one 1 unit. Most of
> the time. On one occasion I did get a very different operation/unit
> count (but still only 1 unit per operation). The SOAP is below.
>
> I will keep an eye on it, and will save the XML if I do get the issue
> again. If you wanted other SOAP (e.g. the 15 quota per invalid keyword
> in an Add operation) then I can still reproduce that.
>
> Do we actually get charged the quota reported in the headers of SOAP
> Faults?
>
> 1201-112153 W P4PGoogle.pm/2241 ERROR REQUEST:
> POSThttps://adwords.google.com/api/adwords/cm/v200909/AdGroupCriterionSer...

fred

unread,
Dec 1, 2009, 6:37:50 PM12/1/09
to AdWords API Forum
Thanks for following this up Eric. I will make sure we account for
quota on faults to.
When you say "where the error was due to a problem on Google's
servers" does that mean whenever the error is internal error?

In the example I posted (reported as 787 quota) it was reported as an
INTERNAL_API_ERROR, but was due to me deliberately using a bad adgroup
ID. Is this considered a server error or input error? i.e. Would this
be charged or not?
Interstingly most of the time it was only 1 quota, but when I added a
few more 0's to the invalid adgroup id it gave the 787

On Dec 2, 3:53 am, AdWords API Advisor <adwordsapiadvi...@google.com>
> > > - Show quoted text -- Hide quoted text -

AdWords API Advisor

unread,
Dec 2, 2009, 12:14:23 PM12/2/09
to AdWords API Forum
Hi Fred,

The inconsistent reporting of API units and operations for this error
is another important issue, and I've brought it to the attention of
the core engineering team. I will take a deeper look into how units
are charge for UNEXPECTED_INTERNAL_API_ERRORs and get back to you.

Best,
- Eric

AdWords API Advisor

unread,
Dec 11, 2009, 1:40:58 PM12/11/09
to AdWords API Forum
Hi Fred,

Currently all UNEXPECTED_INTERNAL_API_ERRORs are classified as server
side errors, even if the root cause was bad user input.

Best,
- Eric

On Dec 2, 12:14 pm, AdWords API Advisor <adwordsapiadvi...@google.com>

Fred

unread,
Dec 13, 2009, 8:44:32 PM12/13/09
to AdWords API Forum
Thanks heaps for chasing that up for me Eric

On Dec 12, 5:40 am, AdWords API Advisor <adwordsapiadvi...@google.com>
Reply all
Reply to author
Forward
0 new messages