Fejlesztők → Webhooks
A NameOcean aláírt JSON-eseményt küld az Ön HTTPS-végpontjára, amikor valami történik a fiókjában, így a kódja reagálhat, ahelyett, hogy folyamatosan lekérdezne.
A Vezérlőpult → Webhookok menüben, az API segítségével, vagy MCP-n keresztül az AI-asszisztensétől kérve (create_webhook). Válasszon eseménytípusokat, csoportokat, például dns.*, vagy az összes eseményt. A válasz tartalmazza az aláírási titkot (whsec_…).
$ curl -X POST https://nameocean.net/api/v1/webhooks \ -H "Authorization: Bearer $NAMEOCEAN_API_KEY" -H "Content-Type: application/json" \ -d '{"url": "https://example.com/hooks/nameocean", "events": ["dns.*", "ssl.issued", "domain.expiring"]}'
Az URL-nek https-nek kell lennie egy nyilvános szerveren. Válaszoljon bármilyen 2xx kóddal 10 másodpercen belül; a lassú műveleteket a válasz után végezze.
Content-Type: application/json
X-NameOcean-Event: dns.record.created
X-NameOcean-Delivery: whd_7c1e0f9a2b3d4e5f6a7b8c9d
X-NameOcean-Signature: t=1794300000,v1=5f2b…
{
"id": "evt_3a9f1c2e4b5d6a7c8e9f0a1b",
"type": "dns.record.created",
"created": "2026-11-10T09:20:00+00:00",
"data": {
"zone": "example.com",
"record": {"id": 4211, "type": "A", "hostname": "www", "ip": "203.0.113.10", "ttl": "1h"}
}
}
Az esemény azonosítója változatlan marad, amikor egy kézbesítést újrapróbálnak vagy újraküldenek: ennek alapján hagyja ki a már feldolgozott eseményeket. Az események nem feltétlenül sorrendben érkeznek.
A t a kérés Unix-időbélyege, a v1 pedig a t, egy pont és a nyers törzs hexadecimális HMAC-SHA256 értéke, az Ön titkos kulcsával aláírva. Számítsa ki a nyers bájtokon, még a JSON feldolgozása előtt, az összehasonlítást végezze állandó idejű módon, és utasítsa el az öt percnél régebbi időbélyegeket.
t=1794300000,v1=hex(HMAC_SHA256(secret, "1794300000." + raw_body))
import hashlib, hmac, time
def verify(secret: str, header: str, body: bytes, tolerance: int = 300) -> bool:
fields = dict(part.split("=", 1) for part in header.split(","))
ts = int(fields["t"])
if abs(time.time() - ts) > tolerance:
return False
expected = hmac.new(secret.encode(), f"{ts}.".encode() + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, fields.get("v1", ""))
import crypto from "node:crypto";
export function verify(secret, header, rawBody, tolerance = 300) {
const fields = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
const ts = Number(fields.t);
if (Math.abs(Date.now() / 1000 - ts) > tolerance) return false;
const expected = crypto.createHmac("sha256", secret).update(`${ts}.`).update(rawBody).digest("hex");
const got = Buffer.from(fields.v1 || "", "hex");
return got.length === 32 && crypto.timingSafeEqual(Buffer.from(expected, "hex"), got);
}
func Verify(secret, header string, body []byte) bool {
var ts int64
var v1 string
for _, part := range strings.Split(header, ",") {
k, v, _ := strings.Cut(part, "=")
switch k {
case "t":
ts, _ = strconv.ParseInt(v, 10, 64)
case "v1":
v1 = v
}
}
if d := time.Now().Unix() - ts; d > 300 || d < -300 {
return false
}
mac := hmac.New(sha256.New, []byte(secret))
fmt.Fprintf(mac, "%d.", ts)
mac.Write(body)
return hmac.Equal([]byte(hex.EncodeToString(mac.Sum(nil))), []byte(v1))
}
A válasz nélküli, időtúllépéses, 5xx, 408 vagy 429 kóddal végződő kézbesítést a rendszer újrapróbálja a következő ütemezés szerint: 1m, 5m, 30m, 2h, 5h, 10h, 10h – összesen 8 kísérlet nagyjából egy nap alatt. Bármely más 4xx kód esetén a kézbesítés azonnal sikertelen. Ha 5 egymást követő kézbesítés véglegesen sikertelen, a végpont kikapcsol, és Ön e-mailt kap róla; visszakapcsolhatja a vezérlőpulton vagy a PATCH active: true kéréssel. Minden kézbesítés – az állapotkóddal és a válasza elejével együtt – megtekinthető a vezérlőpulton és a GET /api/v1/webhooks/{id}/deliveries címen, ahol egy-egy kézbesítést újra is küldhet.
| domain.registered | Egy domaint regisztráltak a fiókjában. |
| domain.renewed | Egy domain lejárati dátuma későbbre került (megújítás). |
| domain.expiring | Egy domain 30, 7 vagy 1 nap múlva lejár. |
| domain.expired | Egy domain tegnap lejárt. |
| domain.nameservers.updated | Egy domain névszerverei megváltoztak. |
| domain.transfer.started | Bejövő vagy kimenő transzfert kérelmeztek a regisztrynél. |
| domain.transfer.completed | Egy transzfer befejeződött. |
| domain.transfer.failed | Egy transzfert elutasítottak vagy visszavontak. |
| dns.zone.created | Egy DNS-zóna létrejött. |
| dns.zone.deleted | Egy DNS-zóna törölve lett. |
| dns.record.created | Egy DNS-rekord hozzá lett adva. |
| dns.record.updated | Egy DNS-rekord megváltozott. |
| dns.record.deleted | Egy DNS-rekord törölve lett. |
| ssl.issued | Egy tanúsítvány először lett kiállítva. |
| ssl.renewed | Egy tanúsítvány meg lett újítva. |
| ssl.expiring | Egy tanúsítvány 7 nap múlva lejár, és még nincs megújítva. |
| email.mailbox.created | Egy postafiókot adtak hozzá az egyik levelezési domainjéhez. |
| email.mailbox.deleted | Egy postafiók és a benne lévő levelek törölve lettek. |
| email.forwarding.enabled | Az e-mail-továbbítás be lett kapcsolva egy domainnél. |
| email.forwarding.disabled | Az e-mail-továbbítás ki lett kapcsolva egy domainnél – Ön kapcsolta ki, vagy a domain már nem felelt meg a feltételeknek (az ok az eseményben található). |
| webhook.test | A Tesztküldés gomb megnyomásakor kerül elküldésre; figyelmen kívül hagyja a végpont eseményszűrőjét. |
A data mező tartalmazza a domaint vagy zónát és az objektumot: a rekordot (módosításkor a previous értékkel), a lejárati dátumot, a névszervereket (a previous értékkel). Az egyes objektumok pontos mezői megegyeznek a REST API mezőivel.
A beérkező e-mailek is továbbíthatók egy URL-re: ezt címenként állíthatja be az E-mail-továbbítás oldalon. Ezek a kérések ugyanazokat a fejléceket és aláírást használják, X-NameOcean-Event: email.received értékkel.