Expensify API and google script

Options
mb5
mb5 Expensify Customer Posts: 6 Expensify Newcomer

I've been trying to create a google script to interact with Expensify API, but I never can make it work and always get the same error :


This is the code : "


function createExpensifyReport() {

var reportName = "Mix_test";

var data = {

"type": "create",

"credentials": {

"partnerUserID": "My_partnerUserID",

"partnerUserSecret": "My_partnerUserSecret"

},

"inputSettings": {

"type": "report",

"report": {

"reportName": reportName

}

}

};

var options = {

"method": "post",

"headers": {

"Content-Type": "application/json",

"User-Agent": "Mozilla/5.0"

},

"muteHttpExceptions": true,

"payload": JSON.stringify({

"requestJobDescription": "Create report",

"requestData": JSON.stringify(data)

})

};

Logger.log(options.payload)


var response = UrlFetchApp.fetch("[https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations"](https://integrations.expensify.com/Integration-Server/ExpensifyIntegrations), options);

Logger.log(response.getContentText());

}

"


Evertime I run this googlescript code I get an error :

"

{"responseMessage":"'requestJobDescription' is missing","responseCode":500}

"


⁦I don't see where I go it wrong.


⁦the Logger.log gives me the right Payload :

"

{"requestJobDescription":"Create report","requestData":"{\"type\":\"create\",\"credentials\":{\"partnerUserID\":\"partnerUserID\",\"partnerUserSecret\":\"partnerUserSecret\"},\"inputSettings\":{\"type\":\"report\",\"report\":{\"reportName\":\"Ann_Mix_test\"}}}"}

"

Can anyone tell me where is my mistake?

Answers

  • mb5
    mb5 Expensify Customer Posts: 6 Expensify Newcomer
    Options

    Forget it I found a way:

      var payload = {
        requestJobDescription: JSON.stringify({
          type: 'create',
          credentials: {
            partnerUserID: "partnerUserID",   //// needed
            partnerUserSecret: "partnerUserSecret"   //// needed
          },
          inputSettings: {
          type: "report",
          policyID: policyID,   //// needed
          report: {
            title: reportName
          },
          employeeEmail: "youremployee@email.com",   //// needed
          expenses: [],
          }
        })
      };
    
    
      Logger.log(payload)
      var options = {
        'method': 'post',
        'payload': payload
        
      };
    
    
      var response = UrlFetchApp.fetch(apiUrl, options);
      var responseData = JSON.parse(response.getContentText());
      Logger.log(response)
      // Handle the response based on your specific requirements
      if (response.getResponseCode() === 200 && responseData.someKey) {
        // Successful response handling
      } else {
        // Error or unsuccessful response handling
      }
    }