title: Google Ads API (The caller does not have permission)
body: <p>I am using google-ads-api. My goal is to get impressions and clicks for specific campaign.
  These are the things I have done.</p>
  <ol>
  <li>created google service account</li>
  <li>Downloaded google-ads-library from github</li>
  <li>Added clientid , secretid, refresh token to my adsapi.ini file.</li>
  </ol>
  <p>When I run the code it gives me error .</p>
  <p>Google\ApiCore\ApiException
  { &quot;message&quot;: &quot;The caller does not have permission&quot;, &quot;code&quot;: 7, &quot;status&quot;: &quot;PERMISSION_DENIED&quot;, &quot;details&quot;: [ { &quot;@type&quot;: &quot;type.googleapis.com/google.ads.googleads.v9.errors.GoogleAdsFailure&quot;, &quot;errors&quot;: [ { &quot;errorCode&quot;: { &quot;authorizationError&quot;: &quot;USER_PERMISSION_DENIED&quot; }, &quot;message&quot;: &quot;User doesn't have permission to access customer. Note: If you're accessing a client customer, the manager's customer id must be set in the 'login-customer-id' header. See https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid&quot; } ], &quot;requestId&quot;: &quot;pKHgfIr99F5XApaPFBnrLQ&quot; } ] }</p>
  <p>my adsapi.ini</p>
  <pre><code>[GOOGLE_ADS]
  ; Required Google Ads properties.
  name = &quot;Google Ads&quot;
  developerToken = &quot;*****-*******_*&quot;
  ; Optional. Set a friendly application name identifier.
  userAgent = &quot;Scraper&quot;
  
  ; Optional additional AdWords API settings.
  ; endpoint = &quot;https://adwords.google.com/&quot;
  ; isPartialFailure = false
  
  ; Optional setting for utility usage tracking in the user agent in requests.
  ; Defaults to true.
  ; includeUtilitiesInUserAgent = true
  
  [ADWORDS_REPORTING]
  ; Optional reporting settings.
  ; isSkipReportHeader = false
  ; isSkipColumnHeader = false
  ; isSkipReportSummary = false
  ; isUseRawEnumValues = false
  
  [OAUTH2]
  ; Required OAuth2 credentials. Uncomment and fill in the values for the
  ; appropriate flow based on your use case. See the README for guidance:
  ; https://github.com/googleads/googleads-php-lib/blob/master/README.md#getting-started
  
  ; For installed application or web application flow.
  clientId = &quot;**********************&quot;
  clientSecret = &quot;********************&quot;
  refreshToken = &quot;***********************&quot;
  
   For service account flow.
  ; jsonKeyFilePath = &quot;INSERT_ABSOLUTE_PATH_TO_OAUTH2_JSON_KEY_FILE_HERE&quot;
  ; scopes = &quot;https://www.googleapis.com/auth/adwords&quot;
  ; impersonatedEmail = &quot;INSERT_EMAIL_OF_ACCOUNT_TO_IMPERSONATE_HERE&quot;
  
  [SOAP]
  ; Optional SOAP settings. See SoapSettingsBuilder.php for more information.
  ; compressionLevel = &lt;COMPRESSION_LEVEL&gt;
  ; wsdlCache = &lt;WSDL_CACHE&gt;
  
  [PROXY]
  ; Optional proxy settings to be used by SOAP requests.
  ; host = &quot;&lt;HOST&gt;&quot;
  ; port = &lt;PORT&gt;
  ; user = &quot;&lt;USER&gt;&quot;
  ; password = &quot;&lt;PASSWORD&gt;&quot;
  
  [LOGGING]
  ; Optional logging settings.
  ; soapLogFilePath = &quot;/soap.log&quot;
  ; soapLogLevel = &quot;INFO&quot;
  ; reportDownloaderLogFilePath = &quot;path/to/your/report-downloader.log&quot;
  ; reportDownloaderLogLevel = &quot;INFO&quot;
  ; batchJobsUtilLogFilePath = &quot;path/to/your/bjutil.log&quot;
  ; batchJobsUtilLogLevel = &quot;INFO&quot;
  </code></pre>