Search

Type to search documentation...

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

  1. You register a webhook URL in your Ajrly dashboard
  2. When an event occurs, Ajrly sends an HTTP POST request to your URL
  3. Your server processes the event and returns a 200 response
  4. If delivery fails, Ajrly retries with exponential backoff

Setting Up Webhooks

Via Dashboard

  1. Navigate to Settings → Webhooks
  2. Click Add Webhook
  3. Enter your endpoint URL
  4. Select the events you want to subscribe to
  5. 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

EventDescription
project.createdA new project was created
project.updatedA project was updated
project.deletedA project was deleted
member.invitedA team member was invited
member.joinedA team member accepted an invitation
member.removedA team member was removed
deployment.startedA deployment has started
deployment.completedA deployment completed successfully
deployment.failedA deployment failed

Retry Policy

If your endpoint returns a non-2xx response, Ajrly retries the delivery:

AttemptDelay
1Immediate
21 minute
35 minutes
430 minutes
52 hours

After 5 failed attempts, the webhook is marked as failed. You can manually retry from the dashboard.

Best Practices

  • Return 200 quickly — 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?