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.

Serverens adresse · Login: ingen.
https://altid.lenius.ai/mcp
  1. ChatGPT. Indstillinger → Apps → Avanceret → slå Udviklertilstand til → Opret app. Navn: AltID, MCP-serverens URL (nedenfor), godkendelse: ingen. Vælg derefter appen i en samtale (+ → AltID).

  2. Claude (claude.ai og desktop). Indstillinger → Connectors → Tilføj brugerdefineret connector. Navn: AltID, URL (nedenfor). Slå den til i samtalen under værktøjer.

  3. Claude Code. Kør kommandoen nedenfor i terminalen.

    claude mcp add --transport http altid https://altid.lenius.ai/mcp
  4. Andre 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_checkmin_age, reference?Starter et tjek; svarer med link, QR-kode (i kortet) og id.
get_age_checkid, wait_seconds? (≤ 25)Status: pending, approved, failed, expired eller revoked. Virker også på gamle verifikationer.
revoke_age_checkid, revoke_tokenTrækker verifikationen tilbage (kortets knap).
list_age_limits–De aldersgrænser, AltID kan svare på.

Forløbet i en chat

  1. Brugeren: "Bekræft min alder på 18 år".
  2. Assistenten kalder start_age_check({ min_age: 18 }) og viser kortet: QR-kode på computeren, "Åbn AltID app" på telefonen.
  3. Brugeren godkender i AltID. Kortet skifter til "Over 18 år" og giver assistenten besked.
  4. 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:

  • pending venter på AltID (højst 15 minutter)
  • approved godkendt; verificationUrl kan deles og slås op for altid
  • failed error.code: claim_not_satisfied, rejected, verification_failed eller cancelled
  • expired intet svar inden for 15 minutter
  • revoked trukket 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.

digitaliser.dk/altid/vejledninger-altid