Documentation API
Dernière mise à jour : 3 novembre 2026
Les utilisateurs Pro (et les administrateurs) peuvent appeler en HTTP les mêmes moteurs d’obfuscation JSVMP que l’espace de travail web. Les appels API partagent le quota mensuel d’exécutions avec l’application web.
1. Créer une clé API
Connectez-vous, ouvrez Compte et créez une clé dans Clés API. Les clés commencent par veil_live_ et ne sont affichées qu’une seule fois lors de leur création. Nous ne stockons qu’un hachage et ne pouvons pas récupérer une clé ; si vous la perdez, révoquez-la et créez-en une nouvelle. Chaque compte peut conserver jusqu’à 3 clés actives. Toutes les clés cessent immédiatement de fonctionner si l’offre repasse à Free. La page du compte indique la dernière utilisation de chaque clé.
2. Requête
POST https://vm.ldvmp.com/api/v1/obfuscate
- En-tête
Authorization: Bearer <votre clé> - En-tête
Content-Type: application/json - Corps
{ "code": "<source JavaScript>", "mode": "performance" | "dynamic" }:performancecorrespond à la VM haute performance,dynamicà la VM dynamique - Chaque requête API accepte jusqu’à 2 Mo de code source.
3. Réponse
En cas de succès, l’API renvoie 200 :
{
"ok": true,
"output": "/* obfuscated JavaScript */ ...",
"inputBytes": 22,
"outputBytes": 48213,
"ms": 184,
"engine": "performance",
"engineVersion": "…"
}Les en-têtes X-Quota-Limit et X-Quota-Remaining indiquent la limite du mois et les exécutions restantes.
4. Erreurs
Chaque erreur renvoie { "ok": false, "error": "<code>", "message": "<details>" }. Exemple de quota :
{ "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 | Signification |
|---|---|---|
| 401 | INVALID_KEY | Clé absente, mal formée, révoquée ou inconnue |
| 403 | PLAN_REQUIRED | Le propriétaire de la clé n’est plus Pro (les clés cessent immédiatement de fonctionner après un passage à une offre inférieure) |
| 400 | BAD_REQUEST | JSON invalide, code vide ou mode différent de performance / dynamic |
| 413 | PAYLOAD_TOO_LARGE | Le code source dépasse 2 Mo par requête |
| 415 | UNSUPPORTED_MEDIA_TYPE | Content-Type n’est pas application/json |
| 422 | COMPILE_FAILED | Le code source n’a pas pu être compilé (l’exécution n’est pas décomptée) |
| 429 | QUOTA_EXCEEDED | Exécutions mensuelles épuisées ; la réponse inclut limit / remaining / resetAt |
| 503 | ENGINE_UNAVAILABLE / TIMEOUT | Le moteur démarre ou a dépassé le délai |
| 503 | QUOTA_UNAVAILABLE / UNAVAILABLE | Le service de quota ou de clés est temporairement indisponible |
Toute réponse 503 peut être réessayée et aucune n’est décomptée : attendez la durée indiquée par l’en-tête Retry-After (en secondes, également dans le champ JSON retryAfter), puis réessayez | ||
| 500 | INTERNAL_ERROR | Erreur serveur inattendue (l’exécution n’est pas décomptée) ; réessayez plus tard |
5. Exemple curl
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. Exemple Node.js
// 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. Conseils de sécurité
- N’intégrez jamais une clé dans du code exécuté par le navigateur et ne la commitez jamais dans un dépôt ; conservez-la dans une variable d’environnement côté serveur.
- Révoquez une clé depuis la page du compte dès que vous soupçonnez une fuite.
- Les requêtes standard sont traitées en mémoire et votre code n’est jamais écrit dans les journaux. Les gros fichiers sont stockés temporairement dans un espace de stockage privé et supprimés automatiquement sous 24 heures.