Skip to content

Webhooks

Webhooks

Izmantojot Webhooks, jūs saņemat reāllaika paziņojumus, kad jūsu Workspace notiek notikumi — piemēram, kad tiek noskenēts QR kods.

Izveidot webhook

Terminal window
POST /v1/webhooks
{
"url": "https://example.com/webhooks/qr3",
"events": ["qr.scanned", "qr.created"],
"secret": "my-secret-key-min-16-chars"
}

Atbilde

{
"id": "wh_abc123",
"url": "https://example.com/webhooks/qr3",
"events": ["qr.scanned", "qr.created"],
"is_active": true,
"secret": "my-secret-key-min-16-chars",
"secret_hint": "my-s…",
"created_at": "2026-03-15T10:00:00.000Z"
}

Notikumu veidi

NotikumsApraksts
*Visi notikumi
qr.createdQR kods izveidots
qr.updatedQR kods atjaunināts (URL, statuss, tagi)
qr.deletedQR kods dzēsts
qr.scannedQR kods noskenēts
qr.flaggedQR kods atzīmēts kā nedrošs
scan.createdSkenēšanas notikums (alias priekš qr.scanned)
workspace.updatedWorkspace atjaunināts
webhook.pingTesta ping (izmantojot /ping galapunktu)

Payload formāts

Visiem Webhook payload ir šāds formāts:

{
"id": "evt_abc123xyz",
"type": "qr.scanned",
"created": "2026-03-15T10:00:00.000Z",
"data": {
"code_id": "qr_abc123",
"short_code": "r7f3Kx",
"scan_id": "scn_xyz",
"country": "AT",
"device_type": "mobile",
"os": "iOS"
}
}

Paraksta verifikācija

qr3.app paraksta katru Webhook pieprasījumu ar HMAC-SHA256:

X-QR3-Signature: sha256=a1b2c3d4e5f6...

Verifikācijas ieviešana

import crypto from "crypto";
function verifySignature(
payload: string,
signature: string,
secret: string
): boolean {
const expected = crypto
.createHmac("sha256", secret)
.update(payload)
.digest("hex");
const received = signature.replace("sha256=", "");
return crypto.timingSafeEqual(
Buffer.from(expected, "hex"),
Buffer.from(received, "hex")
);
}
// In Express:
app.post("/webhooks/qr3", (req, res) => {
const signature = req.headers["x-qr3-signature"] as string;
const valid = verifySignature(
JSON.stringify(req.body),
signature,
process.env.QR3_WEBHOOK_SECRET
);
if (!valid) return res.status(401).json({ error: "Invalid signature" });
const event = req.body;
console.log(event.type, event.data);
res.json({ received: true });
});

Atkārtošanas loģika

Kļūdu gadījumā (HTTP >= 300 vai noilgums) qr3.app mēģina veikt piegādi vēlreiz:

MēģinājumsAizture
1Tūlīt
21 minūte
35 minūtes

Pēc 10 pēc kārtas sekojošām kļūdām Webhook tiek automātiski deaktivizēts.

Piegādes žurnāli

Terminal window
GET /v1/webhooks/:id/deliveries
{
"data": [
{
"id": "whd_abc123",
"event_type": "qr.scanned",
"status": "success",
"status_code": 200,
"response_time_ms": 145,
"attempt": 1,
"created_at": "2026-03-15T10:00:00.000Z"
}
]
}

Testa ping

Testējiet Webhook nekavējoties:

Terminal window
POST /v1/webhooks/:id/ping

Tas nosūta webhook.ping notikumu uz jūsu galapunkta URL.