8

I am making a call to the google indexing API for job postings:

private $client;
private $httpClient;

public function initClient($kernel)
{
    $this->client = new \Google_Client();
    $this->client->setAuthConfig(JSON_KEY_HERE);
    $this->client->addScope('https://www.googleapis.com/auth/indexing');
    $this->httpClient = $this->client->authorize();
}

public function sendJob()
{
    $endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish';
    $content = "{
                    \"url\": \"URL_HERE\",
                    \"type\": \"URL_UPDATED\"
                }";

    $response = $this->httpClient->post($endpoint, array('body' => $content));
}

When making the call to the API, the response given is '403 - Forbidden' .

Any ideas what this error actually means? I have created the service account correctly but cannot replicate success from my dev enviroment.

tehhowch
  • 9,645
  • 4
  • 24
  • 42
Joe Saunderson
  • 143
  • 1
  • 8
  • Have you performed all the **Prerequisite** steps described on the [Indexing Quickstart](https://developers.google.com/search/apis/indexing-api/v3/quickstart)? – tehhowch Jul 19 '18 at 23:40
  • did you get anywhere with this? – Roger Jul 31 '18 at 14:49
  • Also having this problem after having followed the quickstart guide. – MarcGuay Aug 02 '18 at 14:38
  • [authorizing](https://developers.google.com/search/apis/indexing-api/v3/authorizing) states that only Oauth2 is supported. Could be service accounts are no longer supported as of 2022? – Linda Lawton - DaImTo Jun 27 '22 at 10:16

5 Answers5

14

After couple days of headache, here is the answer. Open your Google search console.

Prerequisite: You must already have a google service account

click the tri dot button, and click manage property owners:

click the tri dot button, and click manage property owners

add google service account email as new owners:

add google service account email as new owners

U13-Forward
  • 69,221
  • 14
  • 89
  • 114
kopi
  • 159
  • 2
  • 4
10

"Make sure that you have added the service account as an Owner in Google Search Console"

Yep. Use the following code snippet to examine the body response for a more detailed error msg.

    var body = result.Content.ReadAsStringAsync().Result;

if the error msg looks like the following, then this is the same problem.

"message": "Permission denied. Failed to verify the URL ownership."

Worth noting: The new version of the search console is lacking. At the bottom of the left-hand menu is a "go to the old version" link. Click this and then select "verification details" from the gear menu (upper right). Next, click on the link that says "verification details" (seriously!). Here, you will finally see a list of verified owners at the bottom of the page. You can add a new owner here, using the email address of your service account (addr can also be found in your json key file).

JM.
  • 678
  • 12
  • 23
  • 8
    Up vote for the **Worth noting:** section. The new version of GSC does not allow addition of an Owner, only Full or Restricted rights... and it appears that Full rights are not full enough. Thanks JM! – glennstar Mar 12 '19 at 12:57
  • 1
    Worth noting is the key – shao Jul 02 '19 at 20:51
  • Also worth noting is that they now seem to just redirect the old console to the new one, so I can't add a new owner! Grrrr – adam0101 Sep 19 '19 at 22:05
  • 5
    Ok, I figured out how to add an owner on the new Search Console finally. Click 'Settings', 'Users and Permissions', then click on the ellipsis on **current** owner to Manage property owners. – adam0101 Sep 19 '19 at 22:12
  • 1
    For new Google Search Console, follow the steps mentioned by @adam0101 to add new owner – Keyul Nov 02 '19 at 07:08
5

Adding to @Glennstar's comment and @JMs reply there is no longer the old version link (perhaps I never had the old version) but if you click the 3 vertical dots to the right of user owner '(you)' and select 'manage property owners' then on the next page click each of the 'verification details' links to the right of your domain variations (example.com, http://www.example.com, https://www.example.com etc or whatever you have) and add the owner ie paste in the gserviceaccount.com email address from the json it will then say ownership delegated by current owner to that email address as well.

Once status of that email address had changed from 'full' permission to 'owner' back on the search console page I could then run the call fine and the original 403 error about being unable to verify URL ownership was gone. Thanks guys, would have been clueless without this.

edindubai
  • 151
  • 1
  • 8
4

Make sure that you have added the service account as an Owner in Google Search Console as described here: https://developers.google.com/search/apis/indexing-api/v3/prereqs#verify-site.

My problem was that we had multiple entries for the domain in the Search Console (with and without www and with and without https); after adding the service account as an owner to all 4 entries it's working.

MarcGuay
  • 747
  • 9
  • 15
1

I struggled with this today the whole day... the solution was that i forgot to activate the indexer api in the google cloud console.

HackReb
  • 107
  • 1
  • 5