API webhookok
Hozz létre aláírt Rivya API webhook endpointokat, ellenőrizd a kézbesítési aláírásokat, vizsgáld meg a kézbesítési próbálkozásokat, és küldj biztonságos teszteseményeket.
Utoljára ellenőrizve: 2026/05/11
Akkor használj API webhookokat, amikor az integrációdnak arra van szüksége, hogy a Rivya értesítse a szerveredet, miután egy Public API generálás végállapotba ér.
A GET /api/v1/generations/{taskId} polling továbbra is támogatott. A webhookok aláírt callbackeket adnak azokhoz az éles rendszerekhez, amelyek eseménykézbesítést preferálnak.
Szükséges scope
A webhookkezeléshez olyan API-kulcs kell, amely tartalmazza:
webhooks:manageA Beállításokban létrehozott új kulcsok alapértelmezés szerint tartalmazzák ezt a scope-ot.
Endpoint létrehozása
POST /api/v1/webhookscurl https://rivya.ai/api/v1/webhooks \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Production webhook",
"url": "https://example.com/rivya/webhook",
"event_types": ["generation.succeeded", "generation.failed"]
}'A válasz csak egyszer tartalmazza a signing_secret értéket:
{
"id": "whend_...",
"object": "webhook_endpoint",
"name": "Production webhook",
"url": "https://example.com/rivya/webhook",
"event_types": ["generation.succeeded", "generation.failed"],
"status": "active",
"secret_preview": "whsec_12...abc123",
"signing_secret": "whsec_...",
"last_success_at": null,
"last_failure_at": null,
"failure_count": 0,
"created_at": "2026-05-11T00:00:00.000Z",
"updated_at": "2026-05-11T00:00:00.000Z",
"disabled_at": null,
"revoked_at": null
}Tárold a teljes titkot a szervereden. Ha elveszíted, hívd meg a rotate endpointot, és frissítsd a fogadó oldalt.
URL-szabályok
Az endpoint URL-eknek HTTPS-t kell használniuk. A Rivya elutasítja a hitelesítő adatokat, fragmenteket, localhost neveket, helyi hálózati címeket, privát IP-tartományokat, loopback címeket és fenntartott címeket tartalmazó URL-eket.
A Rivya mindig ezt küldi:
POSTContent-Type: application/json- nincs egyedi, felhasználó által vezérelt request header
- nincs automatikus redirectkövetés
- rövid kézbesítési timeout
Események
Jelenlegi eseménytípusok:
generation.succeededgeneration.failed
A webhook payloadok ugyanazt a nyilvános generálási szerializálót használják, mint az állapot endpoint.
{
"id": "evt_...",
"type": "generation.succeeded",
"api_version": "2026-05-11",
"created_at": "2026-05-11T00:00:00.000Z",
"data": {
"generation": {
"id": "task_public_id",
"status": "succeeded",
"model": "z-image",
"reserved_credits": 1,
"final_credits": 1,
"created_at": "2026-05-11T00:00:00.000Z",
"updated_at": "2026-05-11T00:01:00.000Z",
"result": {
"primary_url": "https://...",
"urls": ["https://..."]
},
"error": null
}
}
}Kézbesítési headerek
Minden kézbesítés tartalmazza:
Rivya-Webhook-Id: evt_...
Rivya-Webhook-Timestamp: 1778467200
Rivya-Webhook-Signature: v1=<hex-hmac-sha256>
Rivya-Webhook-Attempt: 1
Rivya-Webhook-Endpoint-Id: whend_...
Rivya-Request-Id: req_...Aláírási bemenet:
${timestamp}.${rawBody}Algoritmus:
HMAC-SHA256 with the endpoint signing secretUtasítsd el az elavult timestampet tartalmazó kéréseket. Az ötperces tolerancia praktikus alapértelmezés.
JavaScript ellenőrzés
import crypto from "node:crypto";
function verifyRivyaWebhook({ rawBody, headers, signingSecret }) {
const timestamp = headers["rivya-webhook-timestamp"];
const signature = headers["rivya-webhook-signature"] || "";
const actual = signature.split(",").find((part) => part.startsWith("v1="))?.slice(3);
const expected = crypto
.createHmac("sha256", signingSecret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
if (!actual) return false;
return crypto.timingSafeEqual(Buffer.from(actual, "hex"), Buffer.from(expected, "hex"));
}Python ellenőrzés
import hmac
import hashlib
def verify_rivya_webhook(raw_body: str, headers: dict, signing_secret: str) -> bool:
timestamp = headers.get("rivya-webhook-timestamp", "")
signature = headers.get("rivya-webhook-signature", "")
actual = next((part[3:] for part in signature.split(",") if part.startswith("v1=")), "")
expected = hmac.new(
signing_secret.encode(),
f"{timestamp}.{raw_body}".encode(),
hashlib.sha256,
).hexdigest()
return bool(actual) and hmac.compare_digest(actual, expected)Endpointok kezelése
GET /api/v1/webhooks
GET /api/v1/webhooks/{endpointId}
PATCH /api/v1/webhooks/{endpointId}
DELETE /api/v1/webhooks/{endpointId}
POST /api/v1/webhooks/{endpointId}/rotate-secretcurl https://rivya.ai/api/v1/webhooks \
-H "Authorization: Bearer rvya_sk_..."
curl https://rivya.ai/api/v1/webhooks/whend_... \
-H "Authorization: Bearer rvya_sk_..."
curl -X PATCH https://rivya.ai/api/v1/webhooks/whend_... \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-d '{"status":"disabled"}'
curl -X POST https://rivya.ai/api/v1/webhooks/whend_.../rotate-secret \
-H "Authorization: Bearer rvya_sk_..."A DELETE /api/v1/webhooks/{endpointId} letiltja az endpointot. Nem törli a kézbesítési előzményeket.
Kézbesítési rekordok
Legutóbbi események listázása:
GET /api/v1/webhook-eventscurl https://rivya.ai/api/v1/webhook-events \
-H "Authorization: Bearer rvya_sk_..."Egy endpoint kézbesítési próbálkozásainak listázása:
GET /api/v1/webhooks/{endpointId}/deliveriescurl https://rivya.ai/api/v1/webhooks/whend_.../deliveries \
-H "Authorization: Bearer rvya_sk_..."A kézbesítési rekordok tartalmazzák az állapotot, HTTP státuszt, próbálkozásszámot, request id-t, időtartamot, csonkított válaszrészletet és nyilvános hibamezőket.
Tesztesemény
Küldj biztonságos tesztpayloadot:
POST /api/v1/webhooks/{endpointId}/testcurl -X POST https://rivya.ai/api/v1/webhooks/whend_.../test \
-H "Authorization: Bearer rvya_sk_..."A tesztesemény webhook.test típust használ. Nem hoz létre generálási feladatot, nem fogyaszt kreditet, és nem tartalmaz valódi eredmény URL-t.
Újrapróbálkozási szabályzat
A Rivya a HTTP 2xx választ sikernek tekinti.
Hibának számítanak a hálózati hibák, timeout, redirect válaszok és nem 2xx válaszok. A Rivya legfeljebb öt próbálkozást végez:
- azonnal
- 1 perc múlva
- 5 perc múlva
- 30 perc múlva
- 2 óra múlva
Az utolsó próbálkozás után az esemény failed állapotba kerül.
A webhook kézbesítési hibái nem módosítják a generálás állapotát, krediteket, visszatérítéseket vagy feladatelőzményeket.
Biztonsági ellenőrzőlista
- Ellenőrizd a HMAC aláírást az üzleti logika feldolgozása előtt.
- Utasítsd el az elavult timestampet.
- A teszteseményeket kezeld külön a generálási eseményektől.
- Ne logolj teljes aláírási titkokat.
- Csak akkor adj vissza
2xxválaszt, miután a fogadó oldal elfogadta az eseményt. - Tartsd meg a pollingot tartalék egyeztetési módként.
Kapcsolódó oldalak
Rivya TypeScript SDK
Használd a Rivya TypeScript SDK betát a Public API v1 hívására modellekhez, generálásokhoz, fájlokhoz, kreditekhez, webhookokhoz és Chathez, SSE streaminggel együtt.
Rivya API áttekintés
Használd a Rivya API v1-et, hogy saját termékedből API-kulcsokkal, fiókkreditekkel és opcionális SSE streaminggel hívd a Rivya generálási és chatmodelljeit.