API

Alle Endpunkte sind offen. Kein Schlüssel, keine Registrierung, keine Zählung. Die Antworten stehen unter derselben Lizenz wie der Datensatz.

Grundlagen

Basisadresse
https://vpn-matrix.com
Authentifizierung
keine
Cross-Origin
offen für alle Herkünfte
Format
JSON, UTF-8, sofern nicht anders angegeben
Lizenz
CC-BY-SA-4.0
Nutzungsgrenze
keine harte Grenze. Wer den Gesamtbestand braucht, lädt einmal den Export statt neunzig Profile einzeln.
Zwischenspeicher
Antworten tragen cache-control und dürfen zwischengespeichert werden. Der Datenbestand ändert sich in Tagen, nicht in Sekunden.
Stabilität
Die Schlüssel der Kriterien sind stabil und die verlässliche Grundlage für eigene Auswertungen. Neue Felder können jederzeit dazukommen, deshalb sollten Auswertungen unbekannte Felder ignorieren statt daran zu scheitern.

Endpunkte

GET/api/provider/{slug}

Ein Anbieterprofil mit allen belegten Zellen und deren Quellen.

Zellen ohne Wert und Zellen mit der Konfidenzstufe unbekannt werden weggelassen. Der Block coverage nennt die Anzahl der Kriterien, der belegten Zellen und der Zellen mit mindestens einer Quelle.

Parameter

slug
Der Slug des Anbieters, zum Beispiel mullvad. Die Liste aller Slugs steht im Gesamtexport.
locale
Sprache der Anmerkungen, de oder en. Standard ist de. Werte selbst sind sprachneutral.

Fehler

404
Unbekannter Slug.

Beispielantwort

{
  "license": {
    "id": "CC-BY-SA-4.0",
    "url": "https://creativecommons.org/licenses/by-sa/4.0/",
    "attribution": "vpn-matrix.com"
  },
  "generatedAt": "2026-08-03T09:12:44.201Z",
  "provider": {
    "slug": "mullvad",
    "name": "Mullvad VPN",
    "status": "active",
    "kind": "vpn",
    "parentCompany": "Amagicom AB",
    "cluster": "independent-privacy",
    "websiteUrl": "https://mullvad.net/en",
    "verified": false
  },
  "coverage": { "criteria": 158, "filled": 90, "sourced": 90 },
  "data": {
    "logging.activity_logs": {
      "value": "no",
      "confidence": "confirmed",
      "note": "Razzia 04/2023: die Behörden gingen ohne Daten.",
      "sources": [
        {
          "url": "https://mullvad.net/en/blog/2023/4/20/...",
          "title": "Mullvad VPN was subject to a search warrant",
          "retrievedAt": "2026-08-03",
          "archiveUrl": "https://web.archive.org/web/2026/...",
          "kind": "vendor_doc"
        }
      ]
    }
  }
}
Live aufrufen

GET/api/cell/{provider}/{criterion}

Eine einzelne Zelle mit Wert, Konfidenz, allen Quellen und dem öffentlichen Verlauf.

Der Verlauf enthält ausschließlich publizierte Änderungen. Offene Vorschläge und abgelehnte Einreichungen erscheinen nie, weder hier noch anderswo.

Parameter

provider
Der Slug des Anbieters.
criterion
Der Schlüssel des Kriteriums, zum Beispiel logging.activity_logs. Der Punkt muss nicht kodiert werden.

Fehler

404
Unbekannter Anbieter oder unbekanntes Kriterium.

Beispielantwort

{
  "provider": { "slug": "mullvad", "name": "Mullvad VPN" },
  "criterion": {
    "key": "logging.activity_logs",
    "labelDe": "Aktivitäts- und Traffic-Logs",
    "labelEn": "Activity and traffic logs",
    "type": "enum",
    "unit": null,
    "volatile": false,
    "categoryKey": "logging"
  },
  "datapoint": {
    "value": "no",
    "confidence": "confirmed",
    "noteDe": "...",
    "noteEn": "...",
    "lastAuthorType": "editor",
    "updatedAt": "2026-08-03T09:12:44.201Z"
  },
  "sources": [
    {
      "url": "https://mullvad.net/en/help/no-logging-data-policy",
      "title": "No-logging of user activity policy",
      "retrievedAt": "2026-08-03",
      "archiveUrl": null,
      "kind": "vendor_doc"
    }
  ],
  "history": []
}
Live aufrufen

GET/api/export

Der komplette Datenbestand in einer Antwort.

Enthält Kategorien, den Kriterienkatalog und alle Anbieter mit ihren Datenpunkten und Belegen. Diese Antwort ist mehrere hundert Kilobyte groß und sollte zwischengespeichert werden.

Parameter

format
json oder csv. Standard ist json.

Fehler

400
Unbekanntes Format.

Beispielantwort

{
  "license": { "id": "CC-BY-SA-4.0", "attribution": "vpn-matrix.com" },
  "generatedAt": "2026-08-03T09:12:44.201Z",
  "counts": { "providers": 85, "criteria": 161, "datapoints": 728, "sources": 969 },
  "categories": [{ "key": "company", "labelDe": "...", "labelEn": "...", "sortOrder": 1 }],
  "criteria": [
    {
      "key": "logging.activity_logs",
      "categoryKey": "logging",
      "type": "enum",
      "enumValues": ["no", "yes", "unclear"],
      "labelDe": "...", "labelEn": "...", "helpDe": "...", "helpEn": "...",
      "sortOrder": 23, "volatile": false, "system": false
    }
  ],
  "providers": [
    {
      "slug": "mullvad",
      "name": "Mullvad VPN",
      "status": "active",
      "kind": "vpn",
      "parentCompany": "Amagicom AB",
      "verified": false,
      "datapoints": [
        {
          "criterionKey": "logging.activity_logs",
          "value": "no",
          "confidence": "confirmed",
          "noteDe": "...", "noteEn": "...",
          "sources": [{ "url": "https://...", "retrievedAt": "2026-08-03", "kind": "vendor_doc" }]
        }
      ]
    }
  ]
}
Live aufrufen

GET/api/health

Betriebszustand der Anwendung und der Datenbank.

Antwortet mit 200 nur, wenn auch die Datenbank erreichbar ist, sonst mit 503. Gedacht für Container-Orchestrierung und Uptime-Prüfungen, nicht für Datenabfragen.

Beispielantwort

{
  "status": "ok",
  "database": "up",
  "latencyMs": 3,
  "time": "2026-08-03T09:12:44.201Z"
}
Live aufrufen

Zitieren und weiterverwenden

Die Lizenz verlangt Namensnennung und Weitergabe unter gleichen Bedingungen. Wer eine Zelle zitiert, zitiert bitte auch deren Quelle mit Abrufdatum. Genau darum geht es hier: nicht wir sind der Beleg, sondern die Quelle hinter der Zelle.

Creative Commons Attribution-ShareAlike 4.0 International

Für KI-Assistenten

Unter /llms.txt liegt eine kurze, maschinenlesbare Beschreibung des Projekts, der Lizenz, der Endpunkte und der Zitierbitte. Wer aus diesem Datensatz zitiert, soll die Quelle hinter der Zelle mitnennen und nicht nur uns.

/llms.txt