Jobber Api 60 Minute Refresh Token Problem Solved :)

:wrench: How to Connect Jobber’s API to Xano & Make— Step-by-Step (With Token Refresh + Webhooks)

:light_bulb: IMPORTANT: Jobber’s API access token expires every 60 minutes, and the refresh token is rotated. If you’re not updating it properly in your database, your whole system will break every hour. This is the full walkthrough I wish I had.


:white_check_mark: STEP 1: Create a Jobber Developer App

Go to Jobber’s Developer Portal:
:backhand_index_pointing_right: https://developer.getjobber.com

Click “Create New App” — this gives you:

  • Client ID

  • Client Secret

  • Redirect URI (this is VERY important — read below)


:repeat_button: What Is the Redirect URI?

The Redirect URI is where Jobber sends the user back to you after they log in and authorize your app.

If you’re using Xano, you’ll want to create a public endpoint that will:

  • Accept the ?code=XYZ in the URL from Jobber

  • Exchange that code for an access token and refresh token

  • Save both into your Xano database

:white_check_mark: You must paste this exact public Xano endpoint URL into the Redirect URI field inside your Jobber developer app settings.


:locked_with_key: STEP 2: User Authorizes the App (Authorization URL)

You’ll need to generate a URL like this and send it to your user:

CopyEdit

https://api.getjobber.com/api/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_XANO_REDIRECT_URI&response_type=code

When the user clicks this:

  • They log into Jobber

  • Jobber redirects them back to your Xano endpoint with a ?code=XYZ


:inbox_tray: STEP 3: In Xano, Exchange Code for Tokens

In your Xano redirect endpoint, use the code to make a POST request to Jobber’s token URL:

CopyEdit

POST https://api.getjobber.com/api/oauth/token

With this body:

json

CopyEdit

{ "grant_type": "authorization_code", "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "redirect_uri": "YOUR_SAME_REDIRECT_URI", "code": "THE_CODE_FROM_URL" }

:white_check_mark: This will give you:

  • access_token (expires in 60 mins)

  • refresh_token (expires soon and changes every time you use it)

  • expires_in: usually 3600 seconds


:floppy_disk: STEP 4: Save Tokens to Xano Database

Create a table in Xano, e.g. jobber_tokens, with fields:

  • access_token

  • refresh_token

  • last_updated

  • Optional: user_id, company_id, etc.

After calling the token endpoint, store both tokens in this table.


:counterclockwise_arrows_button: STEP 5: Refresh Tokens Every 50–55 Minutes

Because tokens expire in 60 minutes, I created a new Xano endpoint to refresh them.

Make a POST request to this:


CopyEdit

POST https://api.getjobber.com/api/oauth/token

With this body:

json

CopyEdit

{ "grant_type":"refresh_token","client_id":"YOUR_CLIENT_ID","client_secret": "YOUR_CLIENT_SECRET","refresh_token":"STORED_REFRESH_TOKEN" }

:warning: Jobber rotates the refresh_token every time. You MUST update both tokens each time or you’ll be locked out.


:robot: STEP 6: Use Make to Call Xano Every 50 Minutes

Now go to Make and:

  • Create a scenario that runs every 50 minutes

  • Add an HTTP module that calls your Xano refresh endpoint

  • That’s it — now your tokens stay up-to-date


:hook: STEP 7: Set Up Webhooks in Jobber for Client or Job Creation

If you want to do automations like “when a new client is created” or “a new request comes in,” go back to your Jobber developer app and:

  1. Scroll down to Webhooks

  2. Choose the event (like client.created)

  3. Set the webhook URL — this is your Make webhook URL (you’ll get this from a Make webhook module)

This lets Make know when something changes in Jobber.


:brain: Helpful Tips

  • :counterclockwise_arrows_button: Use Xano to handle token storage and refreshing

  • :gear: Use Make to run automations (and refresh tokens if needed)

  • :sos_button: If you get stuck, just ask ChatGPT:

    “How do I use Xano to call an OAuth2 token endpoint and store the response?”
    “How do I build a refresh token endpoint in Xano?”


:warning: Common Mistakes

:cross_mark: Mistake :white_check_mark: Solution
Access token stops working every hour You’re not refreshing it correctly
Using the same refresh_token multiple times You MUST update your refresh token every time you refresh
Forgot to add redirect URI to Jobber app Go back and add it or it won’t work
Trying to call Jobber API directly from Make Use Xano as a middleware for authentication and token storage

:speech_balloon: Final Words

This setup took me a while to figure out — not because it’s super advanced, but because Jobber doesn’t have great tutorials, and most examples online skip over Xano or Make

If you follow these steps closely, you can:

  • Automate everything

  • Stay authenticated

  • Run custom workflows in Make.

If you’re stuck or unsure, just ask ChatGPT the exact question you’re stuck on. It’s how I figured this out.

If you need help, feel free to tag me — but ChatGPT can walk you through how to push data to an API, store tokens in Xano, or refresh tokens with a custom endpoint.

:grinning_face:

1 Like