Developer Center
Getting Started
Using Jobber’s API
Building Your App
Publishing Your App
App Template Project
Custom Integrations
Changelog

Getting Started

Getting Started

This guide walks you through everything you need to make your first successful Jobber API call. By the end, you'll have a test Jobber account, an app registered in the Developer Center, and a working query running in GraphiQL.

Before you begin

Jobber uses OAuth 2.0, not API keys. Rather than a static key copied from a settings page, a company admin for each Jobber account authorizes your app to access its data. This is what allows your app to securely serve many Jobber customers, if applicable. Step 3 covers app setup, and Step 4 provides a testing token without requiring any auth code to be written first.

There are two separate accounts involved in Jobber development:

  • Developer Center account: Your account at developer.getjobber.com, where you create and manage apps, invite teammates, and access GraphiQL.
  • Jobber account: A Jobber business account that your app connects to and reads/writes data from. One is required for testing.

These are independent accounts. Both are used throughout development.

New to GraphQL? Jobber's API uses GraphQL rather than REST. The key differences: there is a single endpoint for all requests, and you specify exactly which fields you want returned. The API returns only those fields. There are two operation types: queries (read data, equivalent to GET) and mutations (write data, equivalent to POST or PUT). Both are sent as HTTP POST requests with a JSON body. The official GraphQL introduction provides a useful overview.

Step 1: Create a Jobber developer test account

ℹ️ Note: Skip this step if you already have a Jobber account available for testing.

Use the developer testing signup link to create a developer testing account. This differs from a standard Jobber trial in that it provides a 90-day testing window without a subscription prompt. Developer test accounts are limited in features but have access to all exposed items via our API. Developer testing accounts expire after 90 days. To request an extension, email [email protected].

Step 2: Create a Developer Center account

Sign up here if you haven't already. This is your hub for managing apps, API credentials, and team access.

Invite your team (optional)

Click Invite Team Member, then enter their name and email address. After filling in these fields, click Send Invite. The recipient will receive an email about their invitation. Invitations expire after 30 days.

All team members with Two Factor Authentication enabled have the same permissions to create and manage apps on the account. They can also invite additional members to join the team.

Step 3: Create your first app

In the Developer Center, go to Apps and click New. You'll be prompted to fill in details about your app. Only the required fields are needed to get started - all fields can be edited later.

Required to create your app:

  • App name: Shown on your App Marketplace listing
  • Developer name: Your name or your company's name
  • App description: Shown on your App Marketplace listing
  • Scopes: Controls what data your app can read or write from Jobber accounts. Scopes also determine what permissions are shown to users when they connect your app. Apps that plan to be published in Jobber’s App Marketplace will be rejected if their apps exceed the scope of their need. While your app is in Draft, scopes can be freely edited. If you add scopes after publishing, existing users will need to re-authorize your app. Learn more

Required before publishing:

  • OAuth Callback URL: Where Jobber redirects users after they authorize your app. Learn more
  • Manage App URL: A deep-link for users who have already connected your app and need to manage or configure it. Learn more
  • Features & benefits: Shown on your App Marketplace listing
  • App logo: Must be PNG or SVG, perfectly square, 384×384px minimum, max 1 MB
  • Gallery images: Screenshots shown on your App Marketplace listing

Step 4: Make API Requests in GraphiQL

The Developer Center includes a sandbox that handles the OAuth flow automatically, allowing API exploration without writing any auth code.

Go to Manage Apps, click the menu next to your app, and select Test in GraphiQL.

test in graphiql

This initiates the same OAuth 2.0 authorization flow that users go through when connecting an app. An Allow Access screen will be displayed:

app authorization

After approving, you'll be redirected into GraphiQL with a live access token loaded. The token is valid for 60 minutes and is visible in the Headers section inside GraphiQL. The access token generated by GraphiQL is intended for testing only. Production apps must implement the full OAuth flow and handle refresh token rotation to maintain access. See App Authorization and Refresh Token Rotation for implementation details.

⚠️ Warning: Each Test in GraphiQL session initiates a new OAuth flow and invalidates existing refresh tokens for that app and admin. Existing access tokens remain valid until they expire, but the integration can no longer refresh them. Use a dedicated test account to avoid disrupting a live integration.

ℹ️ Note: The scopes configured on your app determine what data is accessible in GraphiQL. If a query returns no data or a permission error, verify that the relevant scope is enabled on your app.

Step 5: Make your first query

Once in GraphiQL, a pre-loaded example query will be displayed. Click the Docs icon in the top-left corner to browse the full schema.

The following query returns the name and ID of the Jobber account the token is authorized for. It works regardless of which scopes are configured and is a reliable starting point:

query GetAccount {
  account {
    id
    name
  }
}

The following example fetches the ID, job number, and title of jobs in the account:

query GetJobs {
  jobs(first: 10) {
    nodes {
      id
      jobNumber
      title
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

The first: 10 argument limits the results returned and controls query cost. Pagination arguments should always be included on collection queries. See API Rate Limits for more on how query cost is calculated.

Making requests outside GraphiQL

All GraphQL requests are sent via POST to a single endpoint:

POST https://api.getjobber.com/api/graphql

curl:

curl -X POST \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "X-JOBBER-GRAPHQL-VERSION: 2025-04-16" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ account { id name } }"}' \
  https://api.getjobber.com/api/graphql

Node.js:

async function queryJobber() {
  const response = await fetch("https://api.getjobber.com/api/graphql", {
    method: "POST",
    headers: {
      "Authorization": "Bearer <ACCESS_TOKEN>",
      "X-JOBBER-GRAPHQL-VERSION": "2025-04-16",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ query: "{ account { id name } }" }),
  });

  const result = await response.json();
  const data = result.data;
  const errors = result.errors; // present for request-level failures such as throttling or invalid arguments
}

Step 6: Next steps

  • Understand the app lifecycle: The ‘Building Your App’ section covers the full journey from development through testing and submission, if applicable.
  • Implement OAuth: App Authorization (OAuth 2.0) covers the full authorization code flow with request and response examples.
  • Set up webhooks: Setting Up Webhooks describes how to receive real-time event notifications from Jobber.

Key terms

  • App / Application: The software you're building. Published apps are installed by Jobber users from the App Marketplace via OAuth.
  • Developer Center account: Your account at developer.getjobber.com is where you manage apps and credentials.
  • Jobber account: A business account on Jobber. This is the account your app connects to and accesses data from. One Jobber account can have many users.
  • User / Team Member: An individual user on a Jobber account.
  • Developer: An entity building an app. A developer can have many apps.
  • Access token: A short-lived credential (60 minutes) used to authenticate API requests.
  • Refresh token: A longer-lived credential used to obtain new access tokens without requiring the user to re-authorize.