Scripto docs
View as Markdown

API keys

Scripto CLI keys — the scripto_ Bearer prefix, long-lived by default, named and revocable, with a surfaced last-used timestamp and an optional expiry.

The CLI authenticates with a scripto_ API key, sent as Authorization: Bearer scripto_…. Better Auth’s apiKey plugin owns these keys; a key’s owner is its referenceId (your user id).

Key policy

PropertyBehaviour
PrefixEvery CLI key starts with scripto_.
LifetimeLong-lived by default — no forced expiry. An agent can’t easily re-authenticate mid-run, so keys persist.
NamedEvery key has a human-readable name (defaults to scripto-cli for OTP-minted keys).
RevocableAny key can be revoked from web Settings → API keys or via DELETE /api/keys/[id].
Last-used surfacedA last-used timestamp is shown so a stale key is visible and killable.
Optional expiryMinting offers an optional expiry for users who want one.

The security weight for the public surface is carried by the OAuth path’s short-lived access tokens and a rate limit on the open mint endpoint — not by forcing CLI key rotation. A CLI key being long-lived is a deliberate ergonomic choice for agents.

How a key is minted

Over OTP (no browser)

scripto auth login-complete --email … --code … verifies the code and mints a key bound to your user. The raw key is returned once and stored in your active profile.

From web Settings

Create a named key in Settings → API keys, copy it once, and store it with scripto config set --api-key scripto_....

The raw value is shown once

A key’s raw secret is returned only at creation — by login-complete, or by POST /api/keys. It is never retrievable again. Listing keys (GET /api/keys) returns metadata only (id, name, prefix, start, timestamps), never the secret.

Where keys live locally

The CLI stores keys as profiles in ~/.config/scripto/config.json (mode 0600). One key per profile; the active profile is used unless you pass --profile or --api-key. See Configuration.

Revoking

# Web: Settings → API keys → revoke.
# HTTP:
curl -sS -X DELETE https://scripto.codika.io/api/keys/<keyId> \
  -H "Authorization: Bearer $SCRIPTO_API_KEY"

Revocation is immediate; a revoked key fails the next request with unauthenticated.

Next