Posts tagged with rest

I'm simply trying to construct a test script that can change/mutate a specific campaign budget using the REST interface of the Google Ads API on Google Apps Scripts but I keep on running into the following error:

Exception: Request failed for https://googleads.googleapis.com returned code 400. Truncated server response: { "error": { "code": 400, "message": "Invalid JSON payload received. Unexpected token.\nvalidateOnly=true&pa\n^", "status": "INVALID_... (use muteHttpExceptions option to examine full response)

The relevant function code is as follows:

//API specific variables const developer_token = {DEVELOPER TOKEN}; const parent_mcc_id = "xxxxxxxxxx"; //Temporary placeholder values var child_customer_id = "xxxxxxxxxx"; var budget_id = "xxxxxxxxxx";   let headers = {      Authorization: "Bearer " + ScriptApp.getOAuthToken(),      "developer-token": developer_token,      "login-customer-id": parent_mcc_id   };   //Make API call to retrieve each Google Ads account   try{     let requestParams = {      method: "POST",      contentType: "application/json",      headers: headers,      payload: {        operations:        [         {           updateMask: "amount_micros",           update:{             resourceName: "customers/" + child_customer_id + "/campaignBudgets/" + budget_id,             amountMicros: "60000000"           }         }        ],       "partialFailure": true,       "validateOnly": true,       "responseContentType": "RESOURCE_NAME_ONLY"       }     }          var url = ("https://googleads.googleapis.com/v11/customers/{CHILD ACCOUNT ID}/campaignBudgets:mutate");     Logger.log(requestParams.payload);     var postChange = UrlFetchApp.fetch(url, requestParams);   }   catch(e) {    Logger.log(e);   } 

I have used similar functions with queries in the payload portion to get data through the Google Ads API, place the data in an array and dump it into a spreadsheet, so I know that my developer token, mcc ids, and child account ids are correct. Any help would be greatly appreciated!

I am trying to track a Click conversion with Google Ads using the Rest API but I can't find any helpful resources.

Right now the user flow looks like this:

User clicks on Ad -> User opens Website -> User downloads the Flutter App (gclid will be passed via dynamic links) -> User Signs up -> New Customer.io Event will be triggered (contains gclid) -> Upload conversion to Google Ads

The problem lies with the last step. In customer.io I can only use a Rest Call to upload the converion to Google Ads. I cannot use the client library of Google and I can't figure out from the documentation which call exactly I have to make here. (Unfortunatly Google itself is advising against using the Rest API but also states that it is possible by itself. Also I don't have any other options here than going the route via Customer.io and making the Rest Call)

I would really appreciate any kind of help, thank you!

I'm trying to use keywords ideas with Google Ads API Rest Interface that the support provided me the curl example, I generate the access token and tested and it works!(by the way my main gole is to use curl php in the back end but i'm just testing with curl command for now) when I use this curl command to generate keywords ideas:

curl -i --request POST https://googleads.googleapis.com/v9/customers/8519781266:generateKeywordIdeas \ --header "Content-Type: application/json" \ --header "login-customer-id: 2260416591" \ --header "developer-token: EPJhOWi8NVNfcvFIoxY5LA" \ --header "Authorization: Bearer ya29.A0ARrdaM9BxaCZnArsoqMUdTMLLqimKRHTw1inCD2pjheLeRnVzV96Kxpag0pktYg8E0gHhjkD1SgKd3lExbCJQ5_KgLWibmW5ykfwCXiQp8ZB90CdtPvabPlKweToM6dYj8KnSn5mu2Z0uxkRIl2bpnFHtDUw2g" \ --data '{ "keywordSeed": { "keywords": [ "coffee" ] } }' 

It prints this error

{   "error": {     "code": 400,     "message": "Invalid JSON payload received. Closing quote expected in string.\n\n^",     "status": "INVALID_ARGUMENT"   } } 

I tried something else like getting the list of the accounts and it works

C:\Users\MostafaEzzat>curl -f --request GET "https://googleads.googleapis.com/v9/customers:listAccessibleCustomers" \ --header "Content-Type: application/json" \ --header "developer-token: EPJhOWi8NVNfcvFIoxY5LA" \ --header "Authorization: Bearer ya29.A0ARrdaM98bLbmUOuR431zfEPVpDoab8_sD0Mq8W4fhrHtrmgfX8nSaPyzcW1ooaIKRSQColaOCtsp-cYhgSxa9KPQ_RI4Ctv0o5L9jTA-VhDKweVHozpEWChqFpp4yihhQe3bfr1Fksxd5NCiWvUh1GWIaruNPA" \ {   "resourceNames": [     "customers/8519781266",     "customers/2260416591",     "customers/3084026203",     "customers/2897861276",     "customers/6210187694",     "customers/3242362947"   ] } 

Edit:

This the converted curl code it prints this error it's relating to A Outh 2.0 I used both Client ID and client secret and same error { "error": { "code": 401, "message": "Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.", "status": "UNAUTHENTICATED" } }

   $ch = curl_init();        curl_setopt($ch, CURLOPT_URL, 'https://googleads.googleapis.com/v9/customers/(8519781266):generateKeywordIdeas');        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch, CURLOPT_POST, 1);        curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n\n\"keywordSeed\": {\n    \"keywords\": [\n    \"cofee\"\n  ]\n  }\n}");                $headers = array();        $headers[] = 'Content-Type: application/json';        $headers[] = 'Login-Customer-Id: (2260416591)';        $headers[] = 'Developer-Token: (z2sb0uyekDzkMbiyNpAImg';        $headers[] = 'Authorization: Bearer (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)';        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);                $result = curl_exec($ch);        if (curl_errno($ch)) {            echo 'Error:' . curl_error($ch);        }        print_r($result) ;        curl_close($ch);         

This curl command code with my google's data

curl -i --request POST https://googleads.googleapis.com/v9/customers/(8519781266):generateKeywordIdeas \ --header "Content-Type: application/json" \ --header "login-customer-id: (2260416591)" \ --header "developer-token: (z2sb0uyekDzkMbiyNpAImg" \ --header "Authorization: Bearer (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)" \ --data '{ "keywordSeed": {     "keywords": [     "cofee"   ]   } }' 

This's the curl command line

curl -i --request POST https://googleads.googleapis.com/v9/customers/(ACCOUNT NUMBER):generateKeywordIdeas \ --header "Content-Type: application/json" \ --header "login-customer-id: (MCC ID)" \ --header "developer-token: (DEVELOPER TOKEN" \ --header "Authorization: Bearer (ACCESS TOKEN)" \ --data '{ "keywordSeed": {     "keywords": [     "cofee"   ]   } }' 

and it prints this error

 C:\Users\MostafaEzzat>curl -i --request POST https://googleads.googleapis.com/v9/customers/(8519781266):generateKeywordIdeas \ HTTP/1.0 411 Length Required Content-Type: text/html; charset=UTF-8 Referrer-Policy: no-referrer Content-Length: 1564 Date: Sat, 01 Jan 2022 18:14:44 GMT <!DOCTYPE html> <html lang=en>   <meta charset=utf-8>   <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">   <title>Error 411 (Length Required)!!1</title>   <style>     *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}   </style>   <a href=//www.google.com/><span id=logo aria-label=Google></span></a>   <p><b>411.</b> <ins>That’s an error.</ins>   <p>POST requests require a <code>Content-length</code> header.  <ins>That’s all we know.</ins> curl: (6) Could not resolve host: \ C:\Users\MostafaEzzat>--header "Content-Type: application/json" \ '--header' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>--header "login-customer-id: (2260416591)" \ '--header' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>--header "developer-token: (z2sb0uyekDzkMbiyNpAImg" \ '--header' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>--header "Authorization: Bearer (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)" \ '--header' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>--data '{ '--data' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat> C:\Users\MostafaEzzat>"keywordSeed": { '"keywordSeed":' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>    "keywords": [ '"keywords":' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>    "cofee" '"cofee"' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>  ] ']' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>  } '}' is not recognized as an internal or external command, operable program or batch file. C:\Users\MostafaEzzat>}' 

so I don't know honestly how to convert to Curl PHP and parse combine and all the parameters which is in this link https://developers.google.com/google-ads/api/rest/reference/rest/v9/KeywordPlanHistoricalMetrics