Loading...
Loading...
Vercel Marketplace expert guidance — discovering, installing, and building integrations, auto-provisioned environment variables, unified billing, and the vercel integration CLI. Use when consuming third-party services, building custom integrations, or managing marketplace resources on Vercel.
npx skill4agent add vercel-labs/vercel-plugin marketplaceintegration add# Check whether this directory is linked to a Vercel project
test -f .vercel/project.json && echo "Linked" || echo "Not linked"
# Link if needed
vercel link# Search the Marketplace catalog from CLI
vercel integration discover
# Filter by category
vercel integration discover --category databases
vercel integration discover --category monitoring
# List integrations already installed on this project
vercel integration list# Get agent-friendly setup guide for a specific integration
vercel integration guide <name>
# Include framework-specific steps when available
vercel integration guide <name> --framework <fw>
# Examples
vercel integration guide neon
vercel integration guide datadog --framework nextjs--framework <fw># Install from CLI
vercel integration add <integration-name>
# Examples
vercel integration add neon # Postgres database
vercel integration add upstash # Redis / Kafka
vercel integration add clerk # Authentication
vercel integration add sentry # Error monitoring
vercel integration add sanity # CMS
vercel integration add datadog # Observability (auto-configures drain)vercel integration addvercel integration open <integration-name>vercel env lsvercel env pull .env.local --yes# View environment variables added by integrations
vercel env ls
# Example: after installing Neon, these are auto-provisioned:
# POSTGRES_URL — connection string
# POSTGRES_URL_NON_POOLING — direct connection
# POSTGRES_USER — database user
# POSTGRES_PASSWORD — database password
# POSTGRES_DATABASE — database name
# POSTGRES_HOST — database host.env// app/api/users/route.ts — using Neon auto-provisioned env vars
import { neon } from "@neondatabase/serverless";
// POSTGRES_URL is auto-injected by the Neon integration
const sql = neon(process.env.POSTGRES_URL!);
export async function GET() {
const users = await sql`SELECT * FROM users LIMIT 10`;
return Response.json(users);
}// app/api/cache/route.ts — using Upstash auto-provisioned env vars
import { Redis } from "@upstash/redis";
// KV_REST_API_URL and KV_REST_API_TOKEN are auto-injected
const redis = Redis.fromEnv();
export async function GET() {
const cached = await redis.get("featured-products");
return Response.json(cached);
}# List installed integrations
vercel integration ls
# Check usage and billing for an integration
vercel integration balance <name>
# Remove an integration
vercel integration remove <integration-name># Check current usage balance for an integration
vercel integration balance datadog
vercel integration balance neon# Create a new integration project
npx create-vercel-integration my-integration
# Or start from the template
npx create-next-app my-integration --example vercel-integration// vercel-integration.json
{
"name": "my-integration",
"slug": "my-integration",
"description": "Provides X for Vercel projects",
"logo": "public/logo.svg",
"website": "https://my-service.com",
"categories": ["databases"],
"scopes": {
"project": ["env-vars:read-write"],
"team": ["integrations:read-write"]
},
"installationType": "marketplace",
"resourceTypes": [
{
"name": "database",
"displayName": "Database",
"description": "A managed database instance"
}
]
}// app/api/webhook/route.ts
import { verifyVercelSignature } from "@vercel/integration-utils";
export async function POST(req: Request) {
const body = await req.json();
// Verify the webhook is from Vercel
const isValid = await verifyVercelSignature(req, body);
if (!isValid) {
return Response.json({ error: "Invalid signature" }, { status: 401 });
}
switch (body.type) {
case "integration.installed":
// Provision resources for the new installation
await provisionDatabase(body.payload);
break;
case "integration.uninstalled":
// Clean up resources
await deprovisionDatabase(body.payload);
break;
case "integration.configuration-updated":
// Handle config changes
await updateConfiguration(body.payload);
break;
}
return Response.json({ received: true });
}// lib/provision.ts
async function provisionEnvVars(
installationId: string,
projectId: string,
credentials: { url: string; token: string },
) {
const response = await fetch(
`https://api.vercel.com/v1/integrations/installations/${installationId}/env`,
{
method: "POST",
headers: {
Authorization: `Bearer ${process.env.VERCEL_INTEGRATION_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
projectId,
envVars: [
{
key: "MY_SERVICE_URL",
value: credentials.url,
target: ["production", "preview", "development"],
type: "encrypted",
},
{
key: "MY_SERVICE_TOKEN",
value: credentials.token,
target: ["production", "preview", "development"],
type: "secret",
},
],
}),
},
);
return response.json();
}vercel integration# Discover integrations in the Marketplace catalog
vercel integration discover
vercel integration discover --category <category>
# Get agent-friendly setup guide
vercel integration guide <name>
vercel integration guide <name> --framework <framework>
# Add (install) an integration
vercel integration add <name>
# List installed integrations
vercel integration list # alias: vercel integration ls
# Check usage / billing balance
vercel integration balance <name>
# Open integration dashboard in browser (fallback when add redirects)
vercel integration open <name>
# Remove an integration
vercel integration remove <name>Building integrations? Useto scaffold, then deploy your integration app to Vercel normally withnpx create-vercel-integration. Publish to the Marketplace via the Vercel Partner Dashboard.vercel --prod
| Category | Popular Integrations | Auto-Provisioned Env Vars |
|---|---|---|
| Databases | Neon, Supabase, PlanetScale, MongoDB, Turso | |
| Cache/KV | Upstash Redis | |
| Auth | Clerk, Auth0, Descope | |
| CMS | Sanity, Contentful, Storyblok, DatoCMS | |
| Monitoring | Datadog, Sentry, Checkly, New Relic | |
| Payments | Stripe | |
| Feature Flags | LaunchDarkly, Statsig, Hypertune | |
| AI Agents & Services | CodeRabbit, Braintrust, Sourcery, Chatbase | varies by integration |
| Video | Mux | |
| Messaging | Resend, Knock, Novu | |
| Searching | Algolia, Meilisearch | |
| Commerce | Shopify, Swell, BigCommerce | |
| Data Type | Delivery Mechanism | Integration Setup |
|---|---|---|
| Logs | Native drain (auto-configured by Marketplace install) | |
| Traces | Native drain (OpenTelemetry-compatible) | Same — auto-configured on install |
| Speed Insights | Custom drain endpoint only | Requires manual drain creation via REST API or Dashboard ( |
| Web Analytics | Custom drain endpoint only | Requires manual drain creation via REST API or Dashboard ( |
Key distinction: When you install an observability vendor via the Marketplace, it auto-configures drains for logs and traces only. Speed Insights and Web Analytics data require a separate, manually configured drain pointing to a custom endpoint. Seefor drain setup details.⤳ skill: observability
# Discover observability integrations
vercel integration discover --category monitoring
# Get setup guide for chosen vendor
vercel integration guide datadog# Install — auto-provisions env vars and creates log/trace drains
vercel integration add datadog# Confirm drain was auto-configured
curl -s -H "Authorization: Bearer $VERCEL_TOKEN" \
"https://api.vercel.com/v1/drains?teamId=$TEAM_ID" | jq '.[] | {id, url, type, sources}'⤳ skill: observability# Send a test payload to the drain
curl -X POST -H "Authorization: Bearer $VERCEL_TOKEN" \
"https://api.vercel.com/v1/drains/<drain-id>/test?teamId=$TEAM_ID"# Trigger a deployment and check logs flow through
vercel logs <deployment-url> --follow --since 5m
# Check integration balance to confirm data is flowing
vercel integration balance datadogFor drain payload formats and signature verification, see— the Drains section covers JSON/NDJSON schemas and⤳ skill: observabilityHMAC-SHA1 verification.x-vercel-signature
# Create a drain for Speed Insights + Web Analytics
curl -X POST -H "Authorization: Bearer $VERCEL_TOKEN" \
-H "Content-Type: application/json" \
"https://api.vercel.com/v1/drains?teamId=$TEAM_ID" \
-d '{
"url": "https://your-vendor-endpoint.example.com/vercel-analytics",
"type": "json",
"sources": ["lambda"],
"environments": ["production"]
}'Payload schema reference: Seefor Web Analytics drain payload formats (JSON array of⤳ skill: observabilityevents).{type, url, referrer, timestamp, geo, device}
| Need | Use | Why |
|---|---|---|
| Add a database to your project | | Auto-provisioned, unified billing |
| Browse available services | | CLI-native catalog search |
| Get setup steps for an integration | | Framework-specific, agent-friendly setup guide |
| CLI redirects to dashboard during install | | Fallback to complete provider web flow |
| Check integration usage/cost | | Billing visibility per integration |
| Build a SaaS integration | Integration SDK + manifest | Full lifecycle management |
| Centralize billing | Marketplace integrations | Single Vercel invoice |
| Auto-inject credentials | Marketplace auto-provisioning | No manual env var management |
| Add observability vendor | | Auto-creates log/trace drains |
| Export Speed Insights / Web Analytics | Manual drain via REST API | Not auto-configured by vendor install |
| Manage integrations programmatically | Vercel REST API | |
| Test integration locally | | Local development server with Vercel features |
⤳ skill: observability⤳ skill: vercel-api--follow--since--level⤳ skill: vercel-cli⤳ skill:bootstrap⤳ skill:cms