Functions API Reference
Functions are defined similar to a Route Handler in Next.js. When using Next.js App Router, you can define a function in a file under app/api/my-route/route.ts in your project. Vercel will deploy any file under app/api/ as a function.
Vercel Functions use a Web Handler, which consists of the request parameter that is an instance of the web standard Request API. Next.js extends the standard Request object with additional properties and methods.
| Parameter | Description | Next.js | Other Frameworks | 
|---|---|---|---|
| request | An instance of the Requestobject | NextRequest | Request | 
| context | @vercel/functionsinstead | N/A | { waitUntil } | 
export function GET(request: Request) {
  return new Response('Hello from Vercel!');
}Cancelling requests is useful for cleaning up resources or stopping long-running tasks when the client aborts the request — for example, when a user hits stop on an AI chat or they close a browser tab.
To cancel requests in Vercel Functions
- 
In your vercel.jsonfile, add"supportsCancellation": trueto the specific paths you want to opt-in to cancellation for your functions. For example, to enable everything, use**/*as the glob orapp/**/*for app router:vercel.json{ "regions": ["iad1"], "functions": { "api/*": { "supportsCancellation": true } } }When you have enabled cancellation, anything that must be completed in the event of request cancellation should be put in a waitUntilorafterpromise. If you don't, there is no guarantee that code will be executed after the request is cancelled.
- 
Use the AbortControllerAPI in your function to cancel the request. This will allow you to clean up resources or stop long-running tasks when the client aborts the request:api/abort-controller/route.tsexport async function GET(request: Request) { const abortController = new AbortController(); request.signal.addEventListener('abort', () => { console.log('request aborted'); abortController.abort(); }); const response = await fetch('https://my-backend-service.example.com', { headers: { Authorization: `Bearer ${process.env.AUTH_TOKEN}`, }, signal: abortController.signal, }); return new Response(response.body, { status: response.status, headers: response.headers, }); }
To configure your function when using the App Router in Next.js, you use segment options, rather than a config object.
export const runtime = 'nodejs';
export const maxDuration = 15;The table below shows a highlight of the valid config options. For detailed information on all the config options, see the Configuring Functions docs.
| Property | Type | Description | 
|---|---|---|
| runtime | string | This optional property defines the runtime to use, and if not set the runtime will default to nodejs. | 
| preferredRegion | string | This optional property and can be used to specify the regions in which your function should execute. This can only be set when the runtimeis set toedge | 
| maxDuration | int | This optional property can be used to specify the maximum duration in seconds that your function can run for. This can't be set when the runtimeis set toedge | 
A SIGTERM signal is sent to a function when it is about to be terminated, such as during scale-down events. This allows you to perform any necessary cleanup operations before the function instance is terminated.
Your code can run for up to 500 milliseconds after receiving a SIGTERM signal. After this period, the function instance will be terminated immediately.
process.on('SIGTERM', () => {
  // Perform cleanup operations here
});The @vercel/functions package provides a set of helper methods and utilities for working with Vercel Functions.
- waitUntil(): This method allows you to extend the lifetime of a request handler for the duration of a given Promise . It's useful for tasks that can be performed after the response is sent, such as logging or updating a cache.
- getEnv: This function retrieves System Environment Variables exposed by Vercel.
- geolocation(): Returns location information for the incoming request, including details like city, country, and coordinates.
- ipAddress(): Extracts the IP address of the request from the headers.
- invalidateByTag(): Marks a cache tag as stale, causing cache entries associated with that tag to be revalidated in the background on the next request.
- dangerouslyDeleteByTag(): Marks a cache tag as deleted, causing cache entries associated with that tag to be revalidated in the foreground on the next request.
- getCache(): Obtain a- RuntimeCacheobject to interact with the Vercel Data Cache.
See the @vercel/functions documentation for more information.
The @vercel/oidc package was previously provided by
@vercel/functions/oidc.
The @vercel/oidc package provides helper methods and utilities for working with OpenID Connect (OIDC) tokens.
- getVercelOidcToken(): Retrieves the OIDC token from the request context or environment variable.
See the @vercel/oidc documentation for more information.
The @vercel/oidc-aws-credentials-provider package was previously provided by
@vercel/functions/oidc.
The @vercel/oidc-aws-credentials-provider package provides helper methods and utilities for working with OpenID Connect (OIDC) tokens and AWS credentials.
- awsCredentialsProvider(): This function helps in obtaining AWS credentials using Vercel's OIDC token.
See the @vercel/oidc-aws-credentials-provider documentation for more information.
Was this helpful?