Files
openclaw-workspace/skills/api-gateway/references/jobber.md
2026-04-11 09:45:12 -05:00

3.6 KiB

Jobber Routing Reference

App name: jobber Base URL proxied: api.getjobber.com/api/

API Type

Jobber uses a GraphQL API exclusively. All requests are POST requests to the /graphql endpoint.

API Path Pattern

/jobber/graphql

All operations use POST with a JSON body containing the query field.

Version Header

The gateway automatically injects the X-JOBBER-GRAPHQL-VERSION header (currently 2025-04-16).

Common Operations

Get Account

POST /jobber/graphql
Content-Type: application/json

{
  "query": "{ account { id name } }"
}

List Clients

POST /jobber/graphql
Content-Type: application/json

{
  "query": "{ clients(first: 20) { nodes { id name emails { address } phones { number } } pageInfo { hasNextPage endCursor } } }"
}

Get Client

POST /jobber/graphql
Content-Type: application/json

{
  "query": "query($id: EncodedId!) { client(id: $id) { id name emails { address } } }",
  "variables": { "id": "CLIENT_ID" }
}

Create Client

POST /jobber/graphql
Content-Type: application/json

{
  "query": "mutation($input: ClientCreateInput!) { clientCreate(input: $input) { client { id name } userErrors { message path } } }",
  "variables": {
    "input": {
      "firstName": "John",
      "lastName": "Doe",
      "emails": [{"address": "john@example.com"}]
    }
  }
}

List Jobs

POST /jobber/graphql
Content-Type: application/json

{
  "query": "{ jobs(first: 20) { nodes { id title jobNumber jobStatus client { name } } pageInfo { hasNextPage endCursor } } }"
}

Create Job

POST /jobber/graphql
Content-Type: application/json

{
  "query": "mutation($input: JobCreateInput!) { jobCreate(input: $input) { job { id jobNumber } userErrors { message path } } }",
  "variables": {
    "input": {
      "clientId": "CLIENT_ID",
      "title": "Service Job"
    }
  }
}

List Invoices

POST /jobber/graphql
Content-Type: application/json

{
  "query": "{ invoices(first: 20) { nodes { id invoiceNumber total invoiceStatus } pageInfo { hasNextPage endCursor } } }"
}

List Quotes

POST /jobber/graphql
Content-Type: application/json

{
  "query": "{ quotes(first: 20) { nodes { id quoteNumber title quoteStatus } pageInfo { hasNextPage endCursor } } }"
}

List Properties

POST /jobber/graphql
Content-Type: application/json

{
  "query": "{ properties(first: 20) { nodes { id address { street city } client { name } } } }"
}

List Users

POST /jobber/graphql
Content-Type: application/json

{
  "query": "{ users(first: 50) { nodes { id name { full } email { raw } } } }"
}

Pagination

Jobber uses Relay-style cursor-based pagination:

# First page
{
  "query": "{ clients(first: 20) { nodes { id name } pageInfo { hasNextPage endCursor } } }"
}

# Next page
{
  "query": "{ clients(first: 20, after: \"CURSOR\") { nodes { id name } pageInfo { hasNextPage endCursor } } }"
}

Notes

  • Jobber uses GraphQL exclusively (no REST API)
  • Gateway injects version header automatically (2025-04-16)
  • IDs use EncodedId type (base64 encoded) - pass as strings
  • Field naming: emails/phones (arrays), jobStatus/invoiceStatus/quoteStatus
  • Rate limits: 2,500 requests per 5 minutes, plus query cost limits (max 10,000 points)
  • Old API versions supported for 12-18 months
  • Available resources: Clients, Jobs, Invoices, Quotes, Requests, Properties, Users, Custom Fields

Resources