Udviklere
Alderstjekket kan bruges på tre måder: fra en AI-assistent via MCP, fra din egen kode via API'et eller ved at sende brugeren til tjeksiden. Tjenesten er åben (ingen nøgle); kald begrænses pr. IP. Den er udviklet og drives af Lenius som en selvstændig tjeneste og er ikke lavet af eller tilknyttet Digitaliseringsstyrelsen.
MCP til AI-assistenter
MCP-serveren lader brugeren skrive "bekræft min alder på 18 år" i chatten. Assistenten viser et kort med link og QR-kode; kortet opdaterer sig selv, når alderen er bekræftet, og verifikationen kan sendes videre.
https://altid.lenius.ai/mcpChatGPT. Indstillinger → Apps → Avanceret → slå Udviklertilstand til → Opret app. Navn: AltID, MCP-serverens URL (nedenfor), godkendelse: ingen. Vælg derefter appen i en samtale (+ → AltID).
Claude (claude.ai og desktop). Indstillinger → Connectors → Tilføj brugerdefineret connector. Navn: AltID, URL (nedenfor). Slå den til i samtalen under værktøjer.
Claude Code. Kør kommandoen nedenfor i terminalen.
claude mcp add --transport http altid https://altid.lenius.ai/mcpAndre klienter (fx Cursor, VS Code). Tilføj serveren i klientens MCP-opsætning med typen "http" (Streamable HTTP):
{ "mcpServers": { "altid": { "type": "http", "url": "https://altid.lenius.ai/mcp" } } }
Værktøjer
| start_age_check | min_age, reference? | Starter et tjek; svarer med link, QR-kode (i kortet) og id. |
| get_age_check | id, wait_seconds? (≤ 25) | Status: pending, approved, failed, expired eller revoked. Virker også på gamle verifikationer. |
| revoke_age_check | id, revoke_token | Trækker verifikationen tilbage (kortets knap). |
| list_age_limits | – | De aldersgrænser, AltID kan svare på. |
Forløbet i en chat
- Brugeren: "Bekræft min alder på 18 år".
- Assistenten kalder start_age_check({ min_age: 18 }) og viser kortet: QR-kode på computeren, "Åbn AltID app" på telefonen.
- Brugeren godkender i AltID. Kortet skifter til "Over 18 år" og giver assistenten besked.
- Assistenten (eller get_age_check) har verification_url, som kan sendes videre og altid slås op.
API
JSON over HTTPS, CORS for alle. Fejl har formen { "error": { "code", "message" } } med koderne validation_failed (400), forbidden (403), not_found (404) og rate_limited (429). OpenAPI-beskrivelse. Aldersgrænser: 13, 15, 16, 18, 21, 23, 25, 27, 67.
1. Start et tjek
minAge (1–120) eller claim (age_over_18). Den mindste AltID-grænse, der dækker minAge, bruges. redirectUrl (https) er, hvor tjeksiden fortsætter efter godkendelse; reference er dit eget id.
curl -X POST https://altid.lenius.ai/api/v1/checks \
-H 'content-type: application/json' \
-d '{ "minAge": 18, "reference": "order-1042", "redirectUrl": "https://shop.example/thanks" }'{
"id": "k3J9xQ2mT7vWc4pL8nR5aZ",
"status": "pending",
"claim": "age_over_18",
"age": 18,
"reference": "order-1042",
"pageUrl": "https://altid.lenius.ai/c/k3J9xQ2mT7vWc4pL8nR5aZ",
"authorizationUrl": "https://app.tegnebog.dk/oid4vp?response_type=vp_token&…",
"qrUrl": "https://altid.lenius.ai/api/v1/checks/k3J9xQ2mT7vWc4pL8nR5aZ/qr.svg",
"statusUrl": "https://altid.lenius.ai/api/v1/checks/k3J9xQ2mT7vWc4pL8nR5aZ",
"websocketUrl": "wss://altid.lenius.ai/api/v1/checks/k3J9xQ2mT7vWc4pL8nR5aZ/ws",
"verificationUrl": null,
"expiresAt": "2026-10-16T15:00:00.000Z",
"revokeToken": "…"
}2. Vis det for brugeren
Send brugeren til pageUrl (enklest: siden følger AltIDs designanvisninger på computer og telefon). Eller byg det selv: vis qrUrl (QR-koden med AltID-ikonet) på computeren og authorizationUrl som knappen "Åbn AltID app" på telefonen, efter AltIDs Design Scheme.
3. Hent status
wait (op til 25 sekunder) venter, til tjekket ikke længere er pending (long polling). Statusser:
pendingventer på AltID (højst 15 minutter)approvedgodkendt; verificationUrl kan deles og slås op for altidfailederror.code: claim_not_satisfied, rejected, verification_failed eller cancelledexpiredintet svar inden for 15 minutterrevokedtrukket tilbage med revokeToken
curl 'https://altid.lenius.ai/api/v1/checks/k3J9xQ2mT7vWc4pL8nR5aZ?wait=25'{
"id": "k3J9xQ2mT7vWc4pL8nR5aZ",
"status": "approved",
"age": 18,
"completedAt": "2026-10-16T14:47:12.000Z",
"verificationUrl": "https://altid.lenius.ai/v/k3J9xQ2mT7vWc4pL8nR5aZ",
"verification": {
"level": "mdoc_crypto_verified",
"issuer": "DKTB Credential Issuer",
"issuerTrusted": true,
"deviceSignature": true,
"statusList": "valid",
"checkedAt": "2026-10-16T14:47:12.000Z"
}
}Live status (WebSocket)
websocketUrl sender { "type": "status", "check": … } ved forbindelse og ved hver ændring og lukker, når tjekket er afsluttet.
const ws = new WebSocket(check.websocketUrl);
ws.onmessage = (event) => {
const { type, check } = JSON.parse(event.data);
if (type === 'status' && check.status === 'approved') {
// Decide on your server with GET /checks/:id before granting access.
}
};Træk tilbage
revokeToken returneres kun ved start (vi gemmer kun et SHA-256-hash). Med den kan verifikationen trækkes tilbage, eller et ventende tjek annulleres; derefter viser alle opslag revoked.
curl -X DELETE https://altid.lenius.ai/api/v1/checks/k3J9xQ2mT7vWc4pL8nR5aZ \
-H 'authorization: Bearer <revokeToken>'Sikker brug
- Afgør på din server: hent GET /checks/:id dér, og stol ikke på browseren eller et skærmbillede.
- Godkend kun tjek, du selv har startet (gem id'et ved start), og brug hvert tjek én gang.
- Tjek age eller claim i svaret, så et tjek for en lavere grænse ikke bruges.
- En verifikation viser, at en person med AltID over grænsen bekræftede den på et tidspunkt, ikke hvem der viser linket frem. Start et nyt tjek, hvis det skal være personen foran dig nu.
AltIDs krav
Tjenesten følger Digitaliseringsstyrelsens Integrating with AltID 1.0.2 (EU Age Verification Profile: anmodningen som URL-parametre, svar via direct_post, efterprøvning efter Appendix D inkl. statusliste og telefonens signatur) og Modtager Design Scheme v1.0 (knapper, QR-kode, tekster). Bygger du din egen visning, skal den følge Design Scheme.