Skip to main content

Webhook handler

Handle webhook events in your application.

Express.js example

import express from "express";
import { Conduit } from "@mappa-ai/conduit";

const app = express();
const conduit = new Conduit({ apiKey: process.env.CONDUIT_API_KEY! });

app.post("/webhooks/conduit", express.json(), (req, res) => {
// Verify signature
const signature = req.headers["x-conduit-signature"] as string;
const isValid = conduit.webhooks.verify(req.body, signature, {
secret: process.env.CONDUIT_WEBHOOK_SECRET!,
});

if (!isValid) {
return res.status(401).json({ error: "Invalid signature" });
}

// Handle event
const { event, data } = req.body;

switch (event) {
case "job.completed":
console.info(`Job ${data.jobId} completed`);
// Process the completed report
break;

case "job.failed":
console.error(`Job ${data.jobId} failed: ${data.error}`);
// Handle failure
break;

case "job.canceled":
console.info(`Job ${data.jobId} was canceled`);
break;

default:
console.warn(`Unknown event: ${event}`);
}

res.status(200).json({ received: true });
});

app.listen(3000);

FastAPI example

import os

from fastapi import FastAPI, Request, HTTPException
from conduit import Conduit

app = FastAPI()
conduit = Conduit(api_key=os.environ["CONDUIT_API_KEY"])

@app.post("/webhooks/conduit")
async def handle_webhook(request: Request):
payload = (await request.body()).decode()

try:
conduit.webhooks.verify_signature(
payload,
request.headers,
os.environ["CONDUIT_WEBHOOK_SECRET"],
)
except Exception as exc:
raise HTTPException(status_code=401, detail=str(exc)) from exc

event = conduit.webhooks.parse_event(payload)

if event.type == "report.completed":
report = conduit.reports.get(event.data["reportId"])
print(f"Report ready: {report.id}")

return {"received": True}