Forum Discussion

StephanieDevin2's avatar
StephanieDevin2
Qrew Trainee
7 years ago

Webhook to create Quickbooks Online invoice?

I'm having trouble using a webhook to create a quickbooks online invoice when a new record is added in quickbase. The trouble is authentication...I have a Quickbooks online developer key for our account, I'm just not quite sure where to plug it in. From what I gather, I need a GET first with that key, then I can POST. Can anyone advise if what I'm attempting is possible (without a 3rd party service)?

10 Replies

  • Hi Stephanie,

    I did a little bit of research on the Quick Books Online API and they have a pretty standard oAuth flow for obtaining access to their API (see attached image). Unfortunately I don't think this is achievable (at least in a very secure way) via a single webhook.

    Please use this as a reference on the below: https://developer.intuit.com/docs/00_quickbooks_online/2_build/00_build

    As you see in the image in order to make the actual API call to create an Invoice; you need to do the following:



    1) Send a request (GET) using your client key/redirect URI of the app you set up in Quick Books developer

    Request:
    GET https://appcenter.intuit.com/connect/oauth2?
    client_id=Q3ylJatCvnkYqVKLmkH1zWlNzNWB5CkYB36b5mws7HkKUEv9aI& response_type=code& scope=com.intuit.quickbooks.accounting& redirect_uri=https://www.mydemoapp.com/oauth-redirect& 
     state=security_token%3D138r5719ru3e1%26url%3Dhttps://www.mydemoapp.com/oauth-redirect&;

    Response: https://www.mydemoapp.com/oauth-redirect?state=security_token%3D138r5719ru3e1%26url
    %3Dhttps://www.mydemoapp.com/oauth-redirect&code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&realmId=1231434...

    2) Take the Authorization Code from the response and make a request for an access token:

    Request:

    POST https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer HTTP/1.1  Accept: application/json  Authorization: Basic UTM0dVBvRDIwanp2OUdxNXE1dmlMemppcTlwM1d2      NzRUdDNReGkwZVNTTDhFRWwxb0g6VEh0WEJlR3dheEtZSlVNaFhzeGxma1l      XaFg3ZlFlRzFtN2szTFRwbw==  Content-Type: application/x-www-form-urlencoded  Host: oauth.platform.intuit.com  Body: grant_type=authorization_code&  code=L3114709614564VSU8JSEiPkXx1xhV8D9mv4xbv6sZJycibMUI& 
    redirect_uri=https://www.mydemoapp.com/oauth-redirect

    Response:

    {   "token_type": "bearer",   "expires_in": 3600,   "refresh_token":"L311478109728uVoOkDSUCl4s8FDRvjHR6kUKz0RHe3WtZQuBq",  "x_refresh_token_expires_in":15552000,  "access_token":"eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..KM1_Fezsm6BUSaqqfTedaA.  dBUCZWiVmjH8CdpXeh_pmaM3kJlJkLEqJlfmavwGQDThcf94fbj9nBZkjEPLvBcQznJnEmltCIvsTGX0ue_w45h7_  yn1zBoOb-1QIYVE0E5TI9z4tMUgQNeUkD1w-X8ECVraeOEecKaqSW32Oae0yfKhDFbwQZnptbPzIDaqiduiM_q  EFcbAzT-7-znVd09lE3BTpdMF9MYqWdI5wPqbP8okMI0l8aa-UVFDH9wtli80zhHb7GgI1eudqRQc0sS9zWWb  I-eRcIhjcIndNUowSFCrVcYG6_kIj3uRUmIV-KjJUeXdSV9kcTAWL9UGYoMnTPQemStBd2thevPUuvKrPdz3ED  ft-RVRLQYUJSJ1oA2Q213Uv4kFQJgNinYuG9co_qAE6A2YzVn6A8jCap6qGR6vWHFoLjM2TutVd6eOeYoL2bb7jl  QALEpYGj4E1h3y2xZITWvnmI0CEL_dYQX6B3QTO36TDaVl9WnTaCCgAcP6bt70rFlPYbCjOxLoI6qFm5pUwGLLp  67JZ36grc58k7NIyKJ8dLJUL_Q9r1WoUvw.ZS298t_u7dSlkfajxLfO9Q" 
    }

    3) You can then use that access token to make API Calls (like your invoice webhook here). You'll notice that it expires in 3600 seconds (1 hour) and you can use the refresh token to generate a new access token for future API Calls -- this is a pretty standard security measure.

    So in summary this cannot be achieved via a single webhook without performing a few authentication steps with Quickbooks

    Since you need to be able to make a few requests prior to your create invoice, I would suggest the following as options:

    1) Use Workato/Zapier's http connectors; you could achieve this easily. Basically your webhook would call your integration recipe, perfrom steps 1-2, and then create your invoice.

    I'd imagine those products have ways to authenticate to Qbooks without these steps (using their connectors), just by plugging in your credentials, so maybe even no need for writing http posts!


    2) Use a tool like Postman to generate your tokens and plug into your quick base webhook.

    Not ideal because you'd have to generate a new one every hour and put in your webhook; although they can be updated with the API so you could create a flow in Postman that can do all these steps with a button click.

    https://help.quickbase.com/api-guide/index.html#api_webhooks_edit.html

    I hope that was helpful, let me know if you have any questions-- I know that was a lot, but I love learning new APIs :)
    • StephanieDevin2's avatar
      StephanieDevin2
      Qrew Trainee
      Thanks so much Charlie! I appreciate the time & advice. I would rather set it up without 3rd party tools if I can help it, but I did end up giving up eventually and using workato :)
  • MeredithMoore5's avatar
    MeredithMoore5
    Qrew Assistant Captain
    Has anyone used Zapier for this? I have a client that I really don't want to add more cost to. Is it possible to do this on the free version to show him that QB will work for him in connecting to his QBks?

    If anyone has done this, can you give me a step-by-step how to of how you made it work? Currently not having much success. I feel like I am just missing some tiny thing, but I could also be way off base.


    • hhersch's avatar
      hhersch
      Qrew Captain
      Yes, I have used Zapier both using their built-in connector and a custom code/webhook solution. Using their built-in connector is far easier because they handle all of the oAuth management. Have you tried that?
  • Hi Meredith,

    I ended up using Workato...it's not a free service unfortunately, but works like a charm for keeping Quickbase synced with Quickbooks Online Invoices. I can even update them later if needed by returning the Quickbooks Invoice ID to the Quickbase record.

    Hope this helps!
    • MeredithMoore5's avatar
      MeredithMoore5
      Qrew Assistant Captain
      I know. I love Workato, but I don't think that the small client needing this has the funds for it. :( 
    • hhersch's avatar
      hhersch
      Qrew Captain
      You might want to consider evaluating Zapier vs Workato as they have different pricing models. Zapier is usually more affordable at the smaller scales.
    • MeredithMoore5's avatar
      MeredithMoore5
      Qrew Assistant Captain
      Yes, that is what I have done. It is indeed much less / free fro what I need to do. However, I was asking if any one had used Zapier, and if they had a step-by-step on what worked for them.