<div align="center"> <h1 align="center">@unkey/nextjs</h1> <h5>`@unkey/nextjs` the official SDK for Next.js. Just use it in your route handlers a direct and type-safe method to verify API keys.</h5> </div>
@unkey/nextjs the official SDK for Next.js. Just use it in your route handlers a direct and type-safe method to verify API keys.``bash`
npm install @unkey/nextjs
Protecting API routes is as simple as wrapping them with the withUnkey handler:
`ts
import { NextRequestWithUnkeyContext, withUnkey } from "@unkey/nextjs";
export const POST = withUnkey(
async (req) => {
// Process the request here
// You have access to the verification response using req.unkey
console.log(req.unkey);
return new Response("Your API key is valid!");
},
{
rootKey: process.env.UNKEY_ROOT_KEY!, // Required: Your Unkey root key
},
);
`
Note: You need to provide your Unkey root key for key verification. Get your root key from the Unkey dashboard.
You can customize how withUnkey processes incoming requests by passing configuration options:
- rootKey: Your Unkey root key (required for API authentication)
- tags: Array of tags to filter keys during verificationpermissions
- : Required permissions for the key to be validgetKey
- : Custom function to extract the key from the requesthandleInvalidKey
- : Custom handler for invalid keysonError
- : Custom error handler
By default, withUnkey will look for a bearer token located in the authorization header. If you want to customize this, you can do so by passing a getter in the configuration object:
`ts`
export const GET = withUnkey(
async (req) => {
// ...
},
{
rootKey: process.env.UNKEY_ROOT_KEY!,
getKey: (req) => new URL(req.url).searchParams.get("key"),
},
);
and permissionsYou can require specific tags or permissions for key verification:
`ts`
export const GET = withUnkey(
async (req) => {
// ...
},
{
rootKey: process.env.UNKEY_ROOT_KEY!,
tags: ["api", "production"],
permissions: "read:data",
},
);
You can specify custom error handling. By default errors will be logged to the console, and withUnkey will return a NextResponse with status 500.
`tsError ${err.statusCode}: ${err.message}
export const GET = withUnkey(
async (req) => {
// ...
},
{
rootKey: process.env.UNKEY_ROOT_KEY!,
onError: async (req, err) => {
await analytics.trackEvent();`
return new NextResponse("Unkey error", { status: 500 });
},
},
);
Specify what to do if Unkey reports that your key is invalid.
`ts``
export const GET = withUnkey(
async (req) => {
// ...
},
{
rootKey: process.env.UNKEY_ROOT_KEY!,
handleInvalidKey: (req, res) => {
return new Response("Unauthorized", { status: 401 });
},
},
);