API-Dokumentation
Zuletzt aktualisiert: 3. November 2026
Pro-Nutzer (und Admins) können dieselben JSVMP-Obfuskierungs-Engines wie der Web-Workspace über HTTP aufrufen. API-Aufrufe teilen sich das monatliche Laufkontingent mit der Web-App.
1. API-Schlüssel erstellen
Melde dich an, öffne „Konto“ und erstelle unter „API-Schlüssel“ einen Schlüssel. Schlüssel beginnen mit veil_live_ und werden bei der Erstellung nur einmal angezeigt. Wir speichern nur einen Hash und können einen Schlüssel nicht wiederherstellen; wenn du ihn verlierst, widerrufe ihn und erstelle einen neuen. Jedes Konto kann bis zu 3 aktive Schlüssel haben. Alle Schlüssel funktionieren sofort nicht mehr, wenn der Tarif auf Free zurückfällt. Auf der Kontoseite siehst du, wann jeder Schlüssel zuletzt verwendet wurde.
2. Anfrage
POST https://vm.ldvmp.com/api/v1/obfuscate
- Header
Authorization: Bearer <dein Schlüssel> - Header
Content-Type: application/json - Body
{ "code": "<JavaScript-Quellcode>", "mode": "performance" | "dynamic" }:performanceist die Hochleistungs-VM,dynamicdie dynamische VM - Jede API-Anfrage akzeptiert bis zu 2 MB Quellcode.
3. Antwort
Bei Erfolg gibt die API 200 zurück:
{
"ok": true,
"output": "/* obfuscated JavaScript */ ...",
"inputBytes": 22,
"outputBytes": 48213,
"ms": 184,
"engine": "performance",
"engineVersion": "…"
}Die Header X-Quota-Limit und X-Quota-Remaining geben das Limit dieses Monats und die verbleibenden Läufe an.
4. Fehler
Jeder Fehler liefert { "ok": false, "error": "<code>", "message": "<details>" }. Beispiel für das Kontingent:
{ "ok": false, "error": "QUOTA_EXCEEDED", "message": "Monthly run limit reached for this plan.",
"limit": 1000, "used": 1000, "remaining": 0, "resetAt": "2026-12-01T00:00:00.000Z" }
| HTTP | error | Bedeutung |
|---|---|---|
| 401 | INVALID_KEY | Schlüssel fehlt, ist fehlerhaft, widerrufen oder unbekannt |
| 403 | PLAN_REQUIRED | Der Schlüsselinhaber ist nicht mehr Pro (Schlüssel funktionieren nach einem Downgrade sofort nicht mehr) |
| 400 | BAD_REQUEST | Ungültiges JSON, leerer code oder mode ist nicht performance / dynamic |
| 413 | PAYLOAD_TOO_LARGE | Der Quellcode überschreitet 2 MB pro Anfrage |
| 415 | UNSUPPORTED_MEDIA_TYPE | Content-Type ist nicht application/json |
| 422 | COMPILE_FAILED | Der Quellcode konnte nicht kompiliert werden (der Lauf wird nicht berechnet) |
| 429 | QUOTA_EXCEEDED | Monatliche Läufe aufgebraucht; die Antwort enthält limit / remaining / resetAt |
| 503 | ENGINE_UNAVAILABLE / TIMEOUT | Die Engine startet gerade oder hat das Zeitlimit überschritten |
| 503 | QUOTA_UNAVAILABLE / UNAVAILABLE | Der Kontingent- oder Schlüsseldienst ist vorübergehend nicht verfügbar |
Jeder 503 kann wiederholt werden und keiner wird berechnet: Warte die im Header Retry-After angegebene Zeit ab (Sekunden, auch im JSON-Feld retryAfter) und versuche es dann erneut | ||
| 500 | INTERNAL_ERROR | Unerwarteter Serverfehler (der Lauf wird nicht berechnet); versuche es später erneut |
5. curl-Beispiel
curl -X POST https://vm.ldvmp.com/api/v1/obfuscate \
-H "Authorization: Bearer $VEILVM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"code":"console.log(\"hello\")","mode":"performance"}'
6. Node.js-Beispiel
// Node.js 18+ (built-in fetch). Store the key in an environment variable, never in source.
import { readFile, writeFile } from "node:fs/promises";
const code = await readFile("input.js", "utf8");
const response = await fetch("https://vm.ldvmp.com/api/v1/obfuscate", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.VEILVM_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({ code, mode: "dynamic" })
});
const data = await response.json();
if (!data.ok) throw new Error(`${response.status} ${data.error}: ${data.message}`);
await writeFile("output.js", data.output);
console.log(`${data.engine}: ${data.inputBytes} → ${data.outputBytes} bytes in ${data.ms} ms`);
7. Sicherheitstipps
- Bette einen Schlüssel niemals in Browser-Code ein und committe ihn nicht in ein Repository; bewahre ihn in einer serverseitigen Umgebungsvariable auf.
- Widerrufe einen Schlüssel auf der Kontoseite, sobald du vermutest, dass er offengelegt wurde.
- Standardanfragen werden im Arbeitsspeicher verarbeitet, und dein Code wird niemals in Logs geschrieben. Große Dateien werden vorübergehend in privatem Speicher abgelegt und innerhalb von 24 Stunden automatisch gelöscht.