Webhook-dokumentation
Brug webhooks til at modtage realtidsnotifikationer fra Mahoje Hosting i din applikation.
Hvad er webhooks?
En webhook er en HTTP POST-forespørgsel som Mahoje Hosting sender til din server, når en hændelse opstår, fx når en postkasse oprettes, en betaling modtages, eller et site deployes. Du registrerer en URL og vælger de events du vil lytte på.
Payload-format
Alle webhooks sendes som JSON med Content-Type: application/json:
{
"event": "mailbox.created",
"timestamp": 1735000000000,
"data": {
"name": "info",
"domain": "ditdomaene.dk"
}
}
Signaturverificering
Hver forespørgsel indeholder headeren X-Mahoje-Signature med et HMAC-SHA256-fingeraftryk:
X-Mahoje-Signature: sha256=abc123...
Verificér signaturen i din handler (Node.js):
import { createHmac, timingSafeEqual } from "node:crypto";
function verifySignature(payload, signature, secret) {
const expected = "sha256=" + createHmac("sha256", secret)
.update(payload).digest("hex");
const a = Buffer.from(signature);
const b = Buffer.from(expected);
if (a.length !== b.length) return false;
return timingSafeEqual(a, b);
}
Python-eksempel:
import hmac, hashlib
def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
expected = "sha256=" + hmac.new(
secret.encode(), payload, hashlib.sha256
).hexdigest()
return hmac.compare_digest(signature, expected)
Retry-adfærd
Hvis din server svarer med en fejlkode (ikke 2xx) eller timeout, forsøger jeg automatisk igen:
- Første forsøg øjeblikkeligt
- Andet forsøg efter 5 sekunder
- Tredje forsøg efter 30 sekunder
- Fjerde (og sidste) forsøg efter 2 minutter
Din handler bør svare inden for 10 sekunder. Brug en kø til tunge operationer.
Event-typer
| Event | Beskrivelse |
|---|---|
mailbox.created | En postkasse er oprettet |
mailbox.deleted | En postkasse er slettet |
alias.created | Et alias er oprettet |
alias.deleted | Et alias er slettet |
domain.active | DNS-zone er aktiv (NS-skift bekræftet) |
payment.received | Betaling modtaget |
payment.failed | Betaling fejlet |
site.deployed | Preview-site deployet |