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 vi 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 |