Webhooks
Set up webhooks to receive real-time event notifications from the Ajrly platform.
Webhooks allow your application to receive real-time HTTP notifications when events occur on the Ajrly platform.
How Webhooks Work
- You register a webhook URL in your Ajrly dashboard
- When an event occurs, Ajrly sends an HTTP POST request to your URL
- Your server processes the event and returns a
200response - If delivery fails, Ajrly retries with exponential backoff
Setting Up Webhooks
Via Dashboard
- Navigate to Settings → Webhooks
- Click Add Webhook
- Enter your endpoint URL
- Select the events you want to subscribe to
- Click Create
Via API
curl -X POST https://api.ajrly.com/v1/webhooks \
-H "Authorization: Bearer sk_live_abc123" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com/webhooks/ajrly",
"events": ["project.created", "project.updated"],
"secret": "whsec_your_signing_secret"
}'
Webhook Payload
Every webhook delivery includes:
{
"id": "evt_abc123",
"type": "project.created",
"created_at": "2026-03-01T12:00:00Z",
"data": {
"id": "proj_xyz789",
"name": "New Project",
"status": "active"
}
}
Verifying Signatures
Every webhook includes a signature header for verification:
X-Ajrly-Signature: sha256=abc123...
import crypto from 'node:crypto';
function verifyWebhook(payload, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(`sha256=${expected}`),
);
}
import hmac
import hashlib
def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, f"sha256={expected}")Available Events
| Event | Description |
|---|---|
project.created | A new project was created |
project.updated | A project was updated |
project.deleted | A project was deleted |
member.invited | A team member was invited |
member.joined | A team member accepted an invitation |
member.removed | A team member was removed |
deployment.started | A deployment has started |
deployment.completed | A deployment completed successfully |
deployment.failed | A deployment failed |
Retry Policy
If your endpoint returns a non-2xx response, Ajrly retries the delivery:
| Attempt | Delay |
|---|---|
| 1 | Immediate |
| 2 | 1 minute |
| 3 | 5 minutes |
| 4 | 30 minutes |
| 5 | 2 hours |
After 5 failed attempts, the webhook is marked as failed. You can manually retry from the dashboard.
Best Practices
- Return
200quickly — process events asynchronously - Implement idempotency — events may be delivered more than once
- Verify signatures on every request
- Use a message queue for reliable processing
- Monitor webhook delivery in your dashboard
Last updated: February 18, 2026
Edit this page on GitHub
Was this page helpful?
Thanks for your feedback!