Enjyn API Services
Professionelle API-Lösungen für Ihre digitalen Projekte. Sicher, schnell und zuverlässig aus Deutschland.
Wählen Sie Ihre API
Entdecken Sie unsere aktuellen API-Lösungen. Weitere APIs sind bereits in Entwicklung und werden bald verfügbar sein.
Enjyn CAPTCHA
Bot-Schutz für Ihre Website. Version 1 mit interaktiven Challenges, Version 2 mit unsichtbarer Verhaltensanalyse.
Avatar Generator
Deterministischer Avatar-Generator basierend auf E-Mail-Adressen. Perfekt für Benutzerprofile.
KYC Verify
Sichere Identitätsprüfung mit Ausweis-Fotos und automatischer Video-Liveness-Erkennung – für 31 europäische Länder. DSGVO-konform mit Auto-Löschung.
Translator Kit
Automatische Website-Übersetzung per Script-Tag. Caching, Cookie-Banner-Support und URL-Parameter.
ConsentKit
DSGVO-konformes Cookie-Consent-System mit Auto-Erkennung, Script-Blocker und 9 vorgefertigten Themes. Selbstgehostete Alternative zu Cookiebot.
Mail API
Professioneller E-Mail-Versand mit 100% Zustellgarantie. Spam-Filter resistent, zuverlässig und sicher.
API Keys benötigt?
Kontaktieren Sie uns für Ihre persönlichen API-Zugangsdaten.
Enjyn CAPTCHA Dokumentation
🎯 Live Preview — CAPTCHA v1
Testen Sie das interaktive CAPTCHA direkt hier:
📍 Script URL
https://enjyn.de/src/enjyn-captcha.js
✨ Features
- ✓ Drei Challenge-Typen (Drehen, Puzzle, Bildauswahl)
- ✓ Automatische Theme-Erkennung (Hell/Dunkel)
- ✓ Verhaltensanalyse (Mausbewegungen, Klickmuster)
- ✓ Keine Cookies, kein Tracking
- ✓ DSGVO-konform
- ✓ Mehrere Instanzen auf einer Seite
- ✓ Responsive — skaliert automatisch ab 340px Breite
🚀 Integration in 3 Schritten
Schritt 1: Script einbinden
<script src="https://enjyn.de/src/enjyn-captcha.js"></script>
Schritt 2: Container erstellen
<div id="my-captcha"></div>
Schritt 3: Initialisieren
const captcha = EnjynCaptcha.create('my-captcha', {
onSuccess: function(token) {
console.log('CAPTCHA gelöst!', token);
// Formular freigeben
},
onFail: function() {
console.log('CAPTCHA fehlgeschlagen');
}
});
⚙️ Konfigurationsoptionen
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| onSuccess | Function | - | Callback bei erfolgreicher Lösung (erhält Token) |
| onFail | Function | - | Callback bei falscher Lösung |
| onExpand | Function | - | Callback wenn Challenge geöffnet wird |
| onCollapse | Function | - | Callback wenn Challenge geschlossen wird |
| onLocked | Function | - | Callback bei temporärer Sperre (zu viele Fehlversuche) |
| theme | String | 'auto' | 'dark', 'light' oder 'auto' (erkennt Hintergrund) |
| lockoutTime | Number | 15000 | Sperrzeit in ms nach zu vielen Fehlversuchen |
| privacyUrl | String | enjyn.de/captcha-datenschutz | URL zur Datenschutzerklärung |
💡 Anwendungsbeispiele
Formular-Schutz
EnjynCaptcha.create('form-captcha', {
onSuccess: function(token) {
document.getElementById('submit-btn').disabled = false;
}
});
Download-Schutz mit Theme
EnjynCaptcha.create('download-captcha', {
theme: 'dark',
onSuccess: function(token) {
document.querySelectorAll('.download-btn').forEach(btn => {
btn.disabled = false;
});
}
});
🛡️ ENJYN CAPTCHA v2 — Unsichtbarer Schutz
CAPTCHA v2 arbeitet unsichtbar im Hintergrund. Es analysiert Mausbewegungen, Browser-Fingerprints und Nutzerverhalten, um Bots automatisch zu erkennen. Nur bei Verdacht wird eine interaktive Challenge (v1) eingeblendet.
📍 Script URL
https://enjyn.de/src/enjyn-shield.js
Hinweis: Bei Challenge-Auslösung wird enjyn-captcha.js automatisch nachgeladen.
✨ Features
- ✓ Unsichtbar — kein Widget, keine Nutzerinteraktion nötig
- ✓ Passive Verhaltensanalyse (Maus, Scroll, Tastatur)
- ✓ Browser-Fingerprinting (Canvas, WebGL, Plugins)
- ✓ Erkennung von Selenium, Puppeteer, PhantomJS
- ✓ Apple/iOS-Erkennung (erhöhter Trust-Score)
- ✓ Automatische Challenge bei Verdacht (lädt v1)
- ✓ Persistenz über Seitenreload (sessionStorage)
- ✓ Dezentes UI — kleiner Tab am rechten Rand
- ✓ DSGVO-konform — alle Daten nur clientseitig
🚀 Integration
Methode 1: Script + Auto-Init
<!-- Irgendwo im HTML: --> <div data-enjyn-shield="true"></div> <!-- Vor </body>: --> <script src="https://enjyn.de/src/enjyn-shield.js"></script>
Methode 2: Manuelle Initialisierung
<script src="https://enjyn.de/src/enjyn-shield.js"></script>
<script>
var shield = EnjynShield.init({
threshold: 40,
monitorTime: 3000,
onVerified: function(data) {
console.log('Mensch erkannt, Score:', data.score);
},
onChallenge: function(data) {
console.log('Challenge ausgelöst, Score:', data.score);
}
});
</script>
⚙️ Konfigurationsoptionen
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
| threshold | Number | 40 | Mindest-Score für automatische Verifizierung (0–100) |
| monitorTime | Number | 3000 | Wartezeit in ms bevor erste Bewertung stattfindet |
| theme | String | 'auto' | 'dark', 'light' oder 'auto' |
| privacyUrl | String | enjyn.de/captcha-datenschutz | URL zur Datenschutzerklärung |
| onVerified | Function | - | Callback wenn Nutzer als Mensch erkannt wurde |
| onChallenge | Function | - | Callback wenn Challenge ausgelöst wird |
| onScore | Function | - | Callback bei jeder Score-Berechnung |
📊 Scoring-System
Der Score baut sich durch natürliches Nutzerverhalten auf (0 = Bot, 100 = Mensch):
| Kategorie | Max. Punkte | Beschreibung |
|---|---|---|
| Apple/iOS-Erkennung | +30 | Safari + Apple-Gerät = hoher Trust |
| Browser-Fingerprint | +25 | Sprache, Plugins, Canvas, WebGL, Hardware |
| Mobile-Erkennung | +16 | Touch-Hardware, Multi-Touch, Network API, Bildschirm-Merkmale |
| Maus-/Touch-Verhalten | +42 | Natürliche Kurven, Geschwindigkeit, Richtungswechsel, Touch-Interaktionen |
| Seiteninteraktion | +25 | Verweildauer, Scrollen, Tastatur, Klicks, Formular-Eingaben |
| Automatisierung erkannt | -30 bis -40 | navigator.webdriver, Selenium, Puppeteer, PhantomJS |
🔌 Public API
// Score jederzeit abrufen
var score = EnjynShield.getScore();
// Prüfen ob verifiziert
if (EnjynShield.isHuman()) {
// Formular freigeben, Aktion erlauben
}
// Challenge manuell auslösen
EnjynShield.forceChallenge();
// Shield entfernen
EnjynShield.destroy();
💡 Anwendungsbeispiele
Formular-Schutz (ohne sichtbares CAPTCHA)
<form id="contact-form">
<!-- Formularfelder -->
<button type="submit">Absenden</button>
</form>
<script src="https://enjyn.de/src/enjyn-shield.js"></script>
<script>
EnjynShield.init({ threshold: 40 });
document.getElementById('contact-form').addEventListener('submit', function(e) {
if (!EnjynShield.isHuman()) {
e.preventDefault();
EnjynShield.forceChallenge();
}
});
</script>
🔄 v1 vs. v2 — Welche Version?
| CAPTCHA v1 | CAPTCHA v2 | |
|---|---|---|
| Sichtbarkeit | Sichtbares Widget mit Checkbox | Unsichtbar, kleiner Tab am Rand |
| Nutzeraufwand | Challenge muss gelöst werden | Kein Aufwand (automatisch) |
| Sicherheit | Hoch (visuelle Challenges) | Hoch (Verhaltensanalyse + Challenge-Fallback) |
| Ideal für | Login, Download-Gates, Registrierung | Kontaktformulare, Kommentare, allg. Schutz |
| Integration | Container + JavaScript | Ein Script-Tag reicht |
Avatar Generator Dokumentation
📍 Base URL
https://playground.enjyn.de/avatars/
✨ Features
- ✓ Deterministisch: Gleiche E-Mail = gleicher Avatar
- ✓ Keine Datenspeicherung erforderlich
- ✓ SVG-Format für perfekte Skalierung
- ✓ Anpassbare Größe (32-512px)
- ✓ Automatisches Browser-Caching
- ✓ Einfache URL-basierte Integration
📋 Parameter
| Parameter | Typ | Erforderlich | Standard | Beschreibung |
|---|---|---|---|---|
| String | Ja | - | E-Mail-Adresse für Avatar | |
| size | Integer | Nein | 256 | Größe in Pixel (32-512) |
🚀 Schnellstart
HTML
<img src="https://playground.enjyn.de/avatars/?email=user@example.com&size=128"
alt="Avatar">
JavaScript
function getAvatarUrl(email, size = 256) {
const baseUrl = 'https://playground.enjyn.de/avatars/';
return `${baseUrl}?email=${email}&size=${size}`;
}
PHP
function getAvatarUrl($email, $size = 256) {
$baseUrl = 'https://playground.enjyn.de/avatars/';
$params = http_build_query(['email' => $email, 'size' => $size]);
return $baseUrl . '?' . $params;
}
KYC Verify Dokumentation
🔀 Zwei Prüfungen
| Prüfung | Endpoint | Beantwortet |
|---|---|---|
| Identitätsprüfung mit Ausweisdokument |
/api/v1/verify |
Ist die Person, die sie zu sein behauptet? |
| Altersprüfung ohne Ausweisdokument (Beta) |
/api/v1/age/{alter} |
Erreicht die Person ein Mindestalter? |
Sie wählen je Vorgang, welche Prüfung laufen soll. Beide verbrauchen je einen Kontingentpunkt.
🧪 Identitätsprüfung testen
🧪 Altersprüfung testen
📍 API Endpoint
https://api.verify.enjyn.de
Haben Sie eine eigene Domain für den Prüfablauf freigeschaltet, verweist die
zurückgegebene verify_url auf Ihre Domain. Die API selbst rufen Sie
weiterhin unter der Adresse oben auf.
✨ Features
- ✓ 33 Länder: Deutschland voll unterstützt, 30 weitere europäische sowie Singapur und die USA in Beta
- ✓ Prüfung amtlicher Ausweisdokumente mit Abgleich der von Ihnen übergebenen Daten
- ✓ Mehrstufige Echtheits- und Gültigkeitsprüfung des Dokuments
- ✓ Texterkennung in allen Amtssprachen der unterstützten Länder, auch kyrillisch und griechisch
- ✓ Optionale Adressverifizierung in 11 Ländern
- ✓ Video-Lebenderkennung: Der Kunde dreht den Kopf nach rechts und links, die Auswertung läuft automatisch
- ✓ Gesichtsabgleich zwischen Selfie-Video und Dokumentfoto
- ✓ Altersprüfung ohne Ausweis für die Grenzen 16, 18 und 21 (Beta)
- ✓ Mehrsprachige Oberfläche: Deutsch für DE/AT/CH, sonst Englisch
- ✓ QR-Code für mobile Verifizierung
- ✓ Auto-Löschung (Bilder, Videos und Stammdaten 10 Minuten nach Abschluss, Vorgang nach 30 Tagen)
- ✓ Wartende Sessions sind 1 Stunde gültig
- – Für Beta-Länder liegen weniger Trainingsdaten und Prüfläufe vor als für Deutschland. Die Erkennung ist dort entsprechend unsicherer und entscheidet im Zweifel gegen eine Bestätigung — Sie erhalten also eher eine Ablehnung als ein falsches Ja!
🔌 API Endpoints
1. Identitätsprüfung erstellen
POST /api/v1/verify
Content-Type: application/json
X-Api-Key: ihr-api-key
{
"vorname": "Max",
"nachname": "Mustermann",
"geburtsdatum": "01.01.1990",
"country": "DE",
"adresse": "Musterstraße 12, 10115 Berlin",
"return_url": "https://ihre-website.de/callback.html"
}
Parameter
| Parameter | Beschreibung |
|---|---|
| vorname, nachname, geburtsdatum | Pflicht – Daten wie auf dem Ausweis. Geburtsdatum mit Punkten als Trenner und
vierstelligem Jahr (01.01.1990, einstellige Tage und Monate sind
erlaubt). Das Format wird beim Anlegen nicht geprüft – ein
ISO-Datum wie 1990-01-01 wird angenommen, die Prüfung schlägt dann
aber beim Abgleich mit dem Dokument fehl.
Namen in kyrillischer oder griechischer Schrift können übergeben werden. |
| country | Optional – ISO-Code des Ausweis-Landes (z. B. DE, AT, US). Das Land ist dann im Ablauf fest vorgegeben, die Länderauswahl wird ausgeblendet und die Sprache automatisch passend eingestellt (Deutsch für DE/AT/CH, sonst Englisch). Ohne Angabe wählt der Kunde selbst. Alle Kürzel siehe Liste unten. |
| adresse | Optional – aktiviert die Adressverifizierung. Wird eine Adresse übergeben, gleicht das System sie mit der Anschrift auf dem Dokument ab; stimmt sie nicht überein, schlägt die Verifizierung fehl. Ohne Angabe bleibt es beim Abgleich von Name und Geburtsdatum. Möglich in 11 Ländern (siehe Länderliste) – in allen übrigen tragen die Ausweise keine Meldeadresse. Der Reisepass ist bei aktiver Adressverifizierung nicht wählbar, weil er keine Anschrift enthält. Maximal 255 Zeichen. |
| return_url | Optional – Ziel des Knopfes nach Abschluss. Es wird nicht mehr automatisch
weitergeleitet: Der Kunde sieht das Ergebnis und klickt selbst. Angehängt werden
status und session_id.Achtung: Der status in der Rücksprungadresse trägt
success, failed oder expired – nicht
dieselben Werte wie get-result (dort verified statt
success). Verlassen Sie sich ohnehin nicht darauf, siehe
Sicherheitshinweis unten. |
| X-Api-Key (Header) | Ihr API-Key für Server-zu-Server-Aufrufe. Rufen Sie die API von Ihrem Server auf. Der Zugriff über eine freigeschaltete Domain ist nur möglich, wenn die Key-Pflicht für Ihr Konto ausdrücklich abgeschaltet wurde – neue Konten starten mit aktiver Key-Pflicht. |
| Content-Type (Header) | Pflicht – application/json. Ohne diesen Kopf wird die Anfrage mit
HTTP 400 abgewiesen. |
Response
{
"success": true,
"session_id": "uuid",
"token": "secure-token",
"verify_url": "https://api.verify.enjyn.de/verify/token",
"qr_url": "https://api.verify.enjyn.de/api/v1/qr-code/token"
}
2. Altersprüfung erstellen
POST /api/v1/age/18
Content-Type: application/json
X-Api-Key: ihr-api-key
{
"return_url": "https://ihre-website.de/callback.html"
}
Parameter
| Parameter | Beschreibung |
|---|---|
| alter (im Pfad) | Pflicht – die zu prüfende Altersgrenze. Möglich sind 16,
18 und 21. |
| return_url | Optional – wie bei der Identitätsprüfung. |
Es werden keine Stammdaten übergeben: kein Name, kein Geburtsdatum, keine Anschrift,
kein Land. Ein Anfrage-Rumpf ist nicht erforderlich. Alternativ nimmt
POST /api/v1/facecheck die Grenze als {"grenze": 18} im
Rumpf entgegen; werden beide angegeben, gilt die aus dem Pfad.
Response
{
"success": true,
"session_id": "uuid",
"token": "secure-token",
"grenze": 18,
"verify_url": "https://api.verify.enjyn.de/verify/token",
"qr_url": "https://api.verify.enjyn.de/api/v1/qr-code/token"
}
Gemessen an 2.988 Aufnahmen mit bekanntem Jahresalter erreicht es an der Grenze 18 eine Trennschärfe von 0,935 (AUC; 0,5 entspräche dem Zufall). Dabei gelten 13,2 % der Minderjährigen als volljährig, und 11,5 % der Volljährigen werden abgewiesen. Die Fehler häufen sich unmittelbar unter der Grenze: Von den 17-Jährigen besteht knapp die Hälfte. Diese Werte stammen aus einem öffentlichen Bilddatensatz, nicht aus dieser Erfassungsstrecke — ob sie sich bei Aufnahmen mit der Handykamera genauso einstellen, ist offen und wird weiter vermessen.
Damit möglichst keine Minderjährigen durchkommen, gilt eine Grenze erst ab einem deutlich darüber liegenden geschätzten Alter als erreicht — ein Teil der Personen, die das Alter tatsächlich erreichen, wird deshalb mit abgewiesen. Planen Sie zwingend einen zweiten Weg ein, über den abgewiesene Personen ihr Alter anders nachweisen können.
Die Altersprüfung ist keine Identitätsprüfung, für Identifizierungspflichten nach dem Geldwäschegesetz nicht geeignet und ersetzt keine Alterskontrolle für geschlossene Benutzergruppen nach § 4 Abs. 2 JMStV.
3. Ergebnis abrufen
GET /api/v1/get-result/{session_id}
X-Api-Key: ihr-api-key (optional, siehe Hinweis)
Response bei der Identitätsprüfung
{
"success": true,
"status": "verified",
"art": "ausweis",
"vorname": "Max",
"nachname": "Mustermann",
"geburtsdatum": "01.01.1990",
"verified_at": "2026-08-06T06:30:45",
"created_at": "2026-08-06T06:28:12",
"face_confidence": 91.7,
"test": false
}
Response bei der Altersprüfung
{
"success": true,
"status": "verified",
"art": "facecheck",
"grenze": 18,
"bestanden": true,
"vorname": null,
"nachname": null,
"geburtsdatum": null,
"verified_at": "2026-08-12T14:22:07",
"created_at": "2026-08-12T14:21:40",
"face_confidence": null,
"test": false
}
| Feld | Bedeutung |
|---|---|
art |
ausweis oder facecheck – welche Prüfung gelaufen ist |
test |
Unbedingt prüfen. Steht es auf true, stammt das
Ergebnis aus dem Testbetrieb und sagt nichts über eine Identität oder ein Alter
aus. Wer es übergeht, verbucht Testläufe als echte Prüfungen |
face_confidence |
Übereinstimmungswert des Gesichtsabgleichs. Wird nur zurückgegeben, wenn die
Anfrage den X-Api-Key Ihres Kontos trägt – ohne Key steht dort
null. So gelangt der Wert nicht in den Browser des Kunden. Bei der
Altersprüfung immer null |
grenze, bestanden |
Nur bei der Altersprüfung: die geprüfte Grenze und ob sie als erreicht gilt.
bestanden ist genau dann true, wenn
status auf verified steht – bei einer noch laufenden
Prüfung also false. Werten Sie deshalb immer den
status mit aus. Das geschätzte Alter wird nicht herausgegeben |
| Namensfelder | Bei der Identitätsprüfung nur bei status: "verified" gefüllt, sonst
null. Bei der Altersprüfung immer null – es wurden nie
welche erhoben |
Fehlerfälle beim Erstellen (HTTP 400)
| Ursache | Antwort |
|---|---|
| Kein JSON übermittelt oder Content-Type fehlt | Keine Daten übermittelt. Erwartet wird JSON mit dem Kopf
Content-Type: application/json. |
| Pflichtfeld der Identitätsprüfung fehlt | Vorname, Nachname und Geburtsdatum sind erforderlich |
| Unbekanntes Länderkürzel | Nicht unterstütztes Land. Erwartet wird ein ISO-Code wie DE, AT oder US. |
| Adresse übergeben, aber das vorgegebene Land trägt keine auf dem Ausweis | Für dieses Land ist keine Adressverifizierung möglich, weil das
Ausweisdokument keine Meldeadresse enthält. Die Antwort enthält
zusätzlich das Feld supported_countries mit den zulässigen Kürzeln. |
| Adresse länger als 255 Zeichen | Die Adresse ist zu lang. Erlaubt sind bis zu 255 Zeichen. |
| Ungültige oder fehlende Altersgrenze | Bitte eine Altersgrenze angeben. Möglich sind 16, 18, 21. |
success: false und den vollständigen
Grund in error – kein Feld message, kein
code.
Abweisungen vor der Prüfung
Gelten für beide Endpunkte gleichermaßen.
| Lage | HTTP | Feld code |
|---|---|---|
| API-Key unbekannt oder deaktiviert | 401 | INVALID_API_KEY |
| Zugriff über die Domain versucht, obwohl für Ihr Konto die Key-Pflicht aktiv ist | 401 | API_KEY_REQUIRED |
| Aufrufende Domain nicht freigeschaltet | 403 | DOMAIN_NOT_WHITELISTED |
| Weder API-Key noch erkennbare Herkunft der Anfrage | 403 | kein code-Feld, error lautet
„Origin nicht erkannt" |
| Kontingent aufgebraucht – freies Monatskontingent und gekauftes Guthaben sind verbraucht | 429 | MONTHLY_LIMIT_REACHED |
- Abweisungen vor der Prüfung (401, 403, 429) tragen
error(Kurzlabel),message(Begründung) und meistcode– aber keinsuccess. - Fehler beim Erstellen (400) tragen
success: falseunderrormit dem vollständigen Grund – aber keinmessageund keincode.
success, und
lesen Sie beide Textfelder:
if (!response.ok) {
const grund = data.error || data.message || 'Unbekannter Fehler';
// 400 -> data.error traegt den ganzen Satz
// 401/403/429 -> data.message traegt die Begruendung, data.error nur ein Label
}
🌍 Verfügbare Länder
Gültige Werte für den Parameter country (ISO 3166-1 alpha-2). Die Spalte
Adresse zeigt, wo eine Adressverifizierung möglich ist – nur dort trägt das
nationale Ausweisdokument eine aufgedruckte Meldeadresse. Für die Altersprüfung gilt
diese Liste nicht: Sie kommt ohne Dokument aus.
| Kürzel | Land | Adresse | Kürzel | Land | Adresse |
|---|---|---|---|---|---|
| DE | Deutschland | ja | LU | Luxemburg (Beta) | – |
| AT | Österreich (Beta) | – | MT | Malta (Beta) | ja |
| BE | Belgien (Beta) | – | NL | Niederlande (Beta) | – |
| BG | Bulgarien (Beta) | ja | NO | Norwegen (Beta) | – |
| DK | Dänemark (Beta) | – | PL | Polen (Beta) | – |
| EE | Estland (Beta) | – | PT | Portugal (Beta) | – |
| FI | Finnland (Beta) | – | RO | Rumänien (Beta) | – |
| FR | Frankreich (Beta) | – | SE | Schweden (Beta) | – |
| GR | Griechenland (Beta) | – | CH | Schweiz (Beta) | – |
| IE | Irland (Beta) | – | SG | Singapur (Beta) | ja |
| IS | Island (Beta) | – | SK | Slowakei (Beta) | ja |
| IT | Italien (Beta) | ja | SI | Slowenien (Beta) | ja |
| HR | Kroatien (Beta) | ja | ES | Spanien (Beta) | ja |
| LV | Lettland (Beta) | – | CZ | Tschechien (Beta) | ja |
| LI | Liechtenstein (Beta) | – | HU | Ungarn (Beta) | – |
| LT | Litauen (Beta) | – | US | USA (Beta) | ja * |
| CY | Zypern (Beta) | – | |||
* In den USA nicht bei Ausweisen aus Massachusetts und New York: Dort darf die Anschrift handschriftlich auf der Rückseite geändert werden, der aufgedruckte Wert ist dann veraltet. Solche Prüfungen schlagen bei aktiver Adressverifizierung fehl.
Ungültige Kürzel werden mit HTTP 400 abgelehnt. Deutschland ist voll unterstützt, alle übrigen Länder befinden sich in der Beta-Phase.
📄 Zugelassene Dokumente
Gilt für die Identitätsprüfung. Die Altersprüfung verlangt kein Dokument.
| Dokument | Status |
|---|---|
| Nationaler Personalausweis | zugelassen in allen Ländern, in denen es einen gibt |
| Reisepass | zugelassen – außer bei aktiver Adressverifizierung, weil er keine Anschrift trägt |
| Führerschein | nur in den USA zugelassen, wo er das übliche Ausweisdokument ist. In allen anderen Ländern nicht zugelassen |
| US State ID | zugelassen |
| US Permanent Resident Card (Green Card) | zugelassen |
| Sonstige Dokumente (Arbeitserlaubnisse, Betriebs- und Studierendenausweise, Bescheinigungen) | nicht zugelassen – sie weisen keine Identität im Sinne der Prüfung nach |
🔍 Was geprüft wird
| Prüfung | Umfang |
|---|---|
| Dokument | Ausstellungsland, Dokumenttyp und Gültigkeit. Nicht zugelassene oder abgelaufene Dokumente werden abgelehnt. Ein per API vorgegebenes Land kann der Kunde nicht überschreiben |
| Personendaten | Vorname, Nachname und Geburtsdatum werden gegen das Dokument abgeglichen |
| Adresse | Nur bei übergebener Adresse: Abgleich mit der Anschrift auf dem Dokument |
| Lebenderkennung | Videoaufnahme des Kunden mit zwei Kopfdrehungen, geräteseitig und serverseitig geprüft |
| Gesichtsabgleich | Gesicht aus dem Video gegen das Foto im Dokument |
| Altersschätzung | Nur bei der Altersprüfung: Schätzung aus mehreren Aufnahmen des Gesichts, mit Sicherheitsaufschlag auf die vorgegebene Grenze. Die Aufnahme wird über eine Kopfdrehung geführt, die im Gerät des Kunden ausgewertet wird |
🗑️ Speicherung und Löschung
| Frist | Was gelöscht wird |
|---|---|
| 10 Minuten nach Abschluss der Prüfung |
Ausweisaufnahmen und Videoaufnahme sowie Vorname, Nachname, Geburtsdatum und – falls übergeben – die Anschrift. Unwiderruflich |
| 30 Tage nach Beginn der Prüfung |
Der gesamte Vorgang: Sitzungsdaten, Status, Prüfprotokolle und technische Metadaten |
| 1 Stunde | Nicht abgeschlossene Sitzungen verfallen. Erst danach greift für sie die Löschung der Aufnahmen und Stammdaten |
Bei der Altersprüfung werden die Aufnahmen gar nicht erst gespeichert – sie werden im Arbeitsspeicher ausgewertet und unmittelbar danach verworfen.
Die Verarbeitung findet ausschließlich auf Servern in Deutschland statt. Einzelheiten stehen im Auftragsverarbeitungsvertrag, den Sie mit Ihrem Zugang erhalten haben.
📋 Status-Werte
Diese Werte liefert get-result. Die Rücksprungadresse verwendet
andere – siehe return_url oben.
| Status | Beschreibung |
|---|---|
| pending | Wartet auf Benutzer |
| processing | Wird verarbeitet |
| verified | ✅ Erfolgreich – bei der Altersprüfung: Grenze bestätigt |
| failed | ❌ Fehlgeschlagen – bei der Altersprüfung: Grenze nicht bestätigt |
| expired | ⏱ Link abgelaufen, ohne dass die Prüfung abgeschlossen wurde |
🚀 Integration
// 1. Session erstellen (serverseitig, mit API-Key)
const response = await fetch('https://api.verify.enjyn.de/api/v1/verify', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': process.env.KYC_API_KEY
},
body: JSON.stringify({
vorname: 'Max',
nachname: 'Mustermann',
geburtsdatum: '01.01.1990',
country: 'DE', // optional: Ausweis-Land vorgeben
adresse: 'Musterstraße 12, 10115 Berlin', // optional: Adresse mitprüfen
return_url: 'https://ihre-website.de/callback.html'
})
});
const data = await response.json();
// Fehler am HTTP-Status erkennen, nicht am Feld success:
// 400 liefert success:false und error, 401/403/429 liefern message ohne success.
if (!response.ok) {
console.error(data.error || data.message, data.supported_countries || '');
return;
}
// 2. Benutzer zur Verifizierung weiterleiten
window.location.href = data.verify_url;
// 3. Nach Callback: Status sicher validieren (serverseitig, mit API-Key)
// Der status-Parameter der Callback-URL traegt success|failed|expired und ist
// manipulierbar — massgeblich ist allein get-result.
const sessionId = new URLSearchParams(window.location.search).get('session_id');
const result = await fetch(
`https://api.verify.enjyn.de/api/v1/get-result/${sessionId}`,
{ headers: { 'X-Api-Key': process.env.KYC_API_KEY } }
);
const verification = await result.json();
if (verification.test) {
// Testbetrieb: das Ergebnis wurde von Hand gesetzt, es fand keine Prüfung statt
console.warn('Testlauf — nicht als echte Verifizierung verbuchen');
} else if (verification.status === 'verified') {
console.log('✓ Verifiziert:', verification.vorname, verification.face_confidence);
}
Die Altersprüfung läuft genauso – nur der erste Aufruf unterscheidet sich:
const response = await fetch('https://api.verify.enjyn.de/api/v1/age/18', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Api-Key': process.env.KYC_API_KEY
},
body: JSON.stringify({ return_url: 'https://ihre-website.de/callback.html' })
});
// … Schritte 2 und 3 identisch. Im Ergebnis steht statt der Namensfelder:
if (verification.status === 'verified' && verification.bestanden) {
console.log(`✓ Mindestens ${verification.grenze} Jahre`);
}
⚠️ Wichtiger Sicherheitshinweis
status Parameter in der Callback-URL kann manipuliert werden!Verwenden Sie IMMER
/api/v1/get-result/{session_id} zur sicheren Validierung.Der
X-Api-Key gehört ausschließlich in Ihren Server-Code – niemals in
Frontend-JavaScript, das im Browser sichtbar ist. Rufen Sie die API deshalb
grundsätzlich von Ihrem Server aus auf.Auch die
session_id gehört nicht in fremde Hände: Wer sie
kennt, kann das Ergebnis abfragen. Reichen Sie sie nicht an Dritte weiter und legen Sie
sie nicht in öffentlich einsehbaren Adressen ab.
Enjyn Translator Kit Dokumentation
📍 Script URL
https://playground.enjyn.de/translator-kit.js
✨ Features
- ✓ Ein Script-Tag – Website wird automatisch erkannt
- ✓ Widget erscheint unten rechts (konfigurierbar)
- ✓ Automatisches Caching auf dem Server
- ✓ Mehrere Sprachen (EN, NL, FR, ES und mehr)
- ✓ URL-Parameter für direkte Sprachlinks
- ✓ Cookie-Banner kompatibel
- ✓ Texte vom Übersetzen ausschließbar
- ✓ JavaScript API verfügbar
🚀 Integration (eine Zeile reicht)
<script src="https://playground.enjyn.de/translator-kit.js"></script>
Das Widget erscheint automatisch unten rechts und die Website wird erkannt.
⚙️ Konfigurationsoptionen
| Attribut | Standard | Beschreibung |
|---|---|---|
| data-site | Auto (aus URL) | Website-Name für den Cache-Ordner auf dem Server |
| data-languages | en,nl,fr,es | Welche Sprachen angeboten werden (kommagetrennt) |
| data-source | de | Quellsprache der Website |
| data-position | bottom-right | Position des Widgets (bottom-right, bottom-left, top-right, top-left) |
| data-preloader | true | Ladebildschirm bei vielen Texten anzeigen |
| data-threshold | 15 | Ab wie vielen neuen Texten der Preloader erscheint |
| data-cookie-check | – (deaktiviert) | Wartet auf bestimmten Cookie bevor Widget erscheint |
💡 Anwendungsbeispiele
Minimal (empfohlen)
<script src="https://playground.enjyn.de/translator-kit.js"></script>
Nur Englisch, unten links
<script src="https://playground.enjyn.de/translator-kit.js"
data-languages="en"
data-position="bottom-left">
</script>
Mit Cookie-Banner-Check
<script src="https://playground.enjyn.de/translator-kit.js"
data-cookie-check="cookies_accepted">
</script>
Alles angepasst
<script src="https://playground.enjyn.de/translator-kit.js"
data-site="shop.beispiel.de"
data-languages="en,fr"
data-position="top-right"
data-preloader="false">
</script>
🔗 URL-Parameter
Nutzer können Seiten direkt in einer Sprache aufrufen:
https://meine-website.de/?en → Englisch https://meine-website.de/?fr → Französisch https://meine-website.de/?nl → Niederländisch https://meine-website.de/?es → Spanisch Auch mit anderen Parametern: https://meine-website.de/seite.php?en&id=123
🚫 Texte vom Übersetzen ausschließen
Füge data-no-translate="true" zum Element hinzu:
<span data-no-translate="true">Dieser Text bleibt immer deutsch</span> <div data-no-translate="true">Ganzer Bereich wird nicht übersetzt</div>
🛠️ JavaScript API
Das Widget stellt globale Funktionen bereit:
EnjynTranslator.switchLang('en') → Wechselt zu Englisch
EnjynTranslator.getLang() → Gibt aktuelle Sprache zurück
EnjynTranslator.config → Zeigt Konfiguration
💾 Cache
Übersetzungen werden automatisch auf dem Server gespeichert. Der erste Besucher löst die Übersetzung aus – alle weiteren laden sofort aus dem Cache.
/lang/meine-website.de/en.json /lang/meine-website.de/fr.json /lang/andere-seite.com/en.json
ConsentKit Dokumentation
🍪 100% DSGVO-konform · Kostenlos für immer
Selbstgehostete Alternative zu Cookiebot und Usercentrics — ohne Abo, ohne Datenweitergabe an Drittanbieter.
📍 Script URL
https://enjyn.de/src/enjyn-cookie.php
✨ Features
- ✓ Ein Script-Tag – sofort einsatzbereit
- ✓ Automatische Cookie-Erkennung (~50 bekannte Tracker, mit Wildcards)
- ✓ Script- und Iframe-Blocker: Tracker laden erst NACH Zustimmung
- ✓ Vereinheitlichter Banner mit direkt sichtbaren Kategorien
- ✓ Dynamischer Button-Text („Alle akzeptieren" ↔ „Auswahl speichern")
- ✓ 9 vorgefertigte Themes + Live-Anpassung (Glasmorphismus, Neon, Brutal …)
- ✓ Rechtstext-Lesemodus (automatische Erkennung, kompakter Banner)
- ✓ Mehrsprachig (DE / EN, Browser-Erkennung)
- ✓ Datenschutz-Tabelle automatisch via Container
- ✓ Quarantäne-Kategorie für unbekannte Cookies
- ✓ Zurück-Button im Footer
- ✓ Reopen-Button für jederzeitigen Widerruf
- ✓ Anonymisierter Consent-Log (DSGVO Art. 7)
- ✓ Mobile-optimiert (Bottom-Sheet mit Inner-Scrolling)
🚀 Integration (eine Zeile reicht)
<script src="https://enjyn.de/src/enjyn-cookie.php" async></script>
Banner erscheint beim ersten Besuch mit direkt sichtbaren Kategorien. Nach Auswahl bleibt ein kleiner Cookie-Button zum Widerrufen.
⚙️ Konfigurationsoptionen
Volle Kontrolle über window.EnjynCookie vor dem Script-Tag:
Allgemein
| Option | Standard | Beschreibung |
|---|---|---|
| site_name | – | Name der Website |
| operator | – | Betreiber-Name |
| contact | – | Datenschutz-Kontakt-E-Mail |
| lang | de | Sprache (de, en) |
| auto_lang | true | Browser-Sprache automatisch erkennen |
| privacy_url | – | Link zur Datenschutzerklärung |
| imprint_url | – | Link zum Impressum |
| consent_lifetime | 180 | Tage bis erneut nachgefragt wird |
| auto_scan | true | Auto-Erkennung von Cookies |
| show_reopen | true | Cookie-Icon in der Ecke nach Consent |
| log_consents | false | Anonymisierten Consent-Log aktivieren |
| log_endpoint | – | URL für Consent-Log-POST |
Design
| Option | Standard | Beschreibung |
|---|---|---|
| primary | #2563eb | Akzentfarbe (Buttons) |
| primary_text | #ffffff | Text-Farbe auf Primary-Buttons |
| position | bottom-right | bottom-right, bottom-left, bottom-center, center |
| theme | auto | Siehe Theme-Liste unten |
| style | modern | modern, minimal, box |
| animation | slide | slide, fade, pop |
| radius | 14px | Ecken-Radius |
| btn_radius | 10px | Button-Ecken-Radius |
| opacity | 1 | Karten-Transparenz (0–1) |
| card_blur | 0 | Glasmorphismus-Blur in px |
| backdrop | true | Verdunkelung im Hintergrund |
| backdrop_blur | 2 | Backdrop-Blur in px |
| backdrop_alpha | 0.35 | Hintergrund-Dunkelheit (0–1) |
| border_width | 1 | Rahmenstärke in px |
| font_scale | 1 | Schriftgrößen-Skalierung (0.85–1.3) |
Rechtstext-Lesemodus
| Option | Standard | Beschreibung |
|---|---|---|
| legal_mode | undefined | true = Modus erzwingen, false = abschalten, undefined = auto-Erkennung |
| legal_paths | [] | Eigene Pfade zusätzlich zu den Standards |
🎨 9 vorgefertigte Themes
| Theme | Beschreibung |
|---|---|
default | Modern, blau, weiß |
dark | Dunkler Modus |
glass | Glasmorphismus, halbtransparent mit Blur |
glass-dark | Dunkler Glaseffekt |
neon | Knallige Akzente auf schwarz |
minimal-bw | Schwarz/weiß, scharfe Kanten |
pastel | Rosa, weich, sehr rund |
brutal | Hart kantig, gelb, harter Schatten |
soft | Sehr rund, Pill-Buttons, weiche Schatten |
🔘 Adaptive Button-Anzeige
Die Buttons im Banner passen sich automatisch an:
| Situation | Buttons |
|---|---|
| Es gibt optionale Kategorien (Analytics, Marketing …) | [Nur Notwendige] [Alle akzeptieren] |
| User wählt eine Kategorie ab | [Nur Notwendige] [Auswahl speichern] |
| Nur essential, keine optionalen Cookies | [Akzeptieren] (Reject-Button ausgeblendet) |
💡 Anwendungsbeispiele
Minimal (empfohlen)
<script src="https://enjyn.de/src/enjyn-cookie.php" async></script>
Mit eigenen Cookies (inkl. Wildcard)
<script>
window.EnjynCookie = {
site_name: "Meine Website",
primary: "#2563eb",
privacy_url: "/datenschutz",
imprint_url: "/impressum",
categories: {
analytics: {
cookies: [
{ name: "_ga", provider: "Google LLC (USA)",
purpose_de: "Statistik", duration: "2 Jahre",
type: "HTTP-Cookie" },
// Wildcard: matcht _ga_ABCDEF, _ga_XYZ123 etc.
{ name: "_ga_*", provider: "Google LLC (USA)",
purpose_de: "GA4-Session", duration: "2 Jahre" }
]
}
}
};
</script>
<script src="https://enjyn.de/src/enjyn-cookie.php" async></script>
Glas-Design unten mittig
<script>
window.EnjynCookie = {
theme: "glass",
position: "bottom-center",
primary: "#7c3aed",
opacity: 0.7,
card_blur: 20
};
</script>
<script src="https://enjyn.de/src/enjyn-cookie.php" async></script>
🚫 Script-Blocker
Tausche bei Tracking-Scripts src gegen data-src und type gegen "text/plain". Das Widget aktiviert sie erst nach Zustimmung:
<!-- Vorher (DSGVO-Verstoß): lädt SOFORT -->
<script src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"></script>
<!-- Nachher: lädt erst nach Consent -->
<script type="text/plain"
data-cookiecategory="analytics"
data-src="https://www.googletagmanager.com/gtag/js?id=G-XXXX"
async></script>
Iframes (YouTube, Vimeo, Maps)
<iframe data-cookiecategory="marketing"
data-src="https://www.youtube-nocookie.com/embed/VIDEO_ID"
width="560" height="315"></iframe>
🔍 Automatische Cookie-Erkennung
Der Auto-Scanner findet Cookies aus mehreren Quellen:
document.cookie– inkl. Live-Überwachung neu gesetzter CookieslocalStorage+sessionStorageIndexedDB- Drittanbieter-Domains via
PerformanceObserver MutationObserverfür dynamisch eingefügte Scripts/Iframes (z. B. Tag-Manager)
Bekannte Tracker werden via interner Datenbank kategorisiert (Google, Meta, Hotjar, HubSpot …). Unbekannte Cookies landen in einer Quarantäne-Kategorie – standardmäßig deaktiviert.
📦 Quarantäne & Cookie-Zuordnung
Sobald ein Cookie in categories.X.cookies definiert ist (auch via Wildcard), gilt diese Kategorie und der Cookie verschwindet aus der Quarantäne. Zusätzlich gibt es eine Laufzeit-API zum Verschieben:
// Workflow für Quarantäne-Cleanup
EnjynCookie.unknown() // Liste aller unbekannten Cookies
// Pro Cookie zuordnen:
EnjynCookie.assign("xyz_session", "essential", {
provider: "Mein CMS",
purpose_de: "Session-Verwaltung",
duration: "Session",
type: "HTTP-Cookie"
});
📄 Datenschutzerklärung — Auto-Tabelle
Container in deiner Datenschutzerklärung platzieren – das Widget befüllt sie automatisch und ergänzt „bereitgestellt durch Enjyn Gruppe":
| Container | Inhalt |
|---|---|
<div data-enjyn-cookie-table></div> | Komplette Tabelle aller Kategorien |
<div data-enjyn-cookie-table="analytics"></div> | Nur eine Kategorie |
<span data-enjyn-cookie-list></span> | Komma-Liste der Cookie-Namen |
<a data-enjyn-open href="#">...</a> | Öffnet den Settings-Dialog |
<div data-enjyn-placeholder="marketing"></div> | „Inhalt blockiert"-Box für eingebettete Inhalte |
📖 Rechtstext-Lesemodus
Auf rechtlichen Seiten (Datenschutz, Impressum, AGB) wird der Banner automatisch kompakter dargestellt – ohne Backdrop, damit der Text gut lesbar bleibt. Die Kategorien sind hinter einem Ausklappfeld versteckt.
Erkannt werden Standard-Pfade wie /datenschutz, /impressum, /agb, /privacy, /terms. Eigene Pfade können ergänzt werden:
window.EnjynCookie = {
legal_paths: ["/agb", "/widerruf", "/nutzungsbedingungen"]
};
Banner-Text im Lesemodus: „Die Cookies wurden noch nicht akzeptiert, oder es wurde noch keine Einstellung festgelegt. Sie befinden sich aktuell nur im Lesemodus für Rechtsdokumente."
🛠️ JavaScript API
Globale Funktionen unter window.EnjynCookie:
Banner-Aktionen
EnjynCookie.open() → Settings-Dialog öffnen
EnjynCookie.accept() → Alles akzeptieren
EnjynCookie.reject() → Nur Notwendige
EnjynCookie.reset() → Zustimmung verwerfen, Banner erneut zeigen
EnjynCookie.get() → Aktueller Consent als Objekt
EnjynCookie.isAllowed("analytics") → Boolean, ob Kategorie zugestimmt
Design (live)
EnjynCookie.setTheme("glass")
EnjynCookie.setDesign({ primary: "#ff0080", opacity: 0.7, card_blur: 20 })
EnjynCookie.getDesign() → aktuelle Werte als Objekt
EnjynCookie.themes() → Array aller Theme-Namen
Sprache & Datenschutz
EnjynCookie.setLanguage("en") → Sprache wechseln ohne Reset
EnjynCookie.refreshPrivacy() → Datenschutz-Container neu rendern
Auto-Scanner & Zuordnung
EnjynCookie.scan() → Sofort-Scan auslösen
EnjynCookie.found() → Alle erkannten Cookies
EnjynCookie.unknown() → Quarantäne-Liste
EnjynCookie.assign(name, category, meta)
→ Cookie manuell einer Kategorie zuordnen
Event-Listener
EnjynCookie.onChange(function (record) {
if (record.choices.analytics) {
// hier z. B. Google Analytics initialisieren
gtag('js', new Date());
gtag('config', 'G-XXXX');
}
});
🔒 DSGVO-Konformität
- Opt-in: Nicht-essenzielle Kategorien werden ohne Klick nicht aktiviert
- Gleichwertige Buttons: „Nur Notwendige" optisch gleich prominent wie „Alle akzeptieren"
- Granulare Auswahl: Pro Kategorie Toggle-Switch, direkt im Banner sichtbar
- Einfacher Widerruf: Reopen-Button oder
data-enjyn-open - Echter Script-Blocker: Tracker werden vor Consent gar nicht geladen
- Anonymisierter Consent-Log: IP-Subnet + sha256 + tägliches Salt, Salts nach 30 Tagen gelöscht
- Keine externen Assets: kein Google Fonts, kein FontAwesome, alles inline
- Keine Datenübertragung vor Zustimmung: Cookie-DB inline im Bundle
📱 Mobile-Optimierung
- Banner als zentriertes Bottom-Sheet auf Tablets und Smartphones
- Inner-Scrolling: lange Kategorien-Listen scrollen, Buttons + Footer bleiben sichtbar
- Touch-Targets mindestens 44 px hoch
- Cookie-Tabelle wird auf kleinen Screens zum Card-Layout mit Labels
- 3D-Cookie dezenter (56 px statt 78 px)
📜 Lizenz & Wasserzeichen
Das Widget ist kostenlos nutzbar. Das powered by Enjyn Gruppe-Wasserzeichen im Banner und in der Datenschutz-Tabelle ist Lizenzbestandteil und wird sowohl serverseitig als auch clientseitig erzwungen.
Diebstahlschutz: Das Widget funktioniert nur, wenn es von einer autorisierten Domain (Standard: enjyn.de) geladen wird. Bei unautorisierten Kopien zeigt es einen roten Warnbanner und führt keine Funktionen aus.
Enjyn Auth SSO
Enterprise Single Sign-On ohne zusätzliche Kosten
📍 Übersicht
Enjyn Auth SSO ist eine umfassende Single Sign-On Lösung für sichere Benutzerverwaltung über mehrere Anwendungen hinweg. Implementieren Sie zentrale Authentifizierung mit fortgeschrittenen Sicherheitsfeatures.
✨ Funktionen
- Multi-App SSO: Ein Login für alle Ihre Anwendungen
- Zentrale Verwaltung: Verwalten Sie alle Benutzer an einer Stelle
- 2-Faktor-Authentifizierung: E-Mail und App-basierte Codes
- Session Management: Sichere Session-Verwaltung mit automatischem Timeout
- Audit Logging: Vollständige Nachverfolgung aller Login-Aktivitäten
- Verschlüsselte Sessions: AES-256 Verschlüsselung für alle Sessions
🔒 Sicherheitstechniken
Verschlüsselung
- AES-256-CBC: Industrie-Standard für Session-Verschlüsselung
- TLS/SSL 1.3: Verschlüsselte Datenübertragung (HTTPS)
- PBKDF2: Sichere Password-Hashing mit Salt
- bcrypt: Adaptive Password-Hashing für zusätzliche Sicherheit
Token-Management
- JWT-basierte Access Tokens mit 24-Stunden-Gültigkeit
- Refresh Token Rotation zur Verhütung von Token-Replay-Attacken
- Sichere Token-Speicherung in HTTPOnly Cookies
- CSRF-Protection bei Token-Übertragung
2-Faktor-Authentifizierung
- E-Mail-basierte Authentifizierung mit One-Time-Passwords (OTP)
- TOTP (Time-based One-Time Password) für Authenticator-Apps
- Backup-Codes für Account-Recovery
- Rate Limiting gegen Brute-Force-Angriffe
Session-Sicherheit
- Automatisches Session-Timeout nach Inaktivität
- IP-Binding für Sessionen (optional)
- User-Agent-Validierung
- Mehrfach-Sessions pro User mit Verwaltung
Audit & Compliance
- Vollständiges Audit Logging aller Authentifizierungsereignisse
- DSGVO-konform mit Datensparsamkeit
- Deutsche Server-Infrastruktur
- Recht auf Datenlöschung und Datenportabilität
🚀 Nächste Schritte
Nach erfolgreicher Aktivierung erhalten Sie die vollständige technische Dokumentation, API-Endpoints, Code-Beispiele und einen persönlichen Technical Account Manager per E-Mail.
Um Enjyn Auth SSO freizuschalten, kontaktieren Sie bitte unseren Sales-Support:
Jetzt anfragenMail API Dokumentation
📍 API Endpoint
🔑 Authentication
Alle Anfragen müssen einen API Key im Header enthalten:
X-API-Key: IHR_API_KEY
💻 Code Beispiele
Wählen Sie die gewünschten Funktionen aus, um den passenden Code zu generieren:
// Code wird generiert...
// Code wird generiert...
// Code wird generiert...
📊 Response Codes
| Code | Status | Beschreibung |
|---|---|---|
| 200 | OK | E-Mail wurde erfolgreich versendet |
| 400 | Bad Request | Pflichtfelder fehlen (to, subject, body) |
| 401 | Unauthorized | API-Key fehlt oder ist ungültig |
| 429 | Too Many Requests | Rate Limit überschritten |
SQL API Dokumentation
📍 API Endpoint
🔑 Authentication
Alle Anfragen müssen einen gültigen API Key im Header enthalten:
X-API-Key: IHR_API_KEY
📌 Endpoints
Neue Datenbank erstellen
{
"note": "Name der Datenbank (max 50 Zeichen)"
}
DB Name, DB User Werden immer automatisch generiert und können nicht geändert werden. Deshalb geben Sie bitte den Namen der Datenbank zur Zuordnung unter Note an.
Einzelne oder mehrere Datenbanken abrufen (Note, DB Name, DB User, Password, phpMyAdmin URL)
Mehrere DBs mit Komma trennen: /api/databases/db_abc123,db_xyz789
Notiz aktualisieren
{
"note": "Neuer Name"
}
Datenbankpasswort erneuern
Datenbank löschen
💻 Code Beispiele
// Datenbank erstellen
const createDatabase = async () => {
const response = await fetch('ENDPOINT/api/databases', {
method: 'POST',
headers: {
'X-API-Key': 'IHR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
note: 'Meine neue Datenbank'
})
});
const result = await response.json();
console.log(result);
};
// Datenbanken abrufen
const getDatabases = async () => {
const response = await fetch('ENDPOINT/api/databases', {
method: 'GET',
headers: {
'X-API-Key': 'IHR_API_KEY'
}
});
const result = await response.json();
console.log(result);
};
<?php
// Datenbank erstellen
$apiKey = 'IHR_API_KEY';
$apiUrl = 'ENDPOINT/api/databases';
$data = [
'note' => 'Meine neue Datenbank'
];
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-API-Key: ' . $apiKey
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$result = json_decode($response, true);
if ($httpCode === 201) {
echo 'Datenbank erstellt!';
print_r($result);
} else {
echo 'Fehler: ' . $result['error'];
}
?>
import requests
import json
api_key = 'IHR_API_KEY'
api_url = 'ENDPOINT/api/databases'
headers = {
'X-API-Key': api_key,
'Content-Type': 'application/json'
}
# Datenbank erstellen
data = {
'note': 'Meine neue Datenbank'
}
response = requests.post(api_url, headers=headers, data=json.dumps(data))
if response.status_code == 201:
print('Datenbank erstellt!')
print(response.json())
else:
print(f'Fehler: {response.json()["error"]}')
# Datenbanken abrufen
response = requests.get(api_url, headers=headers)
if response.status_code == 200:
databases = response.json()['data']
for db in databases:
print(f"DB: {db['db_name']} - {db['note']}")
else:
print(f'Fehler: {response.json()["error"]}')
📊 Response Beispiel
{
"success": true,
"data": [
{
"id": 1,
"db_name": "db_abc12345",
"db_user": "user_xyz98765",
"db_pass": "secure_password_here",
"note": "Meine Webshop Datenbank",
"created_at": "2025-01-15 10:30:00",
"server": "ENDPOINT",
"port": 3306
}
],
"message": "Databases retrieved successfully",
"phpmyadmin_url": "ENDPOINT/phpmyadmin/",
"timestamp": "2025-01-15T10:35:22+01:00"
}
📊 Response Codes
| Code | Status | Beschreibung |
|---|---|---|
| 200 | OK | Anfrage erfolgreich |
| 201 | Created | Datenbank erfolgreich erstellt |
| 400 | Bad Request | Ungültige Anfrage |
| 401 | Unauthorized | API-Key fehlt oder ist ungültig |
| 404 | Not Found | Datenbank nicht gefunden |
| 429 | Too Many Requests | Rate Limit überschritten |
Analytics API Dokumentation
Dokumentation wird zugesendet
Nach erfolgreicher API-Anfrage erhalten Sie die vollständige Dokumentation
sowie Ihre Zugangsdaten per E-Mail.
📍 Übersicht
Preis: 25,00€/Monat
Features:
- Echtzeit-Tracking
- Website erstellung, verwaltung
- Abfrage aller Daten
- White-Label Lösungen
Reseller API Dokumentation
Dokumentation wird zugesendet
Nach erfolgreicher API-Anfrage erhalten Sie die vollständige Dokumentation
sowie Ihre Zugangsdaten per E-Mail.
📍 Übersicht
Preis: Kostenlose Bereitstellung, Pay as you go
Sie zahlen nur für die tatsächlich genutzten Ressourcen
Features:
- White-Label Lösungen
- Automatische Abrechnung
- Partner-Dashboard