Skip to content

Settings — API Keys

The Settings ▸ API Keys page is the admin surface for managing programmatic access to your tenant. Each issued key is a scoped credential that backend systems use to call the Athenty REST API for verifications, envelopes, clients, webhooks, and adjacent endpoints.

The page is plan-gated to Professional or higher. Starter tenants see an upgrade banner with a link to Settings ▸ Billing; Pro+ tenants see the full management surface.

Settings API Keys — Acme Financial Group demo tenant

Standard PageHeader with the title API Keys and a one-line description. The New Key button sits to the right.

If the tenant’s plan tier is below Professional, the body renders an upgrade card instead of the management UI. The card links to Settings ▸ Billing.

When the plan supports it, the body renders the issued-keys list:

  • Name + description
  • Mode pill (Live / Test)
  • Scopes badge group
  • Created, last-used, created-by columns
  • Status pill (Active / Revoked)
  • Row actions: Copy ID · Edit · Revoke

A single dialog handles both flows:

  • Create — name + mode + scopes form
  • View secret — shown once with a copy button immediately after creation, then never again

Two parallel keysets. The mode is encoded in the key itself; no header switch.

ModeAffectsBilling
LiveProduction recordsYes — counts toward plan
TestSandbox recordsNo — free

Test mode is the right default for development, CI, integration tests, and staging traffic. Live mode is only for production.

Scopes are typed strings, evaluated at request time against the endpoint’s required scope. Built-in scopes:

ScopeCapabilities
*All endpoints
verifications:read / :writeVerification list/get vs create/update/cancel
envelopes:read / :writeEnvelope read vs create/update/cancel/send
clients:read / :writeClient read vs create/update/delete
webhooks:writeWebhook CRUD
audit:readRead audit log

Wildcard * is granted by default on new keys for convenience but should be narrowed for production integrations.

The platform stores only the hashed secret on the key record:

  1. On create, a random 32-byte secret is generated server-side
  2. The hash (bcrypt + per-tenant salt) is stored
  3. The plaintext secret is returned in the create response only
  4. On every API call, the platform hashes the inbound key + compares to stored — no secret ever lives in plaintext server-side after the create response

This means Athenty operators cannot recover a lost secret. The recommended workflow is: lose secret → issue new + revoke old.

Recommended rotation for production:

  1. Issue a new key with the same scopes
  2. Update your backend to use the new key
  3. Wait for in-flight requests on the old key to drain (typically minutes)
  4. Revoke the old key

There’s no built-in graceful overlap — both keys are simultaneously valid until you revoke one. Plan rotations during low-traffic windows or during a regular deployment.

RoleViewCreateRevoke
Owner / Admin
Member
Viewer
ActionEvent
Createapi_key.created (with mode + scopes; never the secret)
Updateapi_key.updated
Revokeapi_key.revoked

Events surface in Settings ▸ Audit Log. Audit events do not contain the secret — by design.

SymptomMost likely causeFix
API Keys page shows upgrade cardPlan is StarterUpgrade in Settings ▸ Billing
Lost secret post-creationShown once onlyIssue new key + revoke old
401 on API callKey revoked, wrong mode, or bad header formatVerify key + mode + Authorization header
403 on API callScope missing for the endpointAdd scope or use *
Test traffic billedUsing Live key in test envAudit your key segregation