SmartQ.tv SmartQ.tv
Developer Platform

SmartQ.tv Developer API Documentation

Developer API access to venue integrations across ShiftQ, SportsQ, MatriQ, Campaigns, and BevQ, plus upcoming OrderBoard resources, plus a narrowly scoped MatriQ Auto Scheduler emergency-stop action. Build against location-aware module endpoints, predictable business-date behavior, and production-safe 24-hour access tokens.

Quickstart

Start with discovery, then follow modules

Exchange your application credentials from a trusted backend, then discover what the current application can see and request only the module resources you need.

1. Request access token

POST the Client ID and one-time Client Secret to the token endpoint. Cache the returned token.

POST /oauth/token
2. List locations

Call the locations endpoint first to discover accessible locations, enabled modules, and granted resources.

GET /v1/GROUP_ID/locations
3. Read modules

Call ShiftQ, SportsQ, MatriQ, Campaigns, OrderBoard, or BevQ endpoints as needed, respecting token scopes.

GET /v1/GROUP_ID/LOCATION_ID/shiftq
curl --request POST https://api.smartq.tv/oauth/token \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=client_credentials" \
  --data-urlencode "client_id=YOUR_CLIENT_ID" \
  --data-urlencode "client_secret=YOUR_CLIENT_SECRET"

curl -H "Authorization: Bearer ACCESS_TOKEN" \
  https://api.smartq.tv/v1/GROUP_ID/locations

Authorized customers may use Customer API output in their owned or controlled websites, mobile applications, digital experiences, in-venue systems, and internal business applications, subject to their subscription, scopes, customer agreement, and the Customer API Terms of Use.

Postman

Official workspace downloads

SmartQ publishes official Postman collection and environment files for the full Developer API.

Collection

Includes discovery, ShiftQ, SportsQ, MatriQ, Campaigns, OrderBoard, and BevQ requests.

/postman/SmartQ-Customer-API.postman_collection.json
Environment

Shared variables include tokenUrl, clientId, clientSecret, token, tokenExpiresAt, baseUrl, groupId, and locationId.

/postman/SmartQ-Customer-API.postman_environment.json
Authentication

Server-to-server client credentials

New applications receive a visible Client ID and one-time Client Secret. Exchange them at POST https://api.smartq.tv/oauth/token using form-encoded grant_type=client_credentials, client_id, and client_secret. The response contains an opaque Bearer token with expires_in: 86400 and no refresh token.

Token response
{
  "access_token": "REDACTED",
  "token_type": "Bearer",
  "expires_in": 86400
}
API request header
Authorization: Bearer ACCESS_TOKEN

Cache and reuse it; renew several minutes before its fixed 24-hour expiry.

Keep the Client Secret and tokens on your backend only. Do not request a token per API call. Application revocation immediately invalidates every issued token, and current scopes and location restrictions apply on every request. Existing Support-created sqtok_... credentials remain temporarily supported until explicitly revoked after migration. Review the Customer API Terms of Use before enabling production access.
Scopes

Available scopes

Tokens can be granted one or more resource scopes depending on the integration surface needed by the customer.

locations:read

Discover accessible locations, enabled modules, granted endpoints, and refresh metadata.

On demand
sportsq:read

Canonical SportsQ provider, package, exact-date schedule, status, participant, venue, media, and location viewing-option data, plus the legacy guide compatibility route.

Every 5 minutes
shiftq:read

Covers ShiftQ overview, sales, labor, kitchen, clock-ins, POS menu, employees, reservations, POS reservations alias, and group leaderboard resources.

Sales, labor, kitchen ticket averages, clock-ins, M.O.D. coverage, role groups, POS stock, and group leaderboard every 5 minutes. Kitchen business-date buckets retain 366 days. Employee data every 5 to 15 minutes. Reservations on POS reservation digest ingest.
matriq:read

Covers MatriQ overview, gateway, devices, provider availability, and Auto Scheduler resources.

Status refreshes on authorized product events, including device reporting, availability changes, and Auto Scheduler publish, draft-change, stop, or emergency-stop events.
matriq:ai-scheduler:stop

Allows a location-scoped or group-scoped token to queue an emergency stop for the MatriQ Auto Scheduler.

Immediate action queue. Resulting Auto Scheduler state syncs when the stop event is applied by the gateway.
campaigns:read

Campaign availability, assets, status, and current location or group campaign data.

On demand
orderboard:read

Reserved for current and future OrderBoard Developer API resources.

Coming soon
bevq:read

Location-specific ordered BevQ sections, canonical beverage and producer metadata, public images, and current POS-enriched sizes, prices, and availability.

Targeted projection updates; conditional ETag sync supported
Examples

Full response examples live on a dedicated page

The detailed scope and endpoint examples are maintained separately from the main documentation homepage so they can show full response shapes without turning this page into a payload dump.

Developer API Examples

Full representative payloads for discovery, ShiftQ, SportsQ, MatriQ, Campaigns, OrderBoard, BevQ, and MatriQ Auto Scheduler emergency stop.

/examples
What you will find

Expanded JSON examples, refresh metadata, token metadata, nested response structures, reservations, leaderboard payloads, and action endpoints.

Endpoints

Module resources

The SmartQ Developer API is organized around discovery endpoints and module-aware location resources.

Discovery

Locations, location summary, group modules, and location modules.

/locations, /GROUP_ID/modules, /LOCATION_ID/modules
ShiftQ

Operational sales, labor, Toast Kitchen ticket averages, POS menu, clock-ins, employee, reservation, canonical review, and leaderboard data.

/shiftq, /shiftq/sales, /shiftq/labor, /shiftq/kitchen, /shiftq/clock-ins, /shiftq/pos-menu, /shiftq/employees, /shiftq/reservations, /shiftq/toastReservations, /shiftq/reviews, /GROUP_ID/shiftq/group-leaderboard
SportsQ

Canonical provider environment, configured packages and regional networks, plus exact-date programming with separate schedule/provider health, status, scores, participants, images, venue, and viewing options.

/sportsq (legacy), /sportsq/provider, /sportsq/packages, /sportsq/YYYY-MM-DD

The date is a required path segment. Exact-location and exact-date reads do not substitute prior, latest, cross-location, or group-wide availability. Existing integrations can continue using the legacy SportsQ routes; new integrations should use the canonical contracts.

MatriQ

Gateway health, devices, provider availability, Auto Scheduler state, and emergency-stop control.

/matriq, /matriq/gateway, /matriq/devices, /matriq/providerAvailable, /matriq/aiScheduler, POST /matriq/aiScheduler/emergency-stop
Provider Availability

Direct alias for provider-ready TV availability, provider logo URLs, and SportsQ event enrichment.

/providerAvailable
Campaigns

Group-level and location-level campaign inventory and status data.

/campaigns
OrderBoard

Current placeholder endpoint announcing OrderBoard Developer API availability as work completes.

/orderboard
BevQ

Group/location discovery plus the complete location menu with ordered sections and one enriched canonical BevQ item per beverage. POS identity, availability, sizes, prices, and ISO 4217 currency live inside each item; no widget ID or separate POS join is required.

/GROUP_ID/bevq, /LOCATION_ID/bevq, /LOCATION_ID/bevq/menu

Use a server-side bearer with bevq:read. Echo the exact returned ETag in If-None-Match; unchanged menus return 304 with no body. Keep the bearer out of browser and mobile code.

Subscribe to bevq.menu.updated in SmartQ Admin for prompt backend refresh, then fetch the menu with the normal bearer and ETag. Keep scheduled conditional reconciliation as a fallback.

Read the complete BevQ webhook reference for payloads, headers, HMAC verification examples, retries, testing, and troubleshooting.

Business Date

SmartQ follows the POS business-day boundary

Sales and ShiftQ business-date resources do not flip at midnight. They follow the location timezone and the POS business-day rule of 4:01 AM through 4:00 AM.

Example

If the local time is YYYY-MM-DD 3:30 AM, the active business date remains YYYYMMDD.

What this affects

ShiftQ sales, labor snapshots, Developer API sales resources, and overnight POS fetches that rely on business date.

Refresh Cadence

Every resource declares how fresh it should be

Most responses include a refresh block so downstream developers do not need external documentation to understand cadence.

ShiftQ clock-ins

Typically refreshed every 5 minutes from computed ShiftQ snapshots.

ShiftQ sales and labor

Sales snapshots, compare data, and labor summaries refresh every 5 minutes after POS polling completes. Both endpoints accept ?businessDate=YYYYMMDD, and the API also accepts businessDay=YYYYMMDD. Both use the local 4:01 AM to 4:00 AM business day.

ShiftQ employees

Employee, job, shift, and time-entry collections typically refresh every 5 to 15 minutes.

POS menu stock

Stock overlay refreshes every 5 minutes. Scheduled syncs patch changed menus, groups, subgroups, and items into the existing base snapshot. Full base rebuilds are reserved for initial sync or manual forced sync.

Provider availability

Returns the latest authorized location availability for the requested business date, with an explicit unavailable, stale, or partial health state when exact-date data is not complete.

Auto Scheduler status

Published Auto Scheduler state syncs when the draft is published, changed, stopped, or emergency-stopped.

{
  "refresh": {
    "cadence": "Every 5 minutes",
    "description": "Clock-in alerts, role coverage, and attendance exceptions refresh from ShiftQ computed snapshots every 5 minutes."
  }
}
Response Shape

Normalized response envelope

All endpoints use a common outer shape so clients can treat resources consistently.

{
  "ok": true,
  "version": "v1",
  "resource": "shiftq/clock-ins",
  "groupId": "GROUP_ID",
  "locationId": "LOCATION_ID",
  "generatedAt": "ISO_TIMESTAMP",
  "data": {
    "location": {
      "id": "LOCATION_ID",
      "name": "LOCATION_NAME",
      "timezone": "IANA_TIMEZONE"
    },
    "refresh": {
      "cadence": "CADENCE_STRING",
      "description": "REFRESH_DESCRIPTION"
    }
  }
}
HTTP Status

Common API responses

  • 200 OK: request succeeded.
  • 401 Unauthorized: token missing or invalid.
  • 403 Forbidden: token revoked, expired, outside allowed locations, or missing the required scope.
  • 404 Not Found: group, location, or resource was not found.
  • 429 Too Many Requests: application rate limit exceeded.

Limits use a one-minute UTC window per Customer API application across all of its endpoints, enabled modules, and issued access tokens. Additional access tokens do not add quota. Successful responses include RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, and RateLimit-Policy. A 429 also includes Retry-After. The token endpoint returns OAuth-style invalid_request, unsupported_grant_type, or generic invalid_client errors without sensitive details. The application owner receives one warning when usage first reaches 80% and one exceeded alert per window; repeated throttled requests do not generate repeated emails.