I am already using a Service Account to connect to Google Analytics and get 
information. 
For the Analytics API the key step was adding the service account's email 
address to our analytics account. 
I have a feeling I'm missing the equivalent setup step for Adwords, but the 
available documentation is of little help, just like when I was trying to 
figure out analytics. 
Developers everywhere would be grateful if Google improved and updated 
their api documentation. It really isn't that hard to tell that they need 
to add the service account email address to analytics if they want it to 
work as advertised.

Anyways, I have followed all the the documented steps to get a Google 
Service Account access to the Adwords API for our MCC account:
https://developers.google.com/adwords/api/docs/guides/service-accounts

In detail this is what I have done so far:

   - I have an approved developer token for my company's MCC account 
   (850-XXX-XXXX)
   - The domain administrator for my domain (verticalbrands.com) has 
   enabled impersonation abilities for my service account's client id for the 
   api scope https://adwords.google.com/api/adwords
   - I am using the official Google Adwords API Client for Ruby: 
   https://github.com/googleads/google-api-ads-ruby
   - I am instatiating the API object as such (anonymized of course): 

@adwords_client = AdwordsApi::Api.new({
      authentication: {
        method: 'OAUTH2_JWT',
        oauth2_issuer: 'xx...@developer.gserviceaccount.com',
        oauth2_secret: 'notasecret',
        oauth2_keyfile: key_filename, #I'm sure the key location is 
correct, as it works for analytics
        oauth2_prn: 'xx...@verticalbrands.com', # This email address is 
connected to an Adwords account under the MCC umbrella with the approved 
dev token
        developer_token: developer_token, # This is the approved developer 
token.
        client_customer_id: '850-882-XXXX',
        user_agent: 'KPI Metrics'
      },
      service: {
        environment: 'PRODUCTION'
      },
      connection: {
        enable_gzip: false
      },
      library: {
        log_level: 'DEBUG'
      }
})

According to the docs, I should be able to impersonate any user in my 
domain (verticalbrands.com) for access to the api with this configuration 
and an approved developer token. 
The authorization seems to succeed. Calling authorize on the client object 
yields:
{:access_token=>"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
 :issued_at=>2013-12-12 13:44:40 -0800,
 :expires_in=>3600,
 :id_token=>nil}

However, every request I send gets the same error:
AdwordsApi::Errors::ReportXmlError: HTTP code: 400, error type: 
'AuthorizationError.USER_PERMISSION_DENIED', trigger: '<null>', field path: 
''

Besides the obvious question of: why aren't the docs complete enough to get 
a request to work from a Service Account?
I have more pointed questions:

   1. The MCC account is for a different domain (realtynation.com). Do I 
   need to impersonate the MCC account email address (xx...@realtynation.com) 
   instead of the actual adwords account I'm interested in 
   (xx...@verticalbrands.com)?
   2. Is the Domain mismatch between the two email addresses causing this 
   issue?
   3. In the Account Access settings page, it indicates that 
   the xx...@verticalbrands.com email address has "Administrative Access' but 
   the xx...@realtynation.com address has 'User interface and API' access. 
   Does 'Administrative Access' not include API access? If so, does this 
   mean I MUST impersonate an account that has API access specifically? If so, 
   why isn't this anywhere in the documentation? 
   4. Do I need to add the Service Account's email address to one of the 
   Adwords account? If so, how do I get to the verification email for a 
   Service Account?











-- 
-- 
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and discussion group:
http://googleadsdeveloper.blogspot.com
http://groups.google.com/group/adwords-api
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~

You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to adwords-api@googlegroups.com
To unsubscribe from this group, send email to
adwords-api+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to adwords-api+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to