Integration guides
Block disposable email in your stack
Each guide has a drop-in code snippet plus stack-specific notes — where to put the API key, fail-open vs fail-closed, and how the error reaches your UI.
- Next.jsTypeScript
Drop a single Route Handler into your Next.js 15 / App Router project. Calls Piisend server-side so the API key never reaches the browser. Works with any auth library.
Read the guide → - DjangoPython
Add a form validator that calls Piisend before saving the user. Works in Django 3, 4, and 5. Pairs cleanly with django-allauth or Django's built-in auth.
Read the guide → - SupabaseTypeScript (Deno)
Use a Supabase Edge Function as an Auth Hook. Calls Piisend before Supabase creates the user — rejects signup at the auth layer.
Read the guide → - Better AuthTypeScript
Better Auth fires a databaseHooks.user.create.before hook for every signup path — email/password, Google OAuth, magic link. One check covers them all.
Read the guide → - ClerkTypeScript
Use a Clerk webhook on user.created or validate in your custom signup API before calling Clerk. Two patterns depending on when you want to block.
Read the guide → - Auth0JavaScript
Use an Auth0 Pre User Registration Action. Runs synchronously before Auth0 creates the user — return api.access.deny() to reject at the auth layer.
Read the guide → - Firebase AuthTypeScript
Use a Firebase Cloud Function with the beforeUserCreated blocking trigger. Throw HttpsError to reject before Firebase persists the user.
Read the guide → - AWS CognitoPython
Attach a Lambda to the PreSignUp trigger of your Cognito User Pool. The Lambda runs synchronously and can throw to reject before the user record is written.
Read the guide →
Page 1 of 2 · Showing 1–8 of 12
Don't see your stack?
Point your AI assistant at our integrate.md — written for LLMs with the rules and prompts to wire Piisend into any codebase.
Read https://piisend.com/integrate.md and follow the
instructions on that page.