API Reference

Pro

Integrate wYnFuscate into your CI/CD pipeline, build tools, or custom applications with our REST API. Available for Pro and Enterprise plans.

Quick Start

1

Generate an API Key

Go to Dashboard → Settings → API Keys and create a new key.

2

Submit a file for obfuscation

Loading...
3

Poll for completion

Loading...
4

Download the obfuscated file

Loading...
5

(Optional) Delete the job to free storage

Loading...

Endpoints Overview

MethodEndpointDescription
POST/obfuscateSubmit a file for obfuscation
GET/jobs/{id}Get job status and details
GET/jobs/{id}/downloadDownload obfuscated output
DELETE/jobs/{id}Delete job and free storage

Authentication

All API requests require authentication using a Bearer token. Include your API key in the Authorization header:

Loading...

Keep your API key secure

Never expose your API key in client-side code, public repositories, or logs. API keys have full access to your account's obfuscation capabilities.

API Key Format

API keys follow the format wynf_ followed by 32 alphanumeric characters. Example: wynf_WA26Jeusd6JQWowkJYbo1peqyKJFe5uE

Key Limits

  • Each account can have 1 active API key at a time
  • Revoke your existing key before creating a new one
  • Keys are shown only once at creation - store them securely
  • Keys are automatically revoked if you downgrade from Pro/Enterprise

Base URL

Loading...

All endpoints are relative to this base URL. Use HTTPS for all requests.

Endpoints

POST/obfuscate

Submit a Lua file for obfuscation. Returns a job ID that you can use to check status and download the result.

Request

ParameterTypeRequiredDescription
fileFileYesThe .lua file to obfuscate (max 5MB Pro, 10MB Enterprise)
targetPlatformStringNoTarget Lua platform (default: ROBLOX). See available platforms below.
securityTierStringNoSecurity tier: STANDARD (default), ENHANCED, or MAX. See tiers below.
enhancedCompressionStringNoSet to "true" to enable Enhanced VM Compression. Reduces output file size at the cost of slightly slower initialization. Pro and Enterprise only. Target platform must support load or loadstring.
nodeStringNoObfuscator node: STABLE (default) or BETA. Beta uses the latest pre-release obfuscator for testing. Basic, Pro, and Enterprise only.
autoApplyMacrosStringNoSet to "true" to automatically inject WYNF_JIT_MAX wrappers on hot functions. Basic, Pro, and Enterprise only (or credits).
optimizeSourceStringNoSet to "true" to enable source-level optimizations before obfuscation. Basic, Pro, and Enterprise only (or credits).
enableLineInfoStringNoSet to "true" to remap runtime errors to original source lines. May have a slight impact on performance when enabled.
performanceModeStringNoSet to "true" to enable Performance Mode. Prioritizes runtime speed over some polymorphic hardening. Standalone option, combinable with any security tier. Beta node only. Basic, Pro, and Enterprise only (or credits).

Target Platforms

Specify the Lua runtime your script will run on. This optimizes the obfuscated output for compatibility.

ValueDescription
AUTOUniversal mode - works across multiple Lua runtimes.
ROBLOXRoblox (Luau) - Default. Optimized for Roblox game scripts.
ROBLOX_COMPATRoblox (Max Compatibility) - Reduced security for maximum compatibility across custom Roblox environments.
LUAUStandalone Luau CLI runtime.
LUA51Standard Lua 5.1.
LUA52Standard Lua 5.2.
LUA53Standard Lua 5.3.
LUA54Standard Lua 5.4.
LUAJITLuaJIT 2.x. High-performance JIT compiler.

Security Tiers

TierDescription
STANDARDBaseline protection with fast processing. Recommended for most scripts. (Default)
ENHANCEDAdditional protection layers with moderate overhead.
MAXMaximum security with all protection features. Comes with a performance trade-off.

Obfuscator Nodes

Choose which obfuscator release to use. The beta node runs the latest pre-release version for testing new features and fixes before they are promoted to stable.

ValueDescription
STABLEProduction obfuscator. Thoroughly tested and reliable. (Default)
BETAPre-release obfuscator for testing. May include new features, optimizations, or bug fixes not yet in stable. Basic, Pro, and Enterprise only.

Example Request

Loading...

Example Request (with Target Platform)

Loading...

Example Request (with Security Tier)

Loading...

Example Request (with Beta Node)

Loading...

Example Request (with Source Optimization)

Loading...

Example Request (with Line Info)

Loading...

Example Request (with Performance Mode - Beta Node)

Loading...

Example Request (with All Options)

Loading...

Example Request (with Enhanced Compression)

Loading...

Response

Loading...
GET/jobs/{id}

Get the current status and details of an obfuscation job.

Job Statuses

pending

Queued for processing

processing

Currently obfuscating

completed

Ready to download

failed

Error occurred

Polling Rate Limits

Important: This endpoint has rate limits to prevent abuse:

  • Per-minute limit: 20 requests/min (FREE/PRO), 60 requests/min (Enterprise)
  • Per-job limit: Maximum 120 polls per job (all plans)

Recommended polling strategy: Start with 2-second intervals, then use exponential backoff (double the interval each time, max 30 seconds). Most jobs complete within 5-15 seconds.

Example Request

Loading...

Response (Completed)

Loading...

Response (Failed)

Loading...
GET/jobs/{id}/download

Download the obfuscated file. Only available when job status is completed.

Example Request

Loading...

Response Headers

Loading...

Note: Files are retained for 14 days after creation. After expiration, the download endpoint returns a 410 Gone error.

DELETE/jobs/{id}

Delete a job and its obfuscated output file from storage. This permanently removes the file and frees up your storage quota.

This action is permanent

Deleted jobs cannot be recovered. Make sure you have downloaded any files you need before deleting.

Example Request

Loading...

Response

Loading...

Response Fields

FieldTypeDescription
successbooleanAlways true on success
jobIdstringThe ID of the deleted job
deletedFilesstring[]Which files were deleted (typically output)
storageFreednumberBytes freed from your storage quota

Error Responses

HTTPCodeDescription
401UNAUTHORIZEDInvalid or missing API key
403FORBIDDENAPI key lacks jobs:write scope
404NOT_FOUNDJob not found or already deleted

Error Codes

HTTPCodeDescription
400BAD_REQUESTInvalid request parameters
400INVALID_FILEFile validation failed (wrong type, too large, etc.)
400NOT_READYJob not completed yet (for download endpoint)
401UNAUTHORIZEDMissing or invalid API key
401INVALID_KEYAPI key format is invalid or key not found
401KEY_REVOKEDAPI key has been revoked
401KEY_EXPIREDAPI key has expired
403FORBIDDENAPI key lacks required scope
403PLAN_DOWNGRADEDAccount no longer has API access (downgraded plan)
403QUOTA_EXCEEDEDDaily quota or concurrent job limit exceeded
404NOT_FOUNDJob not found or doesn't belong to your account
410EXPIREDJob files have expired (14-day retention)
429RATE_LIMIT_EXCEEDEDToo many requests, slow down
500INTERNAL_ERRORServer error, please retry
503SERVICE_UNAVAILABLEService is under maintenance

Error Response Format

Loading...

Rate Limits

API requests are subject to rate limits to ensure fair usage. Limits are applied per API key.

PlanPer HourPer DayConcurrent Jobs
Pro10 requests50 requests3 jobs
Enterprise300 requestsUnlimited10 jobs

When rate limited, the API returns 429 Too Many Requests with a Retry-After header indicating how many seconds to wait before retrying.

Code Examples

Python

Loading...

Node.js

Loading...

Bash

Loading...

Best Practices

  • Use exponential backoff for polling

    Start with 1 second, then 2, 4, 8... to reduce API calls for longer jobs.

  • Store API keys in environment variables

    Never hardcode keys in source code or commit them to repositories.

  • Handle rate limits gracefully

    Check for 429 responses and respect the Retry-After header.

  • Validate files before uploading

    Check file extension and size client-side to avoid wasting API calls.

  • Download results promptly

    Files expire after 14 days. Download and store results in your own storage.