I. Smid-Woelders →
Voor ontwikkelaars

PrismPass API

Endpoints, request/response formaten en integratie-instructies. Werkende endpoints zijn live in Demo 1. Specificaties zijn ontworpen en gereed voor implementatie.

Status: ✓ Productie — werkt in Demo 1
◎ Specificatie — ontwerp gereed, implementatie volgende fase
⏳ Ontwerp — architectuur vastgesteld

Basis-URL

https://prismpass.globalsecurity.nu/api/

Sessie & Authenticatie

POST /api/sessie-check ✓ Productie

Valideert een bestaande sessie-ID. Retourneert de commitment hash als de sessie geldig is.

Request body
{ "sessieId": "string" }
Response
{
  "geldig": true,
  "commitment": "sha256:abc..."
}
POST /api/logout ✓ Productie

Invalideert een sessie server-side. De sessie-ID wordt onbruikbaar. Geen data blijft achter.

Request body
{ "sessieId": "string" }
Response
{ "ok": true }

Opslag

Items worden versleuteld opgeslagen op de server. De server ziet alleen de versleutelde inhoud — nooit de plaintext. Ontsleuteling vindt lokaal plaats op het apparaat van de gebruiker.

POST /api/item-opslaan ✓ Productie

Slaat een versleuteld item op. De server ontvangt AES-GCM ciphertext — de plaintext verlaat het apparaat nooit.

Request body
{
  "sessieId": "string",
  "inhoud": "base64-ciphertext",
  "iv": "base64-iv"
}
Response
{ "ok": true, "id": "string" }
POST /api/items-ophalen ✓ Productie

Haalt alle versleutelde items op voor een sessie. De response bevat ciphertext — ontsleuteling gebeurt client-side.

Request body
{ "sessieId": "string" }
Response
{
  "items": [
    {
      "id": "string",
      "inhoud": "base64",
      "iv": "base64",
      "tijd": "HH:MM:SS"
    }
  ]
}

PrismShield — Sensordata interface

PrismShield verwerkt alle data lokaal op het apparaat — er zijn geen server-endpoints voor sensordata. De API beschrijft wat een integrerende app moet aanleveren aan de lokale PrismShield SDK.

SDK PrismShield.analyse(sensorData) ⏳ Ontwerp

Lokale functie — geen netwerk. Analyseert sensordata en retourneert een Centroid-score. Alles blijft op het apparaat.

Input (sensorData object)
{
  "accelerometer": [x, y, z],
  "gyroscope": [x, y, z],
  "location": "hash",
  "wifi_known": true,
  "timestamp": 1714000000,
  "hrv": 45.2
}
Response (lokaal)
{
  "centroid_score": 0.82,
  "afwijking": 0.34,
  "duress": false,
  "signalen": ["beweging_ok",
               "context_bekend"]
}
duress: true activeert Duress Mode — stilletjes, zonder zichtbare reactie voor de aanvaller.
POST /api/shield/alert ⏳ Ontwerp

Stuurt een stille alert naar een vooraf ingesteld contactpersoon of nooddienst. Wordt alleen aangeroepen als lokale SDK Duress Mode activeert.

Request body
{
  "sessieId": "string",
  "centroid_score": 0.91,
  "encrypted_context": "base64"
}
Response
{
  "alert_verzonden": true,
  "sandbox": true
}

PrismID — Zero-Knowledge Proof

Endpoints voor selectieve identiteitsbewijzing. Bewijs wordt gegenereerd op het apparaat van de gebruiker en geverifieerd door de server — zonder dat de server de onderliggende data ziet.

POST /api/zkp/challenge ◎ Specificatie

Genereert een cryptografische uitdaging voor een specifieke bewijs-vraag. De client gebruikt deze challenge om een ZKP te genereren.

Request body
{
  "claim": "age_over_18",
  "context": "string"
}
Response
{
  "challenge": "hex-string",
  "expires": 1800,
  "claim": "age_over_18"
}
POST /api/zkp/verify ◎ Specificatie

Verifieert een ZKP-bewijs tegen een eerder uitgegeven challenge. Retourneert alleen ja/nee — nooit de onderliggende data.

Request body
{
  "challenge": "hex-string",
  "proof": "zkp-object",
  "claim": "age_over_18"
}
Response
{
  "verified": true,
  "claim": "age_over_18",
  "expires": 3600
}
De server ontvangt nooit geboortedatum, BSN of andere persoonsdata. Alleen het wiskundige bewijs.

PrismAdd — Interesse-tokens

Privacy Pass-gebaseerde tokens voor anonieme interesse-signalering. Gebouwd op RFC 9576 — tokens zijn unlinkable tussen sessies.

POST /api/token/issue ⏳ Ontwerp

Geeft een blind RSA-gesigneerd Privacy Pass token uit voor een interesse-categorie. Het token is niet koppelbaar aan een gebruikerssessie.

Request body
{
  "blinded_token": "base64",
  "category": "breien",
  "region": "overijssel"
}
Response
{
  "signed_token": "base64",
  "category": "breien",
  "expires": 86400
}
POST /api/token/redeem ⏳ Ontwerp

Wisselt een token in bij een publisher. Double-spend preventie zonder gebruikerstracking.

Request body
{
  "token": "base64",
  "publisher_id": "string"
}
Response
{
  "valid": true,
  "category": "breien",
  "region": "overijssel"
}
Publisher ontvangt categorie + regio. Nooit naam, sessie-ID of apparaatidentificatie.

Foutmeldingen

HTTP
Code
Betekenis
401 sessie_ongeldig Sessie bestaat niet of is verlopen
400 ontbrekend_veld Verplicht veld ontbreekt in request body
410 token_gebruikt Privacy Pass token al eerder ingewisseld
422 zkp_ongeldig ZKP-bewijs voldoet niet aan verificatie
500 server_fout Interne serverfout — geen data gelekt
Contact voor integraties

Interesse in een pilot-integratie? PrismPass werkt samen met een beperkt aantal vroege partners. Neem contact op via het profiel van I. Smid-Woelders.