DashboardDeveloper Portal
Available from API v1.2.0

GraphQL API

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.

EndpointPOST https://api.elevatedpos.com.au/catalog/graphql

GraphQL vs REST

Precise field selection

Only receive the fields you ask for — no over-fetching. Reduces payload size and speeds up client rendering.

Batched queries

Fetch products, categories, and modifier groups in a single HTTP request instead of three separate REST calls.

Schema-driven

The schema is the contract. Introspect it for type safety, auto-complete, and documentation without reading a spec doc.

Authentication

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 } }"
}

Schema Reference

The types below represent the full set of fields available through the GraphQL API. Non-null fields are marked with !.

type Product
idID!
orgIdString!
nameString!
descriptionString
skuString!
barcodes[String!]!
basePriceFloat!
isActiveBoolean!
categoryIdString
categoryCategory
tags[String!]!
createdAtString!
updatedAtString!
type Category
idID!
orgIdString!
nameString!
descriptionString
parentIdString
sortOrderInt!
isActiveBoolean!
products[Product!]!
type ModifierGroup
idID!
nameString!
requiredBoolean!
minSelectionsInt!
maxSelectionsInt!
options[ModifierOption!]!
type ModifierOption
idID!
nameString!
priceAdjustmentFloat!
isDefaultBoolean!
input CreateProductInput
nameString!
descriptionString
skuString!
barcodes[String!]
basePriceFloat!
categoryIdString
tags[String!]
isActiveBoolean
input UpdateProductInput
nameString
descriptionString
basePriceFloat
categoryIdString
tags[String!]
isActiveBoolean

Query Examples

List products

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
  }
}

Get single product

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
  }
}

List categories with products

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
    }
  }
}

Modifier groups for a product

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
    }
  }
}

Mutation Examples

mutation

Create a product

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
  }
}
mutation

Update a product

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
  }
}
mutation

Delete (deactivate) a product

Soft-deletes a product by setting isActive to false.

mutation DeleteProduct {
  deleteProduct(id: "prod_abc123")
}

Interactive Playground

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.

Error Format

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"]
  } ]
}