CELLAR. ADMIN
← Cellar

Admin

Clients

OAuth clients + allowlist scopes. Create / revoke / reveal.

→ ADM-02

Users

List, create, delete, edit users and admin flags.

→ ADM-03

Phones / WA

LID and phone mapping, test WA send.

→ ADM-04

Force Password

Revoke tokens + force change on next login.

→ ADM-05

System Approvals

Queue + approve/deny (web or WA).

→ ADM-06

System Tokens

Inspect + revoke system JWTs.

→ ADM-07

Audit & Metrics

Events, counts, webhook health, flags, exports.

→ ADM-08

Admin scaffolding — each card is wired in its ADM-* task.

OAuth Clients

IDNAMEREDIRECT URISSECRET HASH (masked)CREATEDALLOWLISTACTIONS
Loading…

Create returns client_id/secret once. Reveal is one-time only via server. Revoke deletes client + codes/tokens. Allowlist toggles system_permission via oauth_client_allowlist.

Users

IDEMAILEMAIL_NORMOWNER_IDVERIFIEDCREATED_ATIS_ADMINACTIONS
Loading…

Create (email+password+owner_id), edit email/owner_id/verified, delete. Audit logged to cellar_events. Force password (ADM-05) also available per row.

Phones / WA — User Contacts

Edit wa_lid (e.g. 40506004344899@lid), phone (E.164 like +165****9204), and link owner_id. LID format is digits+@lid (5-20 digits), unique. WA test sends a mock or real gateway message.

USER_IDEMAILOWNER_IDPHONEWA_LIDVERIFIEDACTIONS
Loading…
Quick WA test send (admin)
POST /v1/admin/user-contacts/test-wa with {wa_lid} — mockable, validates \d{5,20}@lid.

All edits go through PATCH /v1/admin/users/{id}/contact with LID/phone validation + unique checks. Orphan owners help link existing owner rows to users.

System Approvals

polling…
IDCLIENTSCOPEMETHODSTATUSWA STATUSCREATEDEXPIRESACTION
Loading…

Admin can approve/deny directly via web (bypasses WA). WA approvals also work via reply APPROVE <code> / DENY <code> (mention required in groups). Polls every 8s.

System Tokens — JWT Inspector

⏳ Never-expire note
System tokens are 10-year JWTs (type=system, 3650d). They effectively never expire…
🔑 Password change linkage
verify_system_token checks token iat >= users.password_changed_at. Force-password revokes.
Revoke all for user:
JTIUSERCLIENTISSUED_ATLAST_USEDREVOKEDACTIONS
Loading…

GET /v1/admin/system-tokens lists system_jwt_tokens (jti, user, client, issued_at, last_used_at, revoked). DELETE /v1/admin/system-tokens/{jti} revokes single. Bulk revoke via ?user_id or POST /revoke-all. Inspect shows synthetic JWT claims (DB-derived iat/exp) + password linkage.

Metrics & Health — Overview

BOTTLES
—
USERS
—
CLIENTS
—
APPROVALS
—
Bottles by status
—
Bottles by type
—
DB size
—

Feature Flags

Loading…

Flags are env-driven. SK_SUNSET=1 → 401 on sk_. SYSTEM_PERMISSION_ENABLED defaults on.

Webhook Health

Loading…
IDWEBHOOKHTTPATTEMPTSCREATED
—

DB Migrations

FILENAMEAPPLIEDAPPLIED_AT
Loading…

Exports (CSV, no secrets)

Streams text/csv with Content-Disposition: attachment. No password_hash / secret_hash leaked — only ids, emails, allowlist flags.

Audit Log

TIMESOURCEOPOWNER / ACTORDETAILID
Loading…

Unified view: cellar_events (add/consume/patch), system_approvals (pending→approved/rejected), oauth (client/token audit), admin_audit_log. Filter by source / op / search. Pagination 50/page.