Vercel
Develop. Preview. Ship.
@vercel/sdk
The @vercel/sdk
is a type-safe Typescript SDK that gives you full control over the entire Vercel platform through the Vercel REST API.
Table of Contents
SDK Installation
The SDK can be installed with either npm, pnpm, bun or yarn package managers.
NPM
npm add @vercel/sdk
PNPM
pnpm add @vercel/sdk
Bun
bun add @vercel/sdk
Yarn
yarn add @vercel/sdk zod
# Note that Yarn does not install peer dependencies automatically. You will need
# to install zod as shown above.
[!NOTE] This package is published as an ES Module (ESM) only. For applications using CommonJS, use
await import("@vercel/sdk")
to import and use this package.
Model Context Protocol (MCP) Server
This SDK is also an installable MCP server where the various SDK methods are exposed as tools that can be invoked by AI applications.
Node.js v20 or greater is required to run the MCP server from npm.
claude_desktop_config.json
file:
json
{
"mcpServers": {
"Vercel": {
"command": "npx",
"args": [
"-y", "--package", "@vercel/sdk",
"--",
"mcp", "start",
"--bearer-token", "..."
]
}
}
}
.cursor/mcp.json
file in your project root with the following content:
json
{
"mcpServers": {
"Vercel": {
"command": "npx",
"args": [
"-y", "--package", "@vercel/sdk",
"--",
"mcp", "start",
"--bearer-token", "..."
]
}
}
}
You can also run MCP servers as a standalone binary with no additional dependencies. You must pull these binaries from available Github releases:
curl -L -o mcp-server \
https://github.com/{org}/{repo}/releases/download/{tag}/mcp-server-bun-darwin-arm64 && \
chmod +x mcp-server
If the repo is a private repo you must add your Github PAT to download a release -H "Authorization: Bearer {GITHUB_PAT}"
.
{
"mcpServers": {
"Todos": {
"command": "./DOWNLOAD/PATH/mcp-server",
"args": [
"start"
]
}
}
}
For a full list of server arguments, run:
npx -y --package @vercel/sdk -- mcp start --help
Requirements
For supported JavaScript runtimes, please consult RUNTIMES.md.
Access Tokens
You need to pass a valid access token to be able to use any resource or operation. Refer to Creating an Access Token to learn how to create one. Make sure that you create a token with the correct Vercel scope. If you face permission (403) errors when you are already sending a token, it can be one of the following problems:
- The token you are using has expired. Check the expiry date of the token in the Vercel dashboard.
- The token does not have access to the correct scope, either not the right team or it does not have account level access.
- The resource or operation you are trying to use is not available for that team. For example, AccessGroups is an Enterprise only feature and you are using a token for a team on the pro plan.
Authentication
Per-Client Security Schemes
This SDK supports the following security scheme globally:
Name | Type | Scheme |
---|---|---|
bearerToken |
http | HTTP Bearer |
To authenticate with the API the bearerToken
parameter must be set when initializing the SDK client instance. For example:
import { Vercel } from "@vercel/sdk";
const vercel = new Vercel({
bearerToken: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await vercel.accessGroups.readAccessGroup({
idOrName: "ag_1a2b3c4d5e6f7g8h9i0j",
teamId: "team_1a2b3c4d5e6f7g8h9i0j1k2l",
slug: "my-team-url-slug",
});
console.log(result);
}
run();
SDK Example Usage
List deployments
List deployments under the authenticated user or team.
import { Vercel } from "@vercel/sdk";
const vercel = new Vercel({
bearerToken: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await vercel.deployments.getDeployments({
app: "docs",
from: 1612948664566,
limit: 10,
projectId: "QmXGTs7mvAMMC7WW5ebrM33qKG32QK3h4vmQMjmY",
target: "production",
to: 1612948664566,
users: "kr1PsOIzqEL5Xg6M4VZcZosf,K4amb7K9dAt5R2vBJWF32bmY",
since: 1540095775941,
until: 1540095775951,
state: "BUILDING,READY",
teamId: "team_1a2b3c4d5e6f7g8h9i0j1k2l",
slug: "my-team-url-slug",
});
console.log(result);
}
run();
Update an existing project
Update the fields of a project using either its name or id.
import { Vercel } from "@vercel/sdk";
const vercel = new Vercel({
bearerToken: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await vercel.projects.updateProject({
idOrName: "prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB",
teamId: "team_1a2b3c4d5e6f7g8h9i0j1k2l",
slug: "my-team-url-slug",
requestBody: {
name: "a-project-name",
},
});
console.log(result);
}
run();
Available Resources and Operations
id
### logs
getRuntimeLogs - Get logs for a deployment
### marketplace
getAccountInfo - Get Account Information
getMember - Get Member Information
createEvent - Create Event
submitBillingData - Submit Billing Data
submitInvoice - Submit Invoice
getInvoice - Get Invoice
updateInvoice - Invoice Actions
submitPrepaymentBalances - Submit Prepayment Balances
updateResourceSecrets - Update Resource Secrets (Deprecated)
updateResourceSecretsById - Update Resource Secrets
importResource - Import Resource
exchangeSsoToken - SSO Token Exchange
createInstallationIntegrationConfiguration - Create one or multiple experimentation items
updateInstallationIntegrationConfiguration - Patch an existing experimentation item
deleteInstallationIntegrationConfiguration - Delete an existing experimentation item
createInstallationIntegrationEdgeConfig - Get the data of a user-provided Edge Config
updateInstallationIntegrationEdgeConfig - Push data into a user-provided Edge Config
### projectMembers
getProjectMembers - List project members
addProjectMember - Adds a new member to a project.
removeProjectMember - Remove a Project Member
### projects
updateProjectDataCache - Update the data cache feature
getProjects - Retrieve a list of projects
createProject - Create a new project
updateProject - Update an existing project
deleteProject - Delete a Project
getProjectDomains - Retrieve project domains by project by id or name
getProjectDomain - Get a project domain
updateProjectDomain - Update a project domain
removeProjectDomain - Remove a domain from a project
addProjectDomain - Add a domain to a project
moveProjectDomain - Move a project domain
verifyProjectDomain - Verify project domain
filterProjectEnvs - Retrieve the environment variables of a project by id or name
createProjectEnv - Create one or more environment variables
getProjectEnv - Retrieve the decrypted value of an environment variable of a project by id
removeProjectEnv - Remove an environment variable
editProjectEnv - Edit an environment variable
createProjectTransferRequest - Create project transfer request
acceptProjectTransferRequest - Accept project transfer request
updateProjectProtectionBypass - Update Protection Bypass for Automation
requestPromote - Points all production domains for a project to the given deploy
listPromoteAliases - Gets a list of aliases with status for the current promote
pauseProject - Pause a project
unpauseProject - Unpause a project
### rollingRelease
getRollingReleaseBillingStatus - Get rolling release billing status
getRollingReleaseConfig - Get rolling release configuration
deleteRollingReleaseConfig - Delete rolling release configuration
updateRollingReleaseConfig - Update the rolling release settings for the project
getRollingRelease - Get the active rolling release information for a project
approveRollingReleaseStage - Update the active rolling release to the next stage for a project
completeRollingRelease - Complete the rolling release for the project
### security
updateAttackChallengeMode - Update Attack Challenge mode
putFirewallConfig - Put Firewall Configuration
updateFirewallConfig - Update Firewall Configuration
getFirewallConfig - Read Firewall Configuration
getActiveAttackStatus - Read active attack data
getBypassIp - Read System Bypass
addBypassIp - Create System Bypass Rule
removeBypassIp - Remove System Bypass Rule
### teams
getTeamMembers - List team members
inviteUserToTeam - Invite a user
requestAccessToTeam - Request access to a team
getTeamAccessRequest - Get access request status
joinTeam - Join a team
updateTeamMember - Update a Team Member
removeTeamMember - Remove a Team Member
getTeam - Get a Team
patchTeam - Update a Team
getTeams - List all teams
createTeam - Create a Team
deleteTeam - Delete a Team
deleteTeamInviteCode - Delete a Team invite code
### user
listUserEvents - List User Events
getAuthUser - Get the User
requestDelete - Delete User Account
### webhooks
createWebhook - Creates a webhook
getWebhooks - Get a list of webhooks
getWebhook - Get a webhook
deleteWebhook - Deletes a webhook
accessGroupsCreateAccessGroup
- Creates an access group
- accessGroupsCreateAccessGroupProject
- Create an access group project
- accessGroupsDeleteAccessGroup
- Deletes an access group
- accessGroupsDeleteAccessGroupProject
- Delete an access group project
- accessGroupsListAccessGroupMembers
- List members of an access group
- accessGroupsListAccessGroupProjects
- List projects of an access group
- accessGroupsListAccessGroups
- List access groups for a team, project or member
- accessGroupsReadAccessGroup
- Reads an access group
- accessGroupsReadAccessGroupProject
- Reads an access group project
- accessGroupsUpdateAccessGroup
- Update an access group
- accessGroupsUpdateAccessGroupProject
- Update an access group project
- aliasesAssignAlias
- Assign an Alias
- aliasesDeleteAlias
- Delete an Alias
- aliasesGetAlias
- Get an Alias
- aliasesListAliases
- List aliases
- aliasesListDeploymentAliases
- List Deployment Aliases
- aliasesPatchUrlProtectionBypass
- Update the protection bypass for a URL
- artifactsArtifactExists
- Check if a cache artifact exists
- artifactsArtifactQuery
- Query information about an artifact
- artifactsDownloadArtifact
- Download a cache artifact
- artifactsRecordEvents
- Record an artifacts cache usage event
- artifactsStatus
- Get status of Remote Caching for this principal
- artifactsUploadArtifact
- Upload a cache artifact
- authenticationCreateAuthToken
- Create an Auth Token
- authenticationDeleteAuthToken
- Delete an authentication token
- authenticationGetAuthToken
- Get Auth Token Metadata
- authenticationListAuthTokens
- List Auth Tokens
- certsGetCertById
- Get cert by id
- certsIssueCert
- Issue a new cert
- certsRemoveCert
- Remove cert
- certsUploadCert
- Upload a cert
- checksCreateCheck
- Creates a new Check
- checksGetAllChecks
- Retrieve a list of all checks
- checksGetCheck
- Get a single check
- checksRerequestCheck
- Rerequest a check
- checksUpdateCheck
- Update a check
- deploymentsCancelDeployment
- Cancel a deployment
- deploymentsCreateDeployment
- Create a new deployment
- deploymentsDeleteDeployment
- Delete a Deployment
- deploymentsGetDeployment
- Get a deployment by ID or URL
- deploymentsGetDeploymentEvents
- Get deployment events
- deploymentsGetDeploymentFileContents
- Get Deployment File Contents
- deploymentsGetDeployments
- List deployments
- deploymentsListDeploymentFiles
- List Deployment Files
- deploymentsUpdateIntegrationDeploymentAction
- Update deployment integration action
- deploymentsUpdateIntegrationDeploymentAction
- Update deployment integration action
- deploymentsUploadFile
- Upload Deployment Files
- dnsCreateRecord
- Create a DNS record
- dnsGetRecords
- List existing DNS records
- dnsRemoveRecord
- Delete a DNS record
- dnsUpdateRecord
- Update an existing DNS record
- domainsBuyDomain
- Purchase a domain
- domainsCheckDomainPrice
- Check the price for a domain
- domainsCheckDomainStatus
- Check a Domain Availability
- domainsCreateOrTransferDomain
- Register or transfer-in a new Domain
- domainsDeleteDomain
- Remove a domain by name
- domainsGetDomain
- Get Information for a Single Domain
- domainsGetDomainConfig
- Get a Domain's configuration
- domainsGetDomains
- List all the domains
- domainsGetDomainTransfer
- Get domain transfer info.
- domainsPatchDomain
- Update or move apex domain
- edgeConfigCreateEdgeConfig
- Create an Edge Config
- edgeConfigCreateEdgeConfigToken
- Create an Edge Config token
- edgeConfigDeleteEdgeConfig
- Delete an Edge Config
- edgeConfigDeleteEdgeConfigSchema
- Delete an Edge Config's schema
- edgeConfigDeleteEdgeConfigTokens
- Delete one or more Edge Config tokens
- edgeConfigGetEdgeConfig
- Get an Edge Config
- edgeConfigGetEdgeConfigBackup
- Get Edge Config backup
- edgeConfigGetEdgeConfigBackups
- Get Edge Config backups
- edgeConfigGetEdgeConfigItem
- Get an Edge Config item
- edgeConfigGetEdgeConfigItems
- Get Edge Config items
- edgeConfigGetEdgeConfigs
- Get Edge Configs
- edgeConfigGetEdgeConfigSchema
- Get Edge Config schema
- edgeConfigGetEdgeConfigToken
- Get Edge Config token meta data
- edgeConfigGetEdgeConfigTokens
- Get all tokens of an Edge Config
- edgeConfigPatchEdgeConfigItems
- Update Edge Config items in batch
- edgeConfigPatchEdgeConfigSchema
- Update Edge Config schema
- edgeConfigUpdateEdgeConfig
- Update an Edge Config
- environmentCreateCustomEnvironment
- Create a custom environment for the current project.
- environmentGetCustomEnvironment
- Retrieve a custom environment
- environmentGetV9ProjectsIdOrNameCustomEnvironments
- Retrieve custom environments
- environmentRemoveCustomEnvironment
- Remove a custom environment
- environmentUpdateCustomEnvironment
- Update a custom environment
- integrationsDeleteConfiguration
- Delete an integration configuration
- integrationsGetConfiguration
- Retrieve an integration configuration
- integrationsGetConfigurations
- Get configurations for the authenticated user or team
- logDrainsCreateLogDrain
- Creates a new Integration Log Drain
- logDrainsDeleteConfigurableLogDrain
- Deletes a Configurable Log Drain
- logDrainsDeleteIntegrationLogDrain
- Deletes the Integration log drain with the provided id
- logDrainsGetIntegrationLogDrains
- Retrieves a list of Integration log drains
- logsGetRuntimeLogs
- Get logs for a deployment
- marketplaceCreateEvent
- Create Event
- marketplaceCreateInstallationIntegrationConfiguration
- Create one or multiple experimentation items
- marketplaceCreateInstallationIntegrationEdgeConfig
- Get the data of a user-provided Edge Config
- marketplaceDeleteInstallationIntegrationConfiguration
- Delete an existing experimentation item
- marketplaceExchangeSsoToken
- SSO Token Exchange
- marketplaceExchangeSsoToken
- SSO Token Exchange
- marketplaceGetAccountInfo
- Get Account Information
- marketplaceGetInvoice
- Get Invoice
- marketplaceGetMember
- Get Member Information
- marketplaceImportResource
- Import Resource
- marketplaceSubmitBillingData
- Submit Billing Data
- marketplaceSubmitInvoice
- Submit Invoice
- marketplaceSubmitPrepaymentBalances
- Submit Prepayment Balances
- marketplaceUpdateInstallationIntegrationConfiguration
- Patch an existing experimentation item
- marketplaceUpdateInstallationIntegrationEdgeConfig
- Push data into a user-provided Edge Config
- marketplaceUpdateInvoice
- Invoice Actions
- marketplaceUpdateResourceSecrets
- Update Resource Secrets (Deprecated)
- marketplaceUpdateResourceSecretsById
- Update Resource Secrets
- projectMembersAddProjectMember
- Adds a new member to a project.
- projectMembersGetProjectMembers
- List project members
- projectMembersRemoveProjectMember
- Remove a Project Member
- projectsAcceptProjectTransferRequest
- Accept project transfer request
- projectsAddProjectDomain
- Add a domain to a project
- projectsCreateProject
- Create a new project
- projectsCreateProjectEnv
- Create one or more environment variables
- projectsCreateProjectTransferRequest
- Create project transfer request
- projectsDeleteProject
- Delete a Project
- projectsEditProjectEnv
- Edit an environment variable
- projectsFilterProjectEnvs
- Retrieve the environment variables of a project by id or name
- projectsGetProjectDomain
- Get a project domain
- projectsGetProjectDomains
- Retrieve project domains by project by id or name
- projectsGetProjectEnv
- Retrieve the decrypted value of an environment variable of a project by id
- projectsGetProjects
- Retrieve a list of projects
- projectsListPromoteAliases
- Gets a list of aliases with status for the current promote
- projectsMoveProjectDomain
- Move a project domain
- projectsPauseProject
- Pause a project
- projectsRemoveProjectDomain
- Remove a domain from a project
- projectsRemoveProjectEnv
- Remove an environment variable
- projectsRequestPromote
- Points all production domains for a project to the given deploy
- projectsUnpauseProject
- Unpause a project
- projectsUpdateProject
- Update an existing project
- projectsUpdateProjectDataCache
- Update the data cache feature
- projectsUpdateProjectDomain
- Update a project domain
- projectsUpdateProjectProtectionBypass
- Update Protection Bypass for Automation
- projectsVerifyProjectDomain
- Verify project domain
- rollingReleaseApproveRollingReleaseStage
- Update the active rolling release to the next stage for a project
- rollingReleaseCompleteRollingRelease
- Complete the rolling release for the project
- rollingReleaseDeleteRollingReleaseConfig
- Delete rolling release configuration
- rollingReleaseGetRollingRelease
- Get the active rolling release information for a project
- rollingReleaseGetRollingReleaseBillingStatus
- Get rolling release billing status
- rollingReleaseGetRollingReleaseConfig
- Get rolling release configuration
- rollingReleaseUpdateRollingReleaseConfig
- Update the rolling release settings for the project
- securityAddBypassIp
- Create System Bypass Rule
- securityGetActiveAttackStatus
- Read active attack data
- securityGetBypassIp
- Read System Bypass
- securityGetFirewallConfig
- Read Firewall Configuration
- securityPutFirewallConfig
- Put Firewall Configuration
- securityRemoveBypassIp
- Remove System Bypass Rule
- securityUpdateAttackChallengeMode
- Update Attack Challenge mode
- securityUpdateFirewallConfig
- Update Firewall Configuration
- teamsCreateTeam
- Create a Team
- teamsDeleteTeam
- Delete a Team
- teamsDeleteTeamInviteCode
- Delete a Team invite code
- teamsGetTeam
- Get a Team
- teamsGetTeamAccessRequest
- Get access request status
- teamsGetTeamMembers
- List team members
- teamsGetTeams
- List all teams
- teamsInviteUserToTeam
- Invite a user
- teamsJoinTeam
- Join a team
- teamsPatchTeam
- Update a Team
- teamsRemoveTeamMember
- Remove a Team Member
- teamsRequestAccessToTeam
- Request access to a team
- teamsUpdateTeamMember
- Update a Team Member
- userGetAuthUser
- Get the User
- userListUserEvents
- List User Events
- userRequestDelete
- Delete User Account
- webhooksCreateWebhook
- Creates a webhook
- webhooksDeleteWebhook
- Deletes a webhook
- webhooksGetWebhook
- Get a webhook
- webhooksGetWebhooks
- Get a list of webhooks
openAsBlob
function in node:fs
.
> - Bun: The native Bun.file
function produces a file handle that can be used for streaming file uploads.
> - Browsers: All supported browsers return an instance to a File
when reading the value from an <input type="file">
element.
> - Node.js v18: A file stream can be created using the fileFrom
helper from fetch-blob/from.js
.
typescript
import { Vercel } from "@vercel/sdk";
import { openAsBlob } from "node:fs";
const vercel = new Vercel({
bearerToken: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await vercel.artifacts.uploadArtifact({
contentLength: 3848.22,
xArtifactDuration: 400,
xArtifactClientCi: "VERCEL",
xArtifactClientInteractive: 0,
xArtifactTag: "Tc0BmHvJYMIYJ62/zx87YqO0Flxk+5Ovip25NY825CQ=",
hash: "12HKQaOmR5t5Uy6vdcQsNIiZgHGB",
teamId: "team_1a2b3c4d5e6f7g8h9i0j1k2l",
slug: "my-team-url-slug",
requestBody: await openAsBlob("example.file"),
});
console.log(result);
}
run();
## Retries
Some of the endpoints in this SDK support retries. If you use the SDK without any configuration, it will fall back to the default retry strategy provided by the API. However, the default retry strategy can be overridden on a per-operation basis, or across the entire SDK.
To change the default retry strategy for a single API call, simply provide a retryConfig object to the call:
typescript
import { Vercel } from "@vercel/sdk";
const vercel = new Vercel({
bearerToken: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await vercel.accessGroups.readAccessGroup({
idOrName: "ag_1a2b3c4d5e6f7g8h9i0j",
teamId: "team_1a2b3c4d5e6f7g8h9i0j1k2l",
slug: "my-team-url-slug",
}, {
retries: {
strategy: "backoff",
backoff: {
initialInterval: 1,
maxInterval: 50,
exponent: 1.1,
maxElapsedTime: 100,
},
retryConnectionErrors: false,
},
});
console.log(result);
}
run();
If you'd like to override the default retry strategy for all operations that support retries, you can provide a retryConfig at SDK initialization:
typescript
import { Vercel } from "@vercel/sdk";
const vercel = new Vercel({
retryConfig: {
strategy: "backoff",
backoff: {
initialInterval: 1,
maxInterval: 50,
exponent: 1.1,
maxElapsedTime: 100,
},
retryConnectionErrors: false,
},
bearerToken: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await vercel.accessGroups.readAccessGroup({
idOrName: "ag_1a2b3c4d5e6f7g8h9i0j",
teamId: "team_1a2b3c4d5e6f7g8h9i0j1k2l",
slug: "my-team-url-slug",
});
console.log(result);
}
run();
## Error Handling
VercelError
is the base class for all HTTP error responses. It has the following properties:
| Property | Type | Description |
| ------------------- | ---------- | --------------------------------------------------------------------------------------- |
| error.message
| string
| Error message |
| error.statusCode
| number
| HTTP response status code eg 404
|
| error.headers
| Headers
| HTTP response headers |
| error.body
| string
| HTTP body. Can be empty string if no body is returned. |
| error.rawResponse
| Response
| Raw HTTP response |
| error.data$
| | Optional. Some errors may contain structured data. See Error Classes. |
### Example
typescript
import { Vercel } from "@vercel/sdk";
import { VercelBadRequestError } from "@vercel/sdk/models/vercelbadrequesterror.js";
import { VercelError } from "@vercel/sdk/models/vercelerror.js.js";
const vercel = new Vercel({
bearerToken: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
try {
const result = await vercel.accessGroups.readAccessGroup({
idOrName: "ag_1a2b3c4d5e6f7g8h9i0j",
teamId: "team_1a2b3c4d5e6f7g8h9i0j1k2l",
slug: "my-team-url-slug",
});
console.log(result);
} catch (error) {
// The base class for HTTP error responses
if (error instanceof VercelError) {
console.log(error.message);
console.log(error.statusCode);
console.log(error.body);
console.log(error.headers);
// Depending on the method different errors may be thrown
if (error instanceof VercelBadRequestError) {
console.log(error.data$.error); // models.ErrorT
}
}
}
}
run();
### Error Classes
Primary errors:
VercelError
: The base class for HTTP error responses.
VercelBadRequestError
: Status code 400
.
VercelForbiddenError
: Status code 401
.
Network errors:
ConnectionError
: HTTP client was unable to make a request to a server.
RequestTimeoutError
: HTTP request timed out due to an AbortSignal signal.
RequestAbortedError
: HTTP request was aborted by the client.
InvalidRequestError
: Any input used to create a request is invalid.
UnexpectedClientError
: Unrecognised or unexpected error.
Inherit from VercelError
:
VercelNotFoundError
: Status code 404
. Applicable to 100 of 171 methods.
VercelRateLimitError
: . Status code 429
. Applicable to 1 of 171 methods.
ResponseValidationError
: Type mismatch between the data returned from the server and the structure expected by the SDK. See error.rawValue
for the raw value and error.pretty()
for a nicely formatted multi-line string.
* Check the method documentation to see if the error is applicable.
Server Selection
Override Server URL Per-Client
The default server can be overridden globally by passing a URL to the serverURL: string
optional parameter when initializing the SDK client instance. For example:
import { Vercel } from "@vercel/sdk";
const vercel = new Vercel({
serverURL: "https://api.vercel.com",
bearerToken: "<YOUR_BEARER_TOKEN_HERE>",
});
async function run() {
const result = await vercel.accessGroups.readAccessGroup({
idOrName: "ag_1a2b3c4d5e6f7g8h9i0j",
teamId: "team_1a2b3c4d5e6f7g8h9i0j1k2l",
slug: "my-team-url-slug",
});
console.log(result);
}
run();
Custom HTTP Client
The TypeScript SDK makes API calls using an HTTPClient
that wraps the native
Fetch API. This
client is a thin wrapper around fetch
and provides the ability to attach hooks
around the request lifecycle that can be used to modify the request or handle
errors and response.
The HTTPClient
constructor takes an optional fetcher
argument that can be
used to integrate a third-party HTTP client or when writing tests to mock out
the HTTP client and feed in fixtures.
The following example shows how to use the "beforeRequest"
hook to to add a
custom header and a timeout to requests and how to use the "requestError"
hook
to log errors:
import { Vercel } from "@vercel/sdk";
import { HTTPClient } from "@vercel/sdk/lib/http";
const httpClient = new HTTPClient({
// fetcher takes a function that has the same signature as native `fetch`.
fetcher: (request) => {
return fetch(request);
}
});
httpClient.addHook("beforeRequest", (request) => {
const nextRequest = new Request(request, {
signal: request.signal || AbortSignal.timeout(5000)
});
nextRequest.headers.set("x-custom-header", "custom value");
return nextRequest;
});
httpClient.addHook("requestError", (error, request) => {
console.group("Request Error");
console.log("Reason:", `${error}`);
console.log("Endpoint:", `${request.method} ${request.url}`);
console.groupEnd();
});
const sdk = new Vercel({ httpClient });
Debugging
You can setup your SDK to emit debug logs for SDK requests and responses.
You can pass a logger that matches console
's interface as an SDK option.
[!WARNING] Beware that debug logging will reveal secrets, like API tokens in headers, in log messages printed to a console or files. It's recommended to use this feature only during local development and not in production.
import { Vercel } from "@vercel/sdk";
const sdk = new Vercel({ debugLogger: console });
Development
Maturity
This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally looking for the latest version.
Contributions
While we value open-source contributions to this SDK, this library is generated programmatically. Any manual changes added to internal files will be overwritten on the next generation. We look forward to hearing your feedback. Feel free to open a PR or an issue with a proof of concept and we'll do our best to include it in a future release.