Search code examples
google-apps-scriptoauth-2.0linkedin-api

LinkedIn API OAUTH returning "grant_type" error


I am pretty new to coding, but trying to write a simple script using LinkedIn's API that will pull an organizations follower count into google app script. Before I can even query the API, I have to authenticate using oath explained in the LinkedIn API here.

This function returns with an error response

function callLinkedAPI () {

  var headers = {
    "grant_type": "client_credentials",
    "client_id": "78ciob33iuqepo",
    "client_secret": "deCgAOhZaCrvweLs"
     }

  var url = `https://www.linkedin.com/oauth/v2/accessToken/`

  var requestOptions = {
    'method': "POST",
    "headers": headers,
    'contentType': 'application/x-www-form-urlencoded',
    'muteHttpExceptions': true
    };

  var response = UrlFetchApp.fetch(url, requestOptions);
  var json = response.getContentText();
  var data = JSON.parse(json);
  
  console.log(json)

  }

When I try sending the headers through I get this error as a response

{"error":"invalid_request","error_description":"A required parameter \"grant_type\" is missing"}

Solution

  • grant_type, client_id, client_secret do not go in the header of the request. Instead, try to put them in the body of the POST request with the content type x-www-form-urlencoded as you already had in the headers of the code you posted.

    For example:

    fetch('https://www.linkedin.com/oauth/v2/accessToken/', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
        },
        body: new URLSearchParams({
          grant_type: 'client_credentials',
          client_id: '78ciob33iuqepo',
          client_secret: 'deCgAOhZaCrvweLs'
        })
      })
      .then(response => response.json())
      .then(responseData => {
          console.log(JSON.stringify(responseData))
      })