An account holds up to 5 active API keys at once. All of them share the
same account quota — extra keys are for separating apps, not for buying more
capacity. See Authentication for what a key is.
Everything on this page is on https://dash.square1.dev and accepts either
the ws-session cookie or a Bearer API key — see
Account API overview.
List keys — GET /api/user/me/keys
Active (non-revoked) keys only, oldest first. No plaintext and no hash is
ever in this response.
revealable is a per-row property, not a global feature flag. Three
kinds of row coexist: legacy ws- keys (never revealable), sq-arca-
keys issued before key encryption was configured (not revealable), and
sq-arca- keys issued after (revealable). Read the flag per key.
max is the account cap. Read it rather than hardcoding 5 — it is the same
value that produces key_cap_reached.
Create a key — POST /api/user/me/keys
label is optional and truncated to 40 characters. Omit it and the key is
named 새 키.
apiKey is the only time the plaintext appears in a create response.
Store it now.
- Requires an
active account.
Delete a key — DELETE /api/user/me/keys/:id
:id must be a positive integer; anything else is 400. A key that isn’t
yours, or is already revoked, is 404 — the two are not distinguished.
Revocation is immediate. Any client still presenting that key starts
getting 401 invalid_api_key on /v1 right away. Nothing stops you from
deleting the key you are currently authenticating with.
Reveal a key — GET /api/user/me/keys/:id/reveal
Returns the full plaintext of a key you already created, for keys where
revealable is true.
- Rate limit: 30 requests/minute. See
Rate limits.
- Every successful reveal is written to the account’s audit trail. The audit
record holds the key id, never the plaintext.
- This is deliberately a separate request rather than a field on the list —
the list is fetched on every page load and would otherwise leave plaintext
in browser, proxy, and devtools history.
409 also covers the case where the stored ciphertext exists but can no
longer be decrypted. Either way the honest answer is “we don’t have the
original”, which is why it is a 409 and not a 500.
Rotate everything — POST /api/user/me/rotate-key
The panic button. Revokes every key on the account and issues one fresh
key in a single step.
This is not “add a key”. Every existing key — including the one you may
have used to make this call — stops working immediately. Use
POST /api/user/me/keys for ordinary key management.
-
Requires an
active account (403 account_unlinked otherwise).
-
60-second cooldown between rotations. Trip it and you get a
429 with
no code and no Retry-After:
-
The replacement key is labeled
기본.
-
The rotation is audited.
Rotating does not touch your browser sessions. To end those, see
Sessions.