Files
claudemesh/.context/turbostarter-framework-context/sections/web/billing/webhooks.md
Alejandro Gutiérrez d3163a5bff feat(db): mesh data model — meshes, members, invites, audit log
- pgSchema "mesh" with 4 tables isolating the peer mesh domain
- Enums: visibility, transport, tier, role
- audit_log is metadata-only (E2E encryption enforced at broker/client)
- Cascade on mesh delete, soft-delete via archivedAt/revokedAt

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 21:19:32 +01:00

42 lines
1.3 KiB
Markdown

---
title: Webhooks
description: Handle webhooks from your billing provider.
url: /docs/web/billing/webhooks
---
# Webhooks
TurboStarter handles billing webhooks to update customer data based on events received from the billing provider.
Occasionally, you may need to set up additional webhooks or perform custom actions with webhooks.
In such cases, you can customize the billing webhook handler in the billing router at `packages/api/src/modules/billing/router.ts`.
By default, the webhook handler is configured to be as straightforward as possible:
```ts title="router.ts"
import { webhookHandler } from "@turbostarter/billing/server";
export const billingRouter = new Hono().post("/webhook", (c) =>
webhookHandler(c.req.raw),
);
```
However, you can extend it using the callbacks provided from `@turbostarter/billing` package:
```ts title="router.ts"
import { webhookHandler } from "@turbostarter/billing/server";
export const billingRouter = new Hono().post("/webhook", (c) =>
webhookHandler(c.req.raw, {
onCheckoutSessionCompleted: (sessionId) => {},
onSubscriptionCreated: (subscriptionId) => {},
onSubscriptionUpdated: (subscriptionId) => {},
onSubscriptionDeleted: (subscriptionId) => {},
onEvent: (rawEvent) => {},
}),
);
```
You can provide one or more of the callbacks to handle the events you are interested in.