Skip to content

REST API reference (v1)

Base URL: https://play.acbizglobal.net/api/v1. All requests need Authorization: Bearer sk_… and are scoped to the application that owns the key; the key's environment (test/live) selects which data you see. The API is server-to-server — it sends no CORS headers, so browsers can't call it directly.

Responses

// success
{ "success": true, "data": { … }, "meta": { … }, "request_id": "req_4f…" }

// error
{ "success": false,
  "error": { "type": "insufficient_scope", "message": "…", "status": 403 },
  "request_id": "req_4f…" }

Quote the request_id (also in the X-Request-Id header) when contacting support.

Endpoints

Method & pathScopeDescription
GET /api/v1—Key check: application & environment
GET /api/v1/gamesgames:readCatalog with credit cost and integrated flag
GET /api/v1/games/{slug}games:readOne game
POST /api/v1/games/{slug}/launchgames:launchSigned, short-lived embed URL (verified player)
GET /api/v1/applicationapplication:readName, status, domains, games
GET /api/v1/usage?from=&to=usage:readTotals, daily series, per-game usage
GET /api/v1/credits?limit=&offset=credits:readBalance, low-balance status, ledger
GET /api/v1/leaderboards/{slug}?limit=&verified_only=1scores:readBest score per player for your app
GET /api/v1/scores?game=&player_id=&limit=scores:readRecent scores
GET /api/v1/webhookswebhooks:manageList webhooks
POST /api/v1/webhookswebhooks:manageCreate (returns the secret once)
DELETE /api/v1/webhooks/{id}webhooks:manageDelete (POST …/{id}/delete also works)

Launch a game for a known player

curl -X POST https://play.acbizglobal.net/api/v1/games/mental-math-sprint/launch \
  -H "Authorization: Bearer sk_live_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"player_id": "student-1042", "ttl": 600}'
{
  "success": true,
  "data": {
    "launch_url": "https://play.acbizglobal.net/embed/game/mental-math-sprint?lt=eyJ2Ijox…",
    "expires_at": "2026-09-23T10:15:00+00:00",
    "player_id": "student-1042",
    "environment": "live",
    "embed_html": "<iframe src=\"…\" …></iframe>"
  }
}

Render launch_url in an iframe (or pass it to the SDK as launchUrl). It works once, expires after ttl seconds (60–3600, default 600), and still only loads on your allowed domains. The game must already be integrated in the application.

Usage

curl "https://play.acbizglobal.net/api/v1/usage?from=2026-09-01&to=2026-09-30" -H "Authorization: Bearer sk_live_…"
{ "success": true, "data": {
  "from": "2026-09-01", "to": "2026-09-30", "environment": "live",
  "totals": { "sessions": 18420, "rounds_completed": 40211, "credits_consumed": 18420,
              "unique_visitors": 5120, "identified_players": 3900, "requests": 31204, "error_rate_percent": 0.4 },
  "daily":   [ { "date": "2026-09-01", "sessions": 610, "rounds": 1302, "credits": 610 }, … ],
  "by_game": [ { "game": "mental-math-sprint", "sessions": 8420, "rounds": 19002, "credits": 8420 }, … ]
} }

Leaderboard

curl "https://play.acbizglobal.net/api/v1/leaderboards/code-breaker?limit=10&verified_only=1" -H "Authorization: Bearer sk_live_…"

Versioning

This is v1. We add fields and endpoints without notice (ignore unknown fields), but never remove or change the meaning of existing ones within v1.