01Visible AI notice
Public pagesTells visitors they are talking to an AI system. One script tag, 24 EU languages.
Not checked yetLive sandbox · No login · No cookies
Paste a URL to check its public frontpage for an AI notice. Then try the call log and the approval gate right here, with no login.
What we check
We fetch the public frontpage over HTTPS, with no cookies, and look for an AI chat widget and a visible AI notice. Nothing is stored.
The three AI Act controls
One on your public pages, two on your server
Tells visitors they are talking to an AI system. One script tag, 24 EU languages.
Not checked yetLogs every model call as a keyed fingerprint, chained to the one before. Records stay in Frankfurt.
Not visible to a URL scanHolds refunds, deletes and outgoing emails until a person approves in Slack, Teams or email.
Not visible to a URL scanTry it live
Flip the switch, send a test prompt, then approve or block the held €240 refund. Everything runs in your browser with sample data.
Chat
Message 1 of 3
Event log
fra1
Calls logged 1,284Keyed HMAC SHA256
Agent action
stripe.refunds.create · €240
Refund €240 on order #4821
Held for approval in SlackInstall
Start with one script tag on any website. Wrap your model client on the server for the call log and the approval gate.
Add EU AI Act transparency, call logging and human approval to saltvig.example with Spurvik. Make these four changes, then list every file you changed.
1. AI notice (EU AI Act Article 50(1)). On every page with an AI chat, assistant or AI-generated content, add this tag just before </body>:
<script src="https://spurvik.com/badge.js" data-system="saltvig.example" defer></script>
2. Call log with zero prompt text. On the server, log every AI model call to Spurvik. Either install the SDK (npm i spurvik@1.0.8) and wrap the model client with withSpurvik, or POST each call to https://console.spurvik.com/api/v1/telemetry with the header "Authorization: Bearer <SPURVIK_API_KEY>". Send only a keyed HMAC-SHA256 digest of the prompt and output, keyed with SPURVIK_CONTENT_HASH_SECRET (generate a random secret of at least 16 characters; it stays on our server). Never send raw prompt or output text: 0 bytes of it may leave the server.
3. Human approval gate. Before any tool or action that takes a payment, issues a refund, sends an email or deletes data, create an approval request at https://console.spurvik.com/api/v1/hitl (same Bearer key) and wait for a person to approve it. If it is rejected or not approved, do not run the action.
4. Keys. Ask me for SPURVIK_API_KEY. I create it at https://console.spurvik.com/signup?appUrl=saltvig.example. Store SPURVIK_API_KEY and SPURVIK_CONTENT_HASH_SECRET as server-side environment variables only, never in browser code or the repo.
Docs: https://spurvik.com/docsPricing
Prices exclude VAT and are for businesses. The free plan needs no credit card.
The SDK and local MCP server for one app.
€0/mo
No credit card needed
Hosted approvals and records for a live product.
€19/mo
or €190/yr, 2 months free
More volume and a longer record.
€79/mo
or €790/yr, 2 months free
Share your Lovable, Webflow, Shopify, WordPress, or GitHub link. We wire your AI notice, approval gates, and DPO report in 24 hours — includes 1 full year of Pro (€190 value).
Need custom volume or retention? Talk to us about Enterprise