- Create an API key on the API Keys page (shown only once — store it safely).
- Send it with every request as
X-API-Key: edk_…orAuthorization: Bearer edk_…. - Submit a job, poll its status, then download the result.
Keys are rate-limited to 30 requests/minute by default and you may hold up to 5 active keys. Every call consumes the owning account's credits — one credit per decode.
curl https://sourcevault.eu.cc/api/v1/ping \
-H "X-API-Key: edk_your_key_here"
All endpoints return JSON. Errors use HTTP status codes:
401 invalid key · 402 no credits · 403 account restricted ·
413 too large · 422 invalid payload · 429 rate limited.
GET /api/v1/ping
Liveness check + key metadata (label, prefix, rate limit, expiry).
GET /api/v1/credits
Current balance plus a summary of credits expiring within 30 days.
POST /api/v1/decode
{
"filename": "encoded.php", // .php/.php5/.php7/.phtml
"content_b64": "PD9waHAgLi4u", // base64-encoded file content
"decoder_type": "ioncube", // ioncube|zend|sourceguardian
"php_version": "8" // 5|7|8
}
Returns 202 with a job id. Charges 1 credit. Demo mode is not available over the API.
GET /api/v1/jobs?status=&limit=&offset=
List your jobs. status: pending|processing|done|failed, limit ≤ 100.
GET /api/v1/jobs/{id}
Status of one job: pending → processing → done|failed.
GET /api/v1/jobs/{id}/download
Fetch the decoded result as base64 once the job is done.
# 1. Submit
JOB=$(curl -s https://sourcevault.eu.cc/api/v1/decode \
-H "X-API-Key: edk_…" \
-H "Content-Type: application/json" \
-d "{\"filename\":\"app.php\",\"content_b64\":\"$(base64 -w0 app.php)\"}" \
| sed -E 's/.*"id":([0-9]+).*/\1/')
# 2. Poll
curl -s https://sourcevault.eu.cc/api/v1/jobs/$JOB -H "X-API-Key: edk_…"
# 3. Download (when done)
curl -s https://sourcevault.eu.cc/api/v1/jobs/$JOB/download \
-H "X-API-Key: edk_…" | jq -r .content_b64 | base64 -d > decoded_app.php