Pool Office Manager API

Complete reference for the GraphQL and REST APIs

Overview

The Pool Office Manager API provides programmatic access to manage pool service operations including appointments, customers, services, invoices, quotes, and more. The primary API is GraphQL-based, with additional REST endpoints for file operations and integrations.

GraphQL Endpoint

All GraphQL requests are sent to a single endpoint:

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

Request Format

GraphQL requests should include the query in the request body and the authorization token in the headers:

curl -X POST https://api.poolservicemanager.com/graphql \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer pom_live_<your_api_key>" \
  -d '{
    "query": "query { me { id email } }"
  }'

Pagination

The API supports two pagination patterns:

Cursor-based (infinite)

Use infinite* queries for cursor-based pagination. Pass first, after, and an optional selector argument for filtering.

query {
  infiniteCustomers(first: 20, after: "cursor_value", selector: { search: "John" }) {
    edges {
      node {
        id
        firstName
        lastName
      }
      cursor
    }
    pageInfo {
      hasNextPage
      endCursor
    }
  }
}

Page-based (paginated)

Use paginated* queries for offset-based pagination. Pass limit and offset arguments.

query {
  paginatedCustomers(limit: 20, offset: 0) {
    edges {
      node {
        id
        firstName
        lastName
      }
    }
    pageInfo {
      hasNextPage
      total
    }
  }
}

Filtering and Search

All list queries accept a selector argument for filtering and search:

query {
  paginatedCustomers(limit: 20, offset: 0, selector: {
    filters: { status: ACTIVE }
    search: "search term"
  }) {
    edges {
      node {
        id
        firstName
        lastName
      }
    }
  }
}

Error Handling

GraphQL errors are returned in the errors array:

{
  "data": null,
  "errors": [
    {
      "message": "Not authorized",
      "extensions": {
        "code": "FORBIDDEN"
      }
    }
  ]
}

Current User

Use the authenticatedUser query to retrieve the currently authenticated user and their organization details:

query {
  authenticatedUser {
    id
    email
    firstName
    lastName
    organization {
      id
      name
    }
  }
}

Rate Limiting

API requests are rate-limited per organization. When limits are exceeded, requests will return a 429 Too Many Requests status code.