for ai agents: see llm-prompt.txt
A TypeScript library that exports Next.js Checkout components for seamless checkout experiences.
# Not published on npm yet
npm install dodo-nextjs-adapter zod next
# Use the latest version from GitHub if you want to try out
npm install dodo-nextjs-adapter@https://github.com/that-ambuj/nextjs-adapter zod next
All the examples below assume you're using Next.js App Router.
// app/checkout/route.ts
import { Checkout } from 'dodo-nextjs-adapter'
export const GET = Checkout({
// Can be omitted if DODO_PAYMENTS_API_KEY environment variable is set.
bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
// URL to redirect to after successful checkout, can be omitted.
successUrl: process.env.SUCCESS_URL!,
// Omit or set to "live_mode" for production
environment: "test_mode"
})
The checkout route supports the following query parameters:
productId
- Product identifier (required, e.g.,?productId=pdt_nZuwz45WAs64n3l07zpQR
)customerEmail
- Customer email (optional, e.g.,?products=123&[email protected]
)customerName
- Customer name (optional, e.g.,?products=123&customerName=Jane
)
// app/customer-portal/route.ts
import { CustomerPortal } from 'dodo-nextjs-adapter'
export const GET = CustomerPortal({
// Can be omitted if DODO_PAYMENTS_API_KEY environment variable is set.
bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
// Omit or set to "live_mode" for production
environment: "test_mode",
// Write logic to get customerId from request here
getCustomerId: (req: NextRequest) => ""
})
// app/api/webhook/dodo-payments/route.ts
import { Webhook } from 'dodo-nextjs-adapter'
export const POST = Webhook({
webhookSecret: process.env.DODO_WEBHOOK_SECRET!,
onPayload: async (payload) => {
// handle the payload
}
// ... other event handlers for granular control
})
The Webhook
function accepts an object with various onEventName
properties, where EventName
corresponds to the type of webhook event. Each handler is an async
function that receives the parsed payload for that specific event type. Below is a comprehensive list of all supported event handlers with their function signatures:
onPayload?: (payload: WebhookPayload) => Promise<void>;
onPaymentSucceeded?: (payload: WebhookPayload) => Promise<void>;
onPaymentFailed?: (payload: WebhookPayload) => Promise<void>;
onPaymentProcessing?: (payload: WebhookPayload) => Promise<void>;
onPaymentCancelled?: (payload: WebhookPayload) => Promise<void>;
onRefundSucceeded?: (payload: WebhookPayload) => Promise<void>;
onRefundFailed?: (payload: WebhookPayload) => Promise<void>;
onDisputeOpened?: (payload: WebhookPayload) => Promise<void>;
onDisputeExpired?: (payload: WebhookPayload) => Promise<void>;
onDisputeAccepted?: (payload: WebhookPayload) => Promise<void>;
onDisputeCancelled?: (payload: WebhookPayload) => Promise<void>;
onDisputeChallenged?: (payload: WebhookPayload) => Promise<void>;
onDisputeWon?: (payload: WebhookPayload) => Promise<void>;
onDisputeLost?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionActive?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionOnHold?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionRenewed?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionPaused?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionPlanChanged?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionCancelled?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionFailed?: (payload: WebhookPayload) => Promise<void>;
onSubscriptionExpired?: (payload: WebhookPayload) => Promise<void>;
onLicenseKeyCreated?: (payload: WebhookPayload) => Promise<void>;
## Development
This library is built with:
- **TypeScript** - Type safety and better developer experience
- **tsup** - Fast TypeScript bundler
### Building
```bash
pnpm build
pnpm dev
You can set DODO_PAYMENTS_API_KEY
environment variable to use your API key
and omit the bearerToken
parameter.
DODO_PAYMENTS_API_KEY=your-api-key
ISC