Skip to content

Webhooks

Webhooks let you receive real-time notifications when events occur in your Aureva projects. Configure a webhook URL in your project settings, and Aureva will send HTTP POST requests to your endpoint whenever supported events are triggered.


EventDescription
key.createdA new key was created
key.expiredA key has expired
key.usedA key was used (script access granted)
key.deletedA key was deleted or revoked
hwid.resetHWID binding was reset for a key
hwid.changedHWID was changed or updated for a key
script.uploadedA new script was uploaded
script.updatedAn existing script was updated
auth.failedAn authentication attempt failed (invalid key, HWID mismatch, etc.)
auth.successAn authentication attempt succeeded

Each webhook has:

FieldDescription
nameDisplay name for the webhook
urlEndpoint URL (must be HTTPS for production)
eventsJSON array of event types to receive
is_activeWhether the webhook is enabled
secretOptional secret for HMAC-SHA256 signature verification

For non-Discord URLs, Aureva sends:

{
"event": "key.used",
"project_id": "proj_abc123",
"timestamp": 1709654400,
"data": {
"key_id": "key_456",
"script_id": "script_789",
"hwid": "hwid_hash",
"ip": "1.2.3.4"
}
}
FieldDescription
eventEvent type (e.g., key.used)
project_idProject identifier
timestampUnix timestamp (seconds)
dataEvent-specific payload

When the webhook URL is a Discord webhook (https://discord.com/api/webhooks/... or https://discordapp.com/api/webhooks/...), Aureva sends a Discord embed payload with event-specific titles and colors instead of the generic JSON structure.


When a secret is configured, Aureva includes an X-Webhook-Signature header with an HMAC-SHA256 signature of the request body. Verify it to ensure the request is from Aureva and has not been tampered with.

const crypto = require('crypto');
function verifyWebhookSignature(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature, 'hex'),
Buffer.from(expected, 'hex')
);
}
// In your handler:
const rawBody = await request.text();
const signature = request.headers.get('X-Webhook-Signature');
if (secret && !verifyWebhookSignature(rawBody, signature, secret)) {
return new Response('Invalid signature', { status: 401 });
}

Use the dashboard to manage webhooks:

  1. Go to Project → Settings → Webhooks
  2. Add, edit, or remove webhook URLs
  3. Select which events to receive
  4. Optionally set a secret for signature verification
  5. Send test events to verify your endpoint
  6. View delivery logs for each webhook (event type, status, timestamp)

  1. Respond quickly — Return 200 within 10 seconds; process in background.
  2. Verify signatures — Use the shared secret to validate requests when configured.
  3. Handle idempotency — Use event data to deduplicate if your endpoint may receive duplicates.
  4. Log events — Store raw payloads for debugging and auditing.
  5. Monitor failures — Set up alerts for repeated delivery failures.