As per the Salesforce documentation, Post-Install script can perform callouts using an async operation only.


So, I tried to do callout with future method. But, i'm not getting the session id in the future callout because of which i'm getting error while doing callout.

Note that the documentation states that a post install script:

can’t access Session IDs

so the session Id can't be included in a call to a future method.

I also tried with annotating the class as without sharing, but it didn't work. (InstallHandler runs under a special ghost user. What rights does it have?)

Is there any other way to do callout from Post-install script?

2 Answers 2


As far as I'm aware, you can only have a Session ID in a context where you're running as a real user. The post-install user is not a real user.

What pressing need do you have during post-install to go sending a Session ID out? Are you looping back to an org API or calling out to another system that needs to integrate back to Salesforce?

In any case, if you can't do the intended flow, you'll have to do what most other packages do: Offer a setup screen where an admin can click a button to complete initial setup steps. And frankly this is probably better than doing it automatically on their behalf during install, because you can get their consent explicitly.

  • Thanks @Charles T for your resposne. In my case, I want to do a callout(Org Tooling-API) and as not all the app user's are sysem administrator-it gives error for non admin user's. So, I tried to do that callout from Post-Install script. But no luck. Also, I think to introduce a setup screen. But looking at the current number of existing customer's it doesn't seems good solution. Can you help me with this. Commented Jan 28, 2019 at 13:52
  • Ideally only the admin who installs or upgrades it should need to access the setup page to complete the steps. Why do you need the tooling API on post install?
    – Charles T
    Commented Jan 28, 2019 at 14:09
  • @ Charles T, I'm totally agree with you that setup page needs to be completed by Admin user only. But, Our package don't have any setup page. So, we will have to introduce new setup page just for doing callout & the no. of existing customers will have to open that setup page once. Currently,We are using tooling API to get the Field ID in order to navigate to a standard new record page with auto-populated fields. Commented Jan 28, 2019 at 14:33
  • 2
    Aha, well why didn't you lead with that? :) So you're using this for a URL hack, right? If you're referring to the "00N" field IDs, you don't need Tooling API for that. You can query: [SELECT DeveloperName,QualifiedApiName,NewUrl,(SELECT Id, DeveloperName, DurableId FROM Fields) FROM EntityDefinition WHERE QualifiedApiName = 'MyObj__c' LIMIT 1] and then split the Durable ID field to take only the second part after the period.
    – Charles T
    Commented Jan 28, 2019 at 15:18
  • @ Charles T, You have made my day. Now, I can get the Field Id in SOQL with the above query. Still, I'm curious to know that is there any way to do a callout from post-install script. Commented Jan 29, 2019 at 10:04

This works in general for @future methods though I don't know if there are any gotchas for the PostIntall case:

  // Call the future method

// Session Id passed in to future method
public static void myFutureMethod(String sessionId) {
   // Use session Id here
  • Keith C, Thanks for your response. But as mentioned in the below salesforce documentation, we can't get session Id in the PostInstall script. (help.salesforce.com/…) Is there any other alternate solution for this? Commented Jan 28, 2019 at 11:30
  • @HK Ah I see. I'll add that point to your question and give it a +1 too.
    – Keith C
    Commented Jan 28, 2019 at 11:58
  • What about Named Credentials? In lightning we use named creds as lightning session is not API enabled? Commented Jan 28, 2019 at 19:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .