API Documentation

Syntexxx API

Lua obfuscation API with LuaVM virtualization, string encryption, control flow flattening, and anti-tamper protection.

Base URL

https://api-syntexxx.pages.dev

All requests use JSON bodies and return JSON responses.

Overview

9+
Protection Layers
5x
VM Depth
<1s
Avg Response

Obfuscate Code

POST /api/v1/obfuscate

Authentication

Include your API key in the Authorization header:

Authorization: Bearer stx_YOUR_API_KEY

Minimal Request

{
  "code": "print('Hello World')"
}

Full Request

{
  "code": "local secretKey = 0xDEADBEEF\nlocal function verify(input)\n  return input == secretKey\nend\nprint(verify(123))",
  "options": {
    "useLuaVM": true,
    "loaderVMDepth": 3,
    "encryptStrings": true,
    "proxifyLocals": true,
    "proxifyFunctions": true,
    "antiTamper": true,
    "isLuauRuntime": true,
    "controlFlowFlattening": true,
    "minify": true
  }
}

Preset Request

{
  "code": "print('Protect me with luavm preset')",
  "preset": "luavm"
}

Configuration Options

Option Type Default Description
useLuaVMbooleantrueVirtualizes AST into custom LuaVM bytecode with dynamic opcode shuffling
loaderVMDepthinteger3Nested VM layers (1-5). Higher = stronger protection
encryptStringsbooleantrueEncrypts all string literals, decoded at runtime
proxifyLocalsbooleantrueWraps locals into metatable proxy containers
proxifyFunctionsbooleantrueWraps functions through callable proxies
antiTamperbooleantrueInjects environment verification & anti-hooking checks
isLuauRuntimebooleantrueProtects against Luau deobfuscators
controlFlowFlatteningbooleantrueFlattens execution into state-machine driven blocks
minifybooleantrueStrips debug symbols, comments, mangles identifiers

Responses

200 — Success

{
  "success": true,
  "code": "--[( syntexxx.pages.dev )]--\nlocal ...",
  "stats": {
    "input_bytes": 35,
    "output_bytes": 16420,
    "elapsed_seconds": 0.38
  }
}

200 — Syntax Error

{
  "success": false,
  "error": "Syntax Error on line 2: no viable alternative at input '='",
  "error_details": {
    "line": 2,
    "column": 9,
    "detail": "no viable alternative at input '='",
    "suggestion": "Lua uses '==' for equality and '~=' for inequality.",
    "snippet": "        1 | local x = 1\n>>> 2 | if x === 2 then\n    |         ^\n    3 |     print('bad')\n    4 | end"
  }
}

400 — Bad Request

{
  "success": false,
  "error": "Missing or invalid \"code\" field. Must be a non-empty string."
}

Code Examples

JavaScript (fetch)

const response = await fetch('https://api-syntexxx.pages.dev/api/v1/obfuscate', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer stx_YOUR_API_KEY'
  },
  body: JSON.stringify({
    code: "print('Hello from Syntexxx!')",
    options: { useLuaVM: true, loaderVMDepth: 3 }
  })
});

const data = await response.json();
if (data.success) {
  console.log('Protected code:', data.code);
} else {
  console.error('Error:', data.error);
}

Python (requests)

import requests

response = requests.post(
    "https://api-syntexxx.pages.dev/api/v1/obfuscate",
    headers={"Authorization": "Bearer stx_YOUR_API_KEY"},
    json={
        "code": "local a, b = 10, 20\nprint(a + b)",
        "options": {
            "useLuaVM": True,
            "loaderVMDepth": 3,
            "encryptStrings": True,
        }
    }
)

data = response.json()
if data.get("success"):
    print(f"Output size: {len(data['code'])} bytes")
else:
    print(f"Error: {data.get('error')}")

cURL

curl -X POST https://api-syntexxx.pages.dev/api/v1/obfuscate \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer stx_YOUR_API_KEY" \
  -d '{"code": "print(1+1)", "options": {"useLuaVM": true}}'

Roblox / Luau (HttpService)

local HttpService = game:GetService("HttpService")

local response = HttpService:RequestAsync({
    Url = "https://api-syntexxx.pages.dev/api/v1/obfuscate",
    Method = "POST",
    Headers = {
        ["Content-Type"] = "application/json",
        ["Authorization"] = "Bearer stx_YOUR_API_KEY"
    },
    Body = HttpService:JSONEncode({
        code = "local key = 'VIP'\nprint(key)",
        options = { useLuaVM = true, loaderVMDepth = 3 }
    })
})

if response.Success then
    local data = HttpService:JSONDecode(response.Body)
    if data.success then
        print("Protected! Size:", #data.code)
    end
end

Rate Limits & Notes

Requests are subject to the upstream rate limits of the obfuscation service. For high-volume usage, include a valid API key.

The Authorization header is forwarded to the upstream service. Generate a key from the Syntexxx dashboard.