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/graphqlRequest 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.