API and webhooks
Everything the dashboard does is available with a key. The generated reference lists every endpoint.
Authentication
curl https://glboost.com/api/v1/assets \
-H "Authorization: Bearer glb_live_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Create keys in Settings (Pro). A key has read and/or write scopes and can be pinned to a project. Keys are stored hashed; the dashboard shows the value once. Each key has a token bucket of 120 requests refilling at 2 per second; over the limit you get 429 with Retry-After.
Prefer not to hand-roll requests? @glboost/sdk types every endpoint from this document and adds uploadModel, waitForReady, and signUrl; the glboost CLI wraps it for scripts and CI. See SDK and CLI.
Uploading
POST /api/v1/uploads { projectId, filename, bytes } → { assetId, versionId, uploadUrl }
PUT <uploadUrl> the file bytes
POST /api/v1/uploads/:versionId/complete → variants queuedThen poll GET /api/v1/assets/:id or wait for the variant.ready webhook. Replace a model by passing assetId to the first call.
Main endpoints
/me- Who the key or session is: the org and plan, the active project, the key name and scopes.
/assets, /assets/:id, /assets/:id/restore- List and search (q, tag, deleted=true for the trash); read; update (name, visibility, viewer settings, hotspots, tags, projectId to move); delete to the trash, then ?permanent=1 to purge; restore.
/assets/:id/versions/:versionId, …/reviews- Version notes; review decisions (approve / request changes) that publish the version under the project's publish-on-approval mode.
/assets/:id/thumbnail, …/thumbnail/render- Upload a captured poster, or render the poster and the 1200 × 630 og image in a headless browser.
/projects, /projects/:id- List, create (Pro and up), update delivery settings and publish-on-approval, delete empty projects. Org-wide keys pick the project with the X-GLBoost-Project header.
/assets/:id/variants- Request a variant by spec or by { budgetBytes, target }.
/assets/:id/compat, /exports- Compatibility report; glTF zip and C header exports.
/assets/:id/sign- Mint a signed URL for a private asset.
/assets/:id/comments, /comments/:id- Read and post comments; resolve or delete.
/shares, /shares/:id, /shares/:id/events- Share links for an asset or collection and their audit log.
/collections, /collections/:id- Create, order, and delete collections.
/environments- Upload and list custom environment maps.
/usage- Rolled-up usage, live delivery stats, and share activity.
/keys, /webhooks- Manage keys and webhooks (dashboard session only).
/billing/checkout, /billing/portal, /billing/switch-interval- Start a Checkout (monthly or yearly), open the Customer Portal, switch the billing interval (owners, dashboard session only).
Plan limits answer 402 with { error, plan, used, limit, upgradeUrl }; file size limits answer 413.
Webhooks
Register an https URL in Settings with the events you want: asset.ready, variant.ready, variant.failed, share.viewed, share.downloaded, comment.created, version.approved, version.changes_requested, usage.threshold (80% and 100% of a plan allowance, once per metric and month). Deliveries are JSON { id, event, createdAt, data } and are retried with backoff (1 minute to 12 hours, six attempts).
X-GLBoost-Signature: t=1760000000,v1=<hex hmac-sha256(secret, t + "." + body)>Verify by recomputing the HMAC over t.body with the webhook secret and comparing in constant time; reject timestamps older than a few minutes.
The full reference with schemas is at /docs/api and as OpenAPI JSON.