Updates
What shipped.
Dated from the commits that shipped it, in the words the platform's own state document uses. An entry appears when something a customer can touch changes, not for every commit, and never ahead of the code.
The API reference is public
GET /api/v1/openapi.json answers without a credential. It is generated from the route table, names no identifier or secret, and leaves out the platform's own machinery; live calls authenticate exactly as before.
Cursor pagination on every list that grows
Devices, sessions, events, customers (now searchable), resellers and campaigns page by an opaque (time, id) cursor, so a batch written in one instant is never repeated or skipped. Defaults to 100, up to 500.
Discord presence, the /link code in the portal, keys on the Customers page
The bot shows online through a no-intent gateway connection; a holder pastes the code /link gives them into the portal; staff see and issue a customer's keys from the Customers page.
Custom hostnames issue certificates at the edge
A verified custom host is registered with Cloudflare for SaaS and served under its own certificate; the edge dispatches the holder-facing surfaces there and nothing else.
Protected builds
Per-holder builds with a signed watermark trailer and per-artifact sealing, queued with coalescing, delivered through recorded grants, revocable with every artifact; provenance approval on release files.
White labeling
Brands carry a logo, an accent and a support address. Custom hostnames are proven by DNS TXT, and the portal, storefront and hosted sign-in are served there under that seller's brand alone.
The platform operator control plane
A separate sign-in population for platform operators with its own cookie, sessions and immutable audit; support reads and cannot act.
Live client notifications
GET /v1/auth/stream: a signed server-sent event stream that tells a running session it ended or its configuration changed. The heartbeat stays the authority; a severed stream changes nothing.
Analytics and the review queue
Analytics that count the rows and carry denominators; review rules that raise deduplicated flags for a human, with no score. Events partitioned by month with retention.
Communications
Transactional mail from your templates under your brand, and campaigns to holders with per-recipient state and opt-out.
Linked external accounts
A holder links a Steam account the provider confirms; the worker polls its status within a budget; history is append-only and windowed.
The migration engine
Export an organization as a manifest with checksums; import an Obsidian archive, a KeyAuth export, CSV or JSON as a dry run with a report, then run one transaction at a time and resume without duplicates.
Floating licensing
A seat budget per license; a session is the lease; the budget holds under a race; a reduction never ejects a running session.
Referrals and earned rewards
A referral code is a coupon with an owner, credited as time at once or as cash through a human-settled ledger; earned rewards accrue from recorded activity.
Catalog: bundles, invites, coupons
Bundles fan out atomically by code, by staff and by order; product invites claim once per product per holder; coupons converge to the provider and discounts are captured.
Storefront
One public page per organization with a catalog, live announcements and the applications' public status.
Typed configuration, preferences, advisory rollout
Versioned application configuration with public, authenticated and server-only visibility in the signed answer; holder preferences; version rollout policy carried in the init payload.
Six SDKs, one contract, a CLI
JavaScript, Python, Go, Rust, C# and C++20 judge the runtime's answers by one set of vectors; a hosted sign-in bridges into a runtime session; the CLI drives the management API with a credential from the environment.
The official Discord bot
Slash commands under Discord's signature; roles that follow licenses and entitlements through the outbox, removed only where the platform granted them.
The end-user surface
The portal explains itself: each entitlement's source, each denial in the seller's words, announcements, orders, and a per-user export.
The forward event feed
Events in exact sequence after an opaque, scope-bound cursor; a limits contract; a consumer example that restarts without repeating.
License lifecycle
A license's time is an append-only account: stack, freeze and unfreeze, compensation in bounded chunks, and terminations that carry the operator's reason signed to the SDK.
Commerce and fulfilment
SellAuth and a signed custom contract normalise every storefront into orders; fulfilment runs paid lines through recorded steps exactly once, with replay and reconciliation.
Hosted authentication
Authorization Code + PKCE for a seller's own software: exact-match redirects, license gating, EdDSA ID tokens, rotating refresh tokens with reuse detection.
Releases and file delivery
Versions on named channels with files in private object storage, uploaded straight to the bucket under signed URLs, entitlement-gated, downloaded through immutable grants.
The event outbox and webhooks
Events sequenced by a single relay; webhook deliveries signed under a rotating secret, retried with backoff, dead-lettered, inspectable attempt by attempt and replayable.
The management API
Scoped bearer credentials bound to an application or the organization, optionally confined to products, rotated with a grace period; the staff API as one declarative route table.
Bulk issuance and retained keys
Batches issued in one transaction, keys retained encrypted and shown again only as an audited reveal; a new application can issue immediately.
Magic-link and Discord sign-in
Two more ways a holder proves access, live once the mail and Discord credentials arrived.
Deployed at obsidian.rip
The control plane, the runtime gateway at auth.obsidian.rip, the worker and the dashboard behind the shared edge; runtime authentication routed to the gateway directly, never through the dashboard.