The ElevatedPOS catalog is available as a GraphQL API alongside the REST endpoints. Query exactly the fields you need, batch related data in a single request, and explore the schema interactively in the playground.
POST https://api.elevatedpos.com.au/catalog/graphqlOnly receive the fields you ask for — no over-fetching. Reduces payload size and speeds up client rendering.
Fetch products, categories, and modifier groups in a single HTTP request instead of three separate REST calls.
The schema is the contract. Introspect it for type safety, auto-complete, and documentation without reading a spec doc.
All GraphQL requests must include a valid JWT issued by the ElevatedPOS Auth service. Pass it as an Authorization header. Queries are automatically scoped to the orgId embedded in the token — you cannot access another organisation's data.
# Send your JWT with every request
POST /catalog/graphql
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
{
"query": "{ products(orgId: \"org_abc\") { id name } }"
}The types below represent the full set of fields available through the GraphQL API. Non-null fields are marked with !.
Fetch active products in a category with only the fields you need.
query ListProducts {
products(
orgId: "org_abc123"
categoryId: "cat_xyz"
isActive: true
limit: 20
) {
id
name
sku
basePrice
isActive
category {
id
name
}
tags
}
}
Fetch a product by ID including its category.
query GetProduct {
product(id: "prod_abc123") {
id
name
description
sku
barcodes
basePrice
isActive
categoryId
category {
id
name
sortOrder
}
tags
createdAt
updatedAt
}
}
Fetch all categories and their associated products in one round trip.
query CategoriesWithProducts {
categories(orgId: "org_abc123") {
id
name
description
parentId
sortOrder
isActive
products {
id
name
basePrice
isActive
}
}
}
Fetch modifier groups and all options linked to a specific product.
query ProductModifiers {
modifierGroups(
orgId: "org_abc123"
productId: "prod_abc123"
) {
id
name
required
minSelections
maxSelections
options {
id
name
priceAdjustment
isDefault
}
}
}
Create a new product in the catalog.
mutation CreateProduct {
createProduct(input: {
name: "Flat White"
description: "House blend with steamed milk"
sku: "BVRG-FW-001"
barcodes: ["9300675024042"]
basePrice: 5.50
categoryId: "cat_beverages"
tags: ["coffee", "hot", "popular"]
isActive: true
}) {
id
name
sku
basePrice
createdAt
}
}Update specific fields on an existing product.
mutation UpdateProduct {
updateProduct(
id: "prod_abc123"
input: {
basePrice: 6.00
isActive: false
tags: ["coffee", "hot", "seasonal"]
}
) {
id
name
basePrice
isActive
updatedAt
}
}Soft-deletes a product by setting isActive to false.
mutation DeleteProduct {
deleteProduct(id: "prod_abc123")
}Explore the full schema, write queries with autocomplete, and test mutations against your sandbox org — all without writing a line of code. The playground is powered by GraphiQL and available when the service runs in non-production mode.
Errors follow the standard GraphQL error envelope. Check the errors array for field-level detail.
{
"data": null,
"errors": [{
"message": "Unauthorized: missing orgId in token",
"locations": [{ "line": 2, "column": 3 }],
"path": ["products"]
} ]
}