Every payment lifecycle event across every connected processor is published through a single canonical schema: Pen.v1. Your integration logic never needs to know which processor handled the transaction. Subscribe once. Stay subscribed.
// Verify the signature in your webhook handler const sig = req.headers['penumbra-signature']; const expected = crypto.createHmac('sha256', process.env.PENUMBRA_WEBHOOK_SECRET) .update(req.body).digest('hex'); if (sig !== expected) return res.status(401).end(); // Safe to process — payload is authenticated
decision_id was assigned. Pre-authorization.transaction.refunded which fires on the parent transaction.The catalogue is opinionated but extendable. Tell us what you need and we'll often ship it within a release.