Skip to main content
5 of 6
edited tags
Daniel Ballinger
  • 103.6k
  • 40
  • 284
  • 609

session is not valid for use with the REST API

I have http request batch class with the endpoint url is set by using Named Credential in apex code

Named Credential:

  1. Given as My Domain URL

  2. Identity type as Named Principal

  3. Authentication Protocol as OAuth

  4. Authentication Provider as Salesforce

  5. I have checked Generate Authorization Header checkbox

    req.setEndpoint('callout:Createddateconversionrate/services/data/v43.0/sobjects/DatedConversionRate');

Batch class

global class CreateDatedConversionRate implements Database.Batchable<sObject>,Database.Stateful,Database.AllowsCallouts { private String sessionId; public string querystring{get;set;} global CreateDatedConversionRate(){ this.sessionId = querystring; } global Database.QueryLocator start(Database.BatchableContext BC) { String query = ''; List<AggregateResult> startDateList = [SELECT StartDate FROM DatedConversionRate GROUP BY STARTDATE ORDER BY STARTDATE DESC LIMIT 1]; System.debug(LoggingLevel.INFO,'Last exchangeDate:'+startDateList.get(0)); String startDate = DateTime.newInstance(((Date)startDateList.get(0).get('StartDate')), Time.newInstance(0,0,0,0)).format('yyyy-MM-dd'); System.debug(LoggingLevel.INFO,'query string:'+startDate); query = 'SELECT IsoCode, ConversionRate FROM DatedConversionRate WHERE STARTDATE = '+ startDate +' ORDER BY IsoCode'; System.debug(LoggingLevel.INFO,'Executed query:'+query); return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, List<DatedConversionRate> conversionList) { System.debug(LoggingLevel.INFO,'conversionList size:'+conversionList.size()); String todayDate = DateTime.newInstance(System.Date.today(), Time.newInstance(0, 0, 0, 0)).format('yyyy-MM-dd'); if(conversionList != null && conversionList.size()>0){ for(DatedConversionRate conversionRate : conversionList){ String str = '' ; str +='{ "IsoCode" : "'; str += conversionRate.IsoCode +'", "ConversionRate" : '; str += conversionRate.ConversionRate + ', "StartDate" : "'; str += todayDate + '"'; str += '}'; /*REST API CALL TO INSERT RECORDS.*/ Http h = new Http(); HttpRequest req = new HttpRequest(); req.setBody(str); req.setEndpoint('callout:Createddateconversionrate/services/data/v43.0/sobjects/DatedConversionRate'); req.setMethod('POST'); System.debug(LoggingLevel.INFO,'request body:'+req.getBody()); if(!Test.isRunningTest()){ HttpResponse res = h.send(req); System.debug(LoggingLevel.INFO,'res'+res.getBody()); System.debug(LoggingLevel.INFO,'res'+res.getStatus()); } } } } global void finish(Database.BatchableContext BC) { } } 

When i am trying to execute the Batch class.I am getting following error

{"message":"This session is not valid for use with the REST API","errorCode":"INVALID_SESSION_ID"}]

How to rectify this error?

For GET Method is working,only for POST Method is not working? please guide me for answer

user55489