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 Request object | NextRequest | Request |
context | Deprecated, use @vercel/functions instead | 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 runtime is set to edge |
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 runtime is set to edge |
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.invalidateBySrcImage(): Marks all cached content associated with a source image as stale, causing those cache entries to be revalidated in the background on the next request. This invalidates all cached transformations of the source image.dangerouslyDeleteBySrcImage(): Marks all cached content associated with a source image as deleted, causing those cache entries to be revalidated in the foreground on the next request. Use this method with caution because deleting the cache can cause many concurrent requests to the origin leading to cache stampede problem.getCache(): Obtain aRuntimeCacheobject 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?