Developer docs

Reach your workspace from anywhere.

A Quiver workspace is a live, schema-defined data layer — write records in, read aggregated metrics back out. Reach it three ways, all hitting the same API with the same workspace key:

This is the same layer the Quiver Labs archer game runs on — a static site that gained persistence, a live leaderboard, and a real-time presence count with no backend of its own.

Mental model

The concepts behind every endpoint

Workspace

A tenant — your dashboard. Everything (files, metrics, keys) is scoped to one workspace, and a key is bound to exactly one.

File

The primary record (a game, a transaction, a person…). It has a `type` from your config, JSON `data`, and an optional status that flows through phases.

Data field → KPI

Every field you define pushes its current value to a queryable KPI. That’s what powers cross-file metrics — you query aggregates, you don’t write SQL.

Metric

A config-defined aggregate (count, sum, max, grouped breakdowns, derived expressions). Read a computed value over the API; the engine does the math.

Auth

Workspace API keys

Every door authenticates with a qvr_ workspace key. Mint one in Desk → Settings → API keys (shown once — store it like a password), or from the CLI with quiver workspace apikey create.
Bearer authread vs. write

Pass the key as a bearer token on every request. A qvr_ key has full access to its workspace; GET requests are reads, POST/PATCH/DELETE are writes. (OAuth access tokens can be narrowed to a read-only scope — see the API page.)

every request
Authorization: Bearer qvr_xxxxxxxxxxxx

Quickstart

A 60-second round-trip

Create a record, then read a metric back — the whole loop, over curl.
base url · https://tellquiver.ai
# 1 — create a file (a "score" in a leaderboard workspace)
curl -X POST https://tellquiver.ai/api/files \
  -H "Authorization: Bearer $QUIVER_KEY" \
  -H "content-type: application/json" \
  -d '{"type":"score","title":"Alice · 250","data":{"player":"Alice","value":250,"category":"hard"}}'
# → { "ok": true, "file": { "id": "…", "type": "score", "title": "Alice · 250" } }

# 2 — read a computed metric back
curl "https://tellquiver.ai/api/metrics?id=leaderboard" \
  -H "Authorization: Bearer $QUIVER_KEY"
# → { "metric": { "id": "leaderboard", "metric": 250, "breakdown": [ … ] } }

Same key, same endpoints from the CLI or an MCP client. Pick the door that fits how you build.