https://dash.square1.dev and
all accepting either the ws-session cookie or a Bearer API key.
If all you need is “does this key work, and where do I stand on quota”,
use
GET /v1/me and
GET /v1/usage instead. They are stable, whitelisted
projections on the documented API host. Everything below is the
dashboard’s own surface.Account snapshot — GET /api/user/me
The dashboard’s session-of-record call. One request returns the profile,
quota-pool standing, per-model usage, recent requests, and leaderboard
position.
The eleven top-level keys
profile
Nineteen camelCase fields. The ones with surprises:
createdAtandlastUsedAtare epoch milliseconds (numbers). Every other timestamp inprofile—livenessBlockedAt,nextLivenessAt,passwordChangedAt,lastNickChangedAt,nicknameCooldownUntil— is an ISO 8601 string ornull. The two epoch fields are a frozen older contract.emailis the full address, unmasked. It is your own address on your own account, so the API returns it in full; the dashboard is what masks it for display. If you log this response, you are logging an email address.emailVerifiedis a boolean derived from a timestamp, not the timestamp.passkeyCountis0whenever the passkey feature is off, regardless of what is stored.nicknameCooldownUntilisnullwhenever self-service nickname change is off.
arcaId, arcaType, displayName, status,
isAdmin, isLegacy, username, sfwMode, needsMigration — are what
their names suggest. status values are covered in
Authentication.
plan
used / limit / remaining / used_pct /
resets_at / resets_in_seconds / by_model. session additionally has
active; weekly additionally has anchor_at.
used,limit, andremainingcan all three benullat once. The operator can hide absolute figures;used_pctis always present. Treatnullas “hidden”, not as zero.by_modelcounts successful requests only, so itsweightedvalues can sum to slightly less than the bucket’susedwhile requests are still in flight.pct_of_totalis a proportion withinby_model, so the percentages still add up.by_model[].weightedisnullwhen absolutes are hidden.
There is no field telling you whether absolutes are hidden — the flag
exists internally but is not included in this response. Infer it from
weighted (or used) being null.GET /v1/usage — prefer that if you only need quota.
recentRequests
Your last 20 request rows, straight from storage and therefore snake_case:
id, model_id, status, created_at, input_tokens, output_tokens,
tps, error.
Your metrics — GET /api/user/me/metrics
Aggregated statistics over your own request log.
GET /api/user/me/requests.
Query parameters
An unrecognized
range is a 400 whose message lists the allowed values.
model is not validated against the catalog — it is truncated to 128
characters and used as-is. A model id you can’t call, or one that doesn’t
exist, returns an empty result rather than an error. That is deliberate:
validating would turn this parameter into an oracle for models you can’t
see.Response
A bare object (no{success, data} wrapper), entirely snake_case:
range · model · since · until · bucket_seconds · totals ·
latency · tps · tokens · tools · errors · by_model · byok ·
series
Points worth knowing:
- Ratios are
nullwhen the sample is empty, never0.totals.success_rate,tokens.cache_rate,tools.with_tools_rate, and everylatency.*percentile follow this rule — zero activity must not read as total failure. latencyreportsttfb_p50/ttfb_p95/duration_p50/duration_p95over successful rows only.errors.by_codeis{code, tier, count}per code, anderrors.by_tieraggregates by the same three tiers described in Errors.tools.choicesis a truncated top-N distribution oftool_choicevalues, with unset folded intounset. It is client-supplied free text, so entries are length-limited.byokis a subset oftotals, not a separate population, and carries aby_providerbreakdown of your own registered providers. It is all zeroes with an emptyby_providerwhen you have no BYOK traffic.
Recent requests — GET /api/user/me/requests
Row-level access to your own request log.
limitdefaults to 20 and is capped at 50.- Invalid
limitvalues do not error. A non-number, a negative, or an empty string silently becomes the default; anything above the cap is clamped. Check the echoedlimitif it matters. - This is a ceiling, not pagination — there is no cursor.
error_codeisnullon success and otherwise one of the documented error codes.byokandfell_backare booleans only: whether the request used one of your own credentials, and whether it fell back to the pool. The provider itself is not on the row — per-provider figures come from thebyokblock of the metrics endpoint above.
GET /api/user/me/metrics.
SFW toggle — POST /api/user/sfw
Turns the account-level safe-mode blur on or off for generated images.
sfw_mode sits next to success, not inside a
data object. Any body value other than the boolean true is read as
false, so the endpoint never rejects a malformed body; it just turns the
mode off. The current value is also in profile.sfwMode on
GET /api/user/me.