Jobber Developer API

Jobber's Developer API is a GraphQL API for accessing and modifying data on Jobber accounts. Top-level query objects include Clients, Requests, Quotes, Jobs, Invoices, Visits, Assessments, Properties, Products, Services, Expenses, TimeSheetEntries, Users, Accounts, and CustomFieldConfigurations. Authentication is OAuth 2.0 with scoped access tokens issued via the Jobber Developer Center; access tokens are passed in the `Authorization: bearer ...` header and requests are versioned with the `X-JOBBER-GRAPHQL-VERSION` date-based header. Rate limiting combines a 2,500 requests / 5 minutes DDoS guard with a leaky-bucket GraphQL query-cost budget surfaced through the `extensions.cost` response envelope.

Jobber Developer API is published by Jobber on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 3 JSON Schema definitions.

Tagged areas include Field Service Management, GraphQL, Home Service, Scheduling, and Invoicing. The published artifact set on APIs.io includes API documentation, a getting-started guide, rate-limit docs, a changelog, an OpenAPI specification, a JSON-LD context, 1 Naftiko capability spec, and 3 JSON Schemas.

Documentation

Specifications

Examples

Schemas & Data

Other Resources

OpenAPI Specification

jobber-developer-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Jobber Developer API
  version: '2025-04-16'
  description: |
    The Jobber Developer API is a GraphQL API for accessing and modifying data on Jobber accounts.
    A single HTTPS endpoint accepts POST requests containing GraphQL `query`, `variables`, and
    `operationName` fields. Authentication is OAuth 2.0 bearer access tokens. API versioning is
    date-based and selected via the `X-JOBBER-GRAPHQL-VERSION` header. Rate limiting uses a
    leaky-bucket query-cost system in addition to a 2,500 requests per 5 minutes DDoS guard.
  contact:
    name: Jobber API Support
    email: [email protected]
    url: https://developer.getjobber.com
  license:
    name: Jobber Developer Terms of Service
    url: https://developer.getjobber.com
servers:
  - url: https://api.getjobber.com
    description: Jobber production GraphQL endpoint
paths:
  /api/graphql:
    post:
      operationId: executeGraphQLQuery
      summary: Execute A GraphQL Query Or Mutation
      description: |
        Single GraphQL endpoint for executing queries and mutations against the Jobber Developer API.
        Top-level query objects include Clients, Requests, Quotes, Jobs, Invoices, Visits,
        Assessments, Properties, Products, Services, Expenses, TimeSheetEntries, Users, Accounts,
        and CustomFieldConfigurations. Mutations support create / edit / delete operations on most
        resources, plus archive, activate, and event-style transitions (e.g. invoice approval,
        payment recording).
      tags:
        - GraphQL
      parameters:
        - name: X-JOBBER-GRAPHQL-VERSION
          in: header
          description: Date-based API version to pin the request to (e.g. `2025-04-16`).
          required: false
          schema:
            type: string
            example: '2025-04-16'
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GraphQLRequest'
            examples:
              listJobs:
                summary: List Jobs
                value:
                  query: |
                    query SampleQuery {
                      jobs {
                        nodes {
                          id
                          jobNumber
                          title
                        }
                      }
                    }
              listClients:
                summary: List Clients With Pagination
                value:
                  query: |
                    query Clients($first: Int!, $after: String) {
                      clients(first: $first, after: $after) {
                        nodes { id firstName lastName companyName emails { address } }
                        pageInfo { hasNextPage endCursor }
                      }
                    }
                  variables:
                    first: 25
      responses:
        '200':
          description: GraphQL response. `data` contains the result; `errors` contains any errors. `extensions.cost` includes throttling cost metadata.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GraphQLResponse'
        '401':
          description: Unauthorized — invalid or missing access token.
        '429':
          description: Too Many Requests — DDoS limit (2500 / 5 min) or GraphQL cost throttling.
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: OAuth 2.0 Access Token
  schemas:
    GraphQLRequest:
      type: object
      required:
        - query
      properties:
        query:
          type: string
          description: GraphQL document containing one or more operations.
        variables:
          type: object
          additionalProperties: true
          description: Variables referenced by the GraphQL document.
        operationName:
          type: string
          description: Name of the operation to execute when the document contains multiple.
    GraphQLResponse:
      type: object
      properties:
        data:
          type: object
          additionalProperties: true
          nullable: true
        errors:
          type: array
          items:
            $ref: '#/components/schemas/GraphQLError'
        extensions:
          type: object
          properties:
            cost:
              $ref: '#/components/schemas/CostExtension'
    GraphQLError:
      type: object
      properties:
        message:
          type: string
        path:
          type: array
          items:
            type: string
        extensions:
          type: object
          properties:
            code:
              type: string
              description: Error code (e.g. `THROTTLED`, `UNAUTHENTICATED`).
    CostExtension:
      type: object
      description: Query cost telemetry returned in `extensions.cost`.
      properties:
        requestedQueryCost:
          type: integer
          description: Points the API expected this query to consume.
        actualQueryCost:
          type: integer
          description: Points the query actually consumed.
        throttleStatus:
          type: object
          properties:
            maximumAvailable:
              type: integer
            currentlyAvailable:
              type: integer
            restoreRate:
              type: integer
              description: Points restored per second.