Authorization header
with a Bearer token issued from the dashboard. There’s no OAuth flow,
no per-request signing — just one header, one key.
Where to get a key
verseodin.com/dashboard/settings/api-keys → Generate key. The plaintext key is shown exactly once in the modal. Copy it, store it somewhere your app can read it (env var, secrets manager), then dismiss the modal. If you lose it, revoke and generate a new one — there’s no way to recover the original.One key, two surfaces
The samevso_… key authorises:
- The REST API documented here (
https://verseodin.com/api/v1/*) - The Verseodin Claude / MCP connector
What the key authorises
A key is bound to the user who generated it. It can read:- Every universe owned by that user
- Every history row, prompt, metric belonging to those universes
- Modify any data (the API is GET-only)
- Read other users’ universes (each request goes through ownership verification)
- Issue new keys, change account settings, or do anything outside the data-read scope
Key rotation playbook
If you suspect a key is leaked (committed to git, leaked in logs, copy-pasted into a chat):1
Generate the new key first
Open the dashboard, click Generate key, copy the new
vso_… value.2
Update your apps to use the new key
Push the new key to your secrets manager / env vars, redeploy.
3
Revoke the leaked key
In the dashboard, click Revoke on the old key. The next request that uses it gets
401 authentication_error immediately.Failure modes
The 401 vs 403 split is intentional: 401 means “we don’t know who you are or your key is dead”; 403 means “we know who you are, you just can’t touch this resource.”