0.3.0Launch readiness
Live on blockalt.click since 1 November 2026. The status page and /readyz show the version that is running.
0.3.0 is the launch-readiness release: a faster and harder-to-cheat proof of work, browser and server SDKs you can install, a console that walks you through installation and keeps a long-term decision history, one prepaid credit wallet per workspace with a monthly free allowance, and stronger accounts with passkeys, sessions and scoped management API keys.
Protection and API
POST /v1/siteverifyaccepts optionalremoteip(refuses a token solved from another network withwrong_client) andidempotencyKey(a retried verification returns its first result), adds the reasonspausedandwrong_client, and may returnaction,hostnameandissuedAt.- Proof of work v2: eight small puzzles solved in background workers, a published difficulty capped at 16 bits plus adaptive bits for clients that ask for many challenges and during surges. Challenges and tokens are signed with server-only keys.
GET /v1/keyslists the configuration keys to pin (Ed25519 and P-256, then standby keys); the configuration also carries a P-256 signature for browsers without Ed25519.- Test keys that always pass, always fail or run real proof of work, usable on any origin and never billed.
- Rate limits per site and per visitor network, with
Retry-Afteron every 429. Tokens BlockAlt did not issue for a site (forged, malformed, empty, expired) are counted per minute rather than logged one by one and, like replayed tokens, spend a small budget of their own, so junk sent through your forms cannot use up your site's verification budget.
SDKs
- Browser SDK:
execute(action, { signal, onProgress }),prepare(action), forms protected with data attributes, typedBlockAltErrorcodes andBlockAlt.supported(), two requests per token and no CORS preflight. A token prepared while protection was paused or unpaid is checked again before it is used. - Server SDK
@blockalt/server0.3.0 as an installable package (npm install https://blockalt.click/sdk/blockalt-server-0.3.0.tgz), with distinct reasons for invalid secrets, malformed requests, rate limits and outages, and the read guard profilesdashboard,apiandstrictwith a report-only mode. With the test secrets it gives the same answer on every call.
Console
- Guided installation with a live check for the first accepted verification, rules with versions, pause and lockdown, server keys with names and last use, a decision log with filters and CSV, long-term daily analytics, alert rules, email notifications and delivery status, site renaming and deletion.
Billing
- One prepaid credit wallet per workspace with a monthly free allowance, emails at 80 % and 100 % of the allowance, on low balance and when protection turns off, statements, receipts and CSV exports. Prices stay provisional and top-ups stay closed until they are announced.
- Only accepted verifications are billed. Refusals,
pausedandunpaidanswers are free.
Accounts and team
- Sign-up by emailed link, BlockAlt's own proof of work on the account forms, passkeys, a session list with idle timeout, a fresh second factor for sensitive changes (also invitations, server keys, site deletion, pausing or locking down protection and notification destinations), security notices by email, ownership transfer, an audit log, workspace export and deletion, and management API keys with scopes.
Compatibility notes
Scripts you pinned keep working.
Version 1 scripts under
/v1/assets/(with Subresource Integrity) keep their flow and stay served (a visitor network that asks for so many challenges that it would need more than the 20 bits they can solve is answered 429 until it slows down); your server code for 0.2.0 keeps working, because new response fields and reasons are optional. Treat reasons you do not know as refusals.SIEM webhooks: the signature header changed.
BlockAlt-Signatureis nowt=<unix seconds>,v1=<hex HMAC-SHA-256 of "<t>.<raw body>">, so receivers can refuse replays. The raw-body signature moves toBlockAlt-Body-Signaturefor the transition; switch your receiver to the timestamped check (how). Slack and Discord destinations are not affected."Disabled" protection becomes "Paused".
A site that had protection turned off refused every action in 0.2.0. From 0.3.0 that state is paused: actions pass unchecked and unbilled (siteverify answers
success: truewith the reasonpaused). Refusing every action is now the explicit Lockdown in the console (pause and lockdown). If you turned protection off to block traffic, choose Lockdown.Billing counts only accepted verifications.
Usage is rated about every 30 seconds and posted to the ledger about once an hour; the balance never crosses zero or your warning threshold without the posting happening at once. The rating that uses up your credit goes below zero by at most one rating cycle of usage, or one block of 1,000 if rating has fallen behind; nothing counted after the credit ran out is charged (details).
Usage history from 0.2.0.
0.2.0 also counted refused verifications in the daily usage. The upgrade takes out the refusals still on record (the last 7 days); older days of the usage history, in the console and in the usage CSV (
accepted_verifications), still include them. From 0.3.0 only accepted verifications are counted.New reason
suspended.A site or workspace that BlockAlt support suspends for abuse refuses configuration, tokens and siteverify (never billed); the console shows support's note. When several states apply, the first of suspended, lockdown, paused, unpaid decides: lockdown now also holds while a site is paused.