[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-marketplace":3,"mdc-5zdfl0-key":36,"related-repo-openai-marketplace":6208,"related-org-openai-marketplace":6328},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"marketplace","build and manage Vercel Marketplace integrations","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.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Vercel","vercel","tag",{"name":17,"slug":18,"type":15},"Integrations","integrations",{"name":20,"slug":21,"type":15},"CLI","cli",{"name":23,"slug":24,"type":15},"Deployment","deployment",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-04-06T18:41:00.879444",null,465,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fvercel\u002Fskills\u002Fmarketplace","---\nname: marketplace\ndescription: 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.\nmetadata:\n  priority: 3\n  docs:\n    - \"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations\"\n  sitemap: \"https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml\"\n  pathPatterns:\n    - \"integration.json\"\n  bashPatterns:\n    - '\\bvercel\\s+integration\\b'\n    - '\\bvercel\\s+integration\\s+add\\b'\n    - '\\bvercel\\s+integration\\s+discover\\b'\n---\n\n# Vercel Marketplace\n\nYou are an expert in the Vercel Marketplace — the integration platform that connects third-party services to Vercel projects with unified billing, auto-provisioned environment variables, and one-click setup.\n\n## Consuming Integrations\n\n### Linked Project Preflight\n\nIntegration provisioning is project-scoped. Verify the repository is linked before running `integration add`.\n\n```bash\n# Check whether this directory is linked to a Vercel project\ntest -f .vercel\u002Fproject.json && echo \"Linked\" || echo \"Not linked\"\n\n# Link if needed\nvercel link\n```\n\nIf the project is not linked, do not continue with provisioning commands until linking completes.\n\n### Discovering Integrations\n\n```bash\n# Search the Marketplace catalog from CLI\nvercel integration discover\n\n# Filter by category\nvercel integration discover --category databases\nvercel integration discover --category monitoring\n\n# List integrations already installed on this project\nvercel integration list\n```\n\nFor browsing the full catalog interactively, use the [Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace) dashboard.\n\n### Getting Setup Guidance\n\n```bash\n# Get agent-friendly setup guide for a specific integration\nvercel integration guide \u003Cname>\n\n# Include framework-specific steps when available\nvercel integration guide \u003Cname> --framework \u003Cfw>\n\n# Examples\nvercel integration guide neon\nvercel integration guide datadog --framework nextjs\n```\n\nUse `--framework \u003Cfw>` as the default discovery flow when framework-specific setup matters. The guide returns structured setup steps including required environment variables, SDK packages, and code snippets — ideal for agentic workflows.\n\n### Installing an Integration\n\n```bash\n# Install from CLI\nvercel integration add \u003Cintegration-name>\n\n# Examples\nvercel integration add neon          # Postgres database\nvercel integration add upstash       # Redis \u002F Kafka\nvercel integration add clerk         # Authentication\nvercel integration add sentry        # Error monitoring\nvercel integration add sanity        # CMS\nvercel integration add datadog       # Observability (auto-configures drain)\n```\n\n`vercel integration add` is the primary scripted\u002FAI path. It installs to the currently linked project, auto-connects the integration, and auto-runs environment sync locally unless disabled.\n\nIf the CLI hands off to the dashboard for provider-specific completion, treat that as fallback:\n\n```bash\nvercel integration open \u003Cintegration-name>\n```\n\nComplete the web step, then return to CLI verification (`vercel env ls` and local env sync check).\n\n### Auto-Provisioned Environment Variables\n\nWhen you install a Marketplace integration from a linked project, Vercel automatically provisions the required environment variables for that project.\n\n**IMPORTANT: Provisioning delay after install.** After installing a database integration (especially Neon), the resource may take **1–3 minutes** to fully provision. During this window, connection attempts return HTTP 500 errors. Do NOT debug the connection string or code — just wait and retry. If local env sync was disabled or skipped, run `vercel env pull .env.local --yes` after a brief wait to get the finalized credentials.\n\n```bash\n# View environment variables added by integrations\nvercel env ls\n\n# Example: after installing Neon, these are auto-provisioned:\n# POSTGRES_URL          — connection string\n# POSTGRES_URL_NON_POOLING — direct connection\n# POSTGRES_USER         — database user\n# POSTGRES_PASSWORD     — database password\n# POSTGRES_DATABASE     — database name\n# POSTGRES_HOST         — database host\n```\n\nNo manual `.env` file management is needed — the variables are injected into all environments (Development, Preview, Production) automatically.\n\n### Using Provisioned Resources\n\n```ts\n\u002F\u002F app\u002Fapi\u002Fusers\u002Froute.ts — using Neon auto-provisioned env vars\nimport { neon } from \"@neondatabase\u002Fserverless\";\n\n\u002F\u002F POSTGRES_URL is auto-injected by the Neon integration\nconst sql = neon(process.env.POSTGRES_URL!);\n\nexport async function GET() {\n  const users = await sql`SELECT * FROM users LIMIT 10`;\n  return Response.json(users);\n}\n```\n\n```ts\n\u002F\u002F app\u002Fapi\u002Fcache\u002Froute.ts — using Upstash auto-provisioned env vars\nimport { Redis } from \"@upstash\u002Fredis\";\n\n\u002F\u002F KV_REST_API_URL and KV_REST_API_TOKEN are auto-injected\nconst redis = Redis.fromEnv();\n\nexport async function GET() {\n  const cached = await redis.get(\"featured-products\");\n  return Response.json(cached);\n}\n```\n\n### Managing Integrations\n\n```bash\n# List installed integrations\nvercel integration ls\n\n# Check usage and billing for an integration\nvercel integration balance \u003Cname>\n\n# Remove an integration\nvercel integration remove \u003Cintegration-name>\n```\n\n## Unified Billing\n\nMarketplace integrations use Vercel's unified billing system:\n\n- **Single invoice**: All integration charges appear on your Vercel bill\n- **Usage-based**: Pay for what you use, scaled per integration's pricing model\n- **Team-level billing**: Charges roll up to the Vercel team account\n- **No separate accounts**: No need to manage billing with each provider individually\n\n```bash\n# Check current usage balance for an integration\nvercel integration balance datadog\nvercel integration balance neon\n```\n\n## Building Integrations\n\n### Integration Architecture\n\nVercel integrations consist of:\n\n1. **Integration manifest** — declares capabilities, required scopes, and UI surfaces\n2. **Webhook handlers** — respond to Vercel lifecycle events\n3. **UI components** — optional dashboard panels rendered within Vercel\n4. **Resource provisioning** — create and manage resources for users\n\n### Scaffold an Integration\n\n```bash\n# Create a new integration project\nnpx create-vercel-integration my-integration\n\n# Or start from the template\nnpx create-next-app my-integration --example vercel-integration\n```\n\n### Integration Manifest\n\n```json\n\u002F\u002F vercel-integration.json\n{\n  \"name\": \"my-integration\",\n  \"slug\": \"my-integration\",\n  \"description\": \"Provides X for Vercel projects\",\n  \"logo\": \"public\u002Flogo.svg\",\n  \"website\": \"https:\u002F\u002Fmy-service.com\",\n  \"categories\": [\"databases\"],\n  \"scopes\": {\n    \"project\": [\"env-vars:read-write\"],\n    \"team\": [\"integrations:read-write\"]\n  },\n  \"installationType\": \"marketplace\",\n  \"resourceTypes\": [\n    {\n      \"name\": \"database\",\n      \"displayName\": \"Database\",\n      \"description\": \"A managed database instance\"\n    }\n  ]\n}\n```\n\n### Handling Lifecycle Webhooks\n\n```ts\n\u002F\u002F app\u002Fapi\u002Fwebhook\u002Froute.ts\nimport { verifyVercelSignature } from \"@vercel\u002Fintegration-utils\";\n\nexport async function POST(req: Request) {\n  const body = await req.json();\n\n  \u002F\u002F Verify the webhook is from Vercel\n  const isValid = await verifyVercelSignature(req, body);\n  if (!isValid) {\n    return Response.json({ error: \"Invalid signature\" }, { status: 401 });\n  }\n\n  switch (body.type) {\n    case \"integration.installed\":\n      \u002F\u002F Provision resources for the new installation\n      await provisionDatabase(body.payload);\n      break;\n\n    case \"integration.uninstalled\":\n      \u002F\u002F Clean up resources\n      await deprovisionDatabase(body.payload);\n      break;\n\n    case \"integration.configuration-updated\":\n      \u002F\u002F Handle config changes\n      await updateConfiguration(body.payload);\n      break;\n  }\n\n  return Response.json({ received: true });\n}\n```\n\n### Provisioning Environment Variables\n\n```ts\n\u002F\u002F lib\u002Fprovision.ts\nasync function provisionEnvVars(\n  installationId: string,\n  projectId: string,\n  credentials: { url: string; token: string },\n) {\n  const response = await fetch(\n    `https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fintegrations\u002Finstallations\u002F${installationId}\u002Fenv`,\n    {\n      method: \"POST\",\n      headers: {\n        Authorization: `Bearer ${process.env.VERCEL_INTEGRATION_TOKEN}`,\n        \"Content-Type\": \"application\u002Fjson\",\n      },\n      body: JSON.stringify({\n        projectId,\n        envVars: [\n          {\n            key: \"MY_SERVICE_URL\",\n            value: credentials.url,\n            target: [\"production\", \"preview\", \"development\"],\n            type: \"encrypted\",\n          },\n          {\n            key: \"MY_SERVICE_TOKEN\",\n            value: credentials.token,\n            target: [\"production\", \"preview\", \"development\"],\n            type: \"secret\",\n          },\n        ],\n      }),\n    },\n  );\n\n  return response.json();\n}\n```\n\n### Integration CLI Commands\n\nThe `vercel integration` CLI supports these subcommands:\n\n```bash\n# Discover integrations in the Marketplace catalog\nvercel integration discover\nvercel integration discover --category \u003Ccategory>\n\n# Get agent-friendly setup guide\nvercel integration guide \u003Cname>\nvercel integration guide \u003Cname> --framework \u003Cframework>\n\n# Add (install) an integration\nvercel integration add \u003Cname>\n\n# List installed integrations\nvercel integration list    # alias: vercel integration ls\n\n# Check usage \u002F billing balance\nvercel integration balance \u003Cname>\n\n# Open integration dashboard in browser (fallback when add redirects)\nvercel integration open \u003Cname>\n\n# Remove an integration\nvercel integration remove \u003Cname>\n```\n\n> **Building integrations?** Use `npx create-vercel-integration` to scaffold, then deploy your\n> integration app to Vercel normally with `vercel --prod`. Publish to the Marketplace via the\n> [Vercel Partner Dashboard](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations).\n\n## Common Integration Categories\n\n| Category              | Popular Integrations                          | Auto-Provisioned Env Vars               |\n| --------------------- | --------------------------------------------- | --------------------------------------- |\n| Databases             | Neon, Supabase, PlanetScale, MongoDB, Turso   | `POSTGRES_URL`, `DATABASE_URL`          |\n| Cache\u002FKV              | Upstash Redis                                 | `KV_REST_API_URL`, `KV_REST_API_TOKEN`  |\n| Auth                  | Clerk, Auth0, Descope                         | `CLERK_SECRET_KEY`, `AUTH0_SECRET`      |\n| CMS                   | Sanity, Contentful, Storyblok, DatoCMS        | `SANITY_PROJECT_ID`, `CONTENTFUL_TOKEN` |\n| Monitoring            | Datadog, Sentry, Checkly, New Relic           | `SENTRY_DSN`, `DD_API_KEY`             |\n| Payments              | Stripe                                        | `STRIPE_SECRET_KEY`                     |\n| Feature Flags         | LaunchDarkly, Statsig, Hypertune              | `LAUNCHDARKLY_SDK_KEY`                  |\n| AI Agents & Services  | CodeRabbit, Braintrust, Sourcery, Chatbase    | varies by integration                   |\n| Video                 | Mux                                           | `MUX_TOKEN_ID`, `MUX_TOKEN_SECRET`     |\n| Messaging             | Resend, Knock, Novu                           | `RESEND_API_KEY`                        |\n| Searching             | Algolia, Meilisearch                          | `ALGOLIA_APP_ID`, `ALGOLIA_API_KEY`    |\n| Commerce              | Shopify, Swell, BigCommerce                   | `SHOPIFY_ACCESS_TOKEN`                  |\n\n## Observability Integration Path\n\nMarketplace observability integrations (Datadog, Sentry, Axiom, Honeycomb, etc.) connect to Vercel's **Drains** system to receive telemetry. Understanding the data-type split is critical for correct setup.\n\n### Data-Type Split\n\n| Data Type          | Delivery Mechanism                                    | Integration Setup                                                                                                      |\n| ------------------ | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |\n| **Logs**           | Native drain (auto-configured by Marketplace install) | `vercel integration add \u003Cvendor>` auto-creates drain                                                                   |\n| **Traces**         | Native drain (OpenTelemetry-compatible)               | Same — auto-configured on install                                                                                      |\n| **Speed Insights** | Custom drain endpoint only                            | Requires manual drain creation via REST API or Dashboard (`https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002F~\u002Fsettings\u002Flog-drains`) |\n| **Web Analytics**  | Custom drain endpoint only                            | Requires manual drain creation via REST API or Dashboard (`https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002F~\u002Fsettings\u002Flog-drains`) |\n\n> **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. See `⤳ skill: observability` for drain setup details.\n\n### Agentic Flow: Observability Vendor Setup\n\nFollow this sequence when setting up an observability integration:\n\n#### 1. Pick Vendor\n\n```bash\n# Discover observability integrations\nvercel integration discover --category monitoring\n\n# Get setup guide for chosen vendor\nvercel integration guide datadog\n```\n\n#### 2. Install Integration\n\n```bash\n# Install — auto-provisions env vars and creates log\u002Ftrace drains\nvercel integration add datadog\n```\n\n#### 3. Verify Drain Created\n\n```bash\n# Confirm drain was auto-configured\ncurl -s -H \"Authorization: Bearer $VERCEL_TOKEN\" \\\n  \"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fdrains?teamId=$TEAM_ID\" | jq '.[] | {id, url, type, sources}'\n```\n\nCheck the response for a drain pointing to the vendor's ingestion endpoint. If no drain appears, the integration may need manual drain setup — see `⤳ skill: observability` for REST API drain creation.\n\n#### 4. Validate Endpoint\n\n```bash\n# Send a test payload to the drain\ncurl -X POST -H \"Authorization: Bearer $VERCEL_TOKEN\" \\\n  \"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fdrains\u002F\u003Cdrain-id>\u002Ftest?teamId=$TEAM_ID\"\n```\n\nConfirm the vendor dashboard shows the test event arriving.\n\n#### 5. Smoke Log Check\n\n```bash\n# Trigger a deployment and check logs flow through\nvercel logs \u003Cdeployment-url> --follow --since 5m\n\n# Check integration balance to confirm data is flowing\nvercel integration balance datadog\n```\n\nVerify that logs appear both in Vercel's runtime logs and in the vendor's dashboard.\n\n> **For drain payload formats and signature verification**, see `⤳ skill: observability` — the Drains section covers JSON\u002FNDJSON schemas and `x-vercel-signature` HMAC-SHA1 verification.\n\n### Speed Insights + Web Analytics Drains\n\nFor observability vendors that also want Speed Insights or Web Analytics data, configure a separate drain manually:\n\n```bash\n# Create a drain for Speed Insights + Web Analytics\ncurl -X POST -H \"Authorization: Bearer $VERCEL_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  \"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fdrains?teamId=$TEAM_ID\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fyour-vendor-endpoint.example.com\u002Fvercel-analytics\",\n    \"type\": \"json\",\n    \"sources\": [\"lambda\"],\n    \"environments\": [\"production\"]\n  }'\n```\n\n> **Payload schema reference:** See `⤳ skill: observability` for Web Analytics drain payload formats (JSON array of `{type, url, referrer, timestamp, geo, device}` events).\n\n## Decision Matrix\n\n| Need                                      | Use                                                | Why                                            |\n| ----------------------------------------- | -------------------------------------------------- | ---------------------------------------------- |\n| Add a database to your project            | `vercel integration add neon`                      | Auto-provisioned, unified billing              |\n| Browse available services                 | `vercel integration discover`                      | CLI-native catalog search                      |\n| Get setup steps for an integration        | `vercel integration guide \u003Cname> --framework \u003Cfw>` | Framework-specific, agent-friendly setup guide |\n| CLI redirects to dashboard during install | `vercel integration open \u003Cname>`                   | Fallback to complete provider web flow         |\n| Check integration usage\u002Fcost              | `vercel integration balance \u003Cname>`                | Billing visibility per integration             |\n| Build a SaaS integration                  | Integration SDK + manifest                         | Full lifecycle management                      |\n| Centralize billing                        | Marketplace integrations                           | Single Vercel invoice                          |\n| Auto-inject credentials                   | Marketplace auto-provisioning                      | No manual env var management                   |\n| Add observability vendor                  | `vercel integration add \u003Cvendor>`                  | Auto-creates log\u002Ftrace drains                  |\n| Export Speed Insights \u002F Web Analytics     | Manual drain via REST API                          | Not auto-configured by vendor install          |\n| Manage integrations programmatically      | Vercel REST API                                    | `\u002Fv1\u002Fintegrations` endpoints                   |\n| Test integration locally                  | `vercel dev`                                       | Local development server with Vercel features  |\n\n## Cross-References\n\n- **Drain configuration, payload formats, signature verification** → `⤳ skill: observability`\n- **Drains REST API endpoints** → `⤳ skill: vercel-api`\n- **CLI log streaming (`--follow`, `--since`, `--level`)** → `⤳ skill: vercel-cli`\n- **Safe project setup sequencing (link, env pull, then run db\u002Fdev)** → `⤳ skill:bootstrap`\n- **Headless CMS integrations (Sanity, Contentful)** → `⤳ skill:cms`\n\n## Official Documentation\n\n- [Vercel Marketplace](https:\u002F\u002Fvercel.com\u002Fmarketplace)\n- [Building Integrations](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations)\n- [Integration CLI](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcli\u002Fintegration)\n- [Integration Webhooks](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations#webhooks)\n- [Environment Variables](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fenvironment-variables)\n- [Drains Overview](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fdrains)\n- [Drains Security](https:\u002F\u002Fvercel.com\u002Fdocs\u002Fdrains\u002Fsecurity)\n",{"data":37,"body":49},{"name":4,"description":6,"metadata":38},{"priority":39,"docs":40,"sitemap":42,"pathPatterns":43,"bashPatterns":45},3,[41],"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations","https:\u002F\u002Fvercel.com\u002Fsitemap\u002Fdocs.xml",[44],"integration.json",[46,47,48],"\\bvercel\\s+integration\\b","\\bvercel\\s+integration\\s+add\\b","\\bvercel\\s+integration\\s+discover\\b",{"type":50,"children":51},"root",[52,61,67,74,81,95,220,225,231,363,378,384,570,583,589,801,812,817,856,869,875,880,906,1001,1014,1020,1293,1537,1543,1667,1673,1678,1723,1777,1783,1789,1794,1838,1844,1919,1925,2504,2510,3233,3239,4102,4108,4121,4505,4542,4548,4890,4896,4908,4914,5042,5070,5076,5081,5088,5160,5166,5200,5206,5308,5320,5326,5401,5406,5412,5506,5511,5539,5545,5550,5712,5740,5746,6022,6028,6127,6133,6202],{"type":53,"tag":54,"props":55,"children":57},"element","h1",{"id":56},"vercel-marketplace",[58],{"type":59,"value":60},"text","Vercel Marketplace",{"type":53,"tag":62,"props":63,"children":64},"p",{},[65],{"type":59,"value":66},"You are an expert in the Vercel Marketplace — the integration platform that connects third-party services to Vercel projects with unified billing, auto-provisioned environment variables, and one-click setup.",{"type":53,"tag":68,"props":69,"children":71},"h2",{"id":70},"consuming-integrations",[72],{"type":59,"value":73},"Consuming Integrations",{"type":53,"tag":75,"props":76,"children":78},"h3",{"id":77},"linked-project-preflight",[79],{"type":59,"value":80},"Linked Project Preflight",{"type":53,"tag":62,"props":82,"children":83},{},[84,86,93],{"type":59,"value":85},"Integration provisioning is project-scoped. Verify the repository is linked before running ",{"type":53,"tag":87,"props":88,"children":90},"code",{"className":89},[],[91],{"type":59,"value":92},"integration add",{"type":59,"value":94},".",{"type":53,"tag":96,"props":97,"children":102},"pre",{"className":98,"code":99,"language":100,"meta":101,"style":101},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Check whether this directory is linked to a Vercel project\ntest -f .vercel\u002Fproject.json && echo \"Linked\" || echo \"Not linked\"\n\n# Link if needed\nvercel link\n","bash","",[103],{"type":53,"tag":87,"props":104,"children":105},{"__ignoreMap":101},[106,118,188,197,206],{"type":53,"tag":107,"props":108,"children":111},"span",{"class":109,"line":110},"line",1,[112],{"type":53,"tag":107,"props":113,"children":115},{"style":114},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[116],{"type":59,"value":117},"# Check whether this directory is linked to a Vercel project\n",{"type":53,"tag":107,"props":119,"children":121},{"class":109,"line":120},2,[122,128,134,139,145,150,155,160,165,170,174,178,183],{"type":53,"tag":107,"props":123,"children":125},{"style":124},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[126],{"type":59,"value":127},"test",{"type":53,"tag":107,"props":129,"children":131},{"style":130},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[132],{"type":59,"value":133}," -f",{"type":53,"tag":107,"props":135,"children":136},{"style":130},[137],{"type":59,"value":138}," .vercel\u002Fproject.json",{"type":53,"tag":107,"props":140,"children":142},{"style":141},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[143],{"type":59,"value":144}," &&",{"type":53,"tag":107,"props":146,"children":147},{"style":124},[148],{"type":59,"value":149}," echo",{"type":53,"tag":107,"props":151,"children":152},{"style":141},[153],{"type":59,"value":154}," \"",{"type":53,"tag":107,"props":156,"children":157},{"style":130},[158],{"type":59,"value":159},"Linked",{"type":53,"tag":107,"props":161,"children":162},{"style":141},[163],{"type":59,"value":164},"\"",{"type":53,"tag":107,"props":166,"children":167},{"style":141},[168],{"type":59,"value":169}," ||",{"type":53,"tag":107,"props":171,"children":172},{"style":124},[173],{"type":59,"value":149},{"type":53,"tag":107,"props":175,"children":176},{"style":141},[177],{"type":59,"value":154},{"type":53,"tag":107,"props":179,"children":180},{"style":130},[181],{"type":59,"value":182},"Not linked",{"type":53,"tag":107,"props":184,"children":185},{"style":141},[186],{"type":59,"value":187},"\"\n",{"type":53,"tag":107,"props":189,"children":190},{"class":109,"line":39},[191],{"type":53,"tag":107,"props":192,"children":194},{"emptyLinePlaceholder":193},true,[195],{"type":59,"value":196},"\n",{"type":53,"tag":107,"props":198,"children":200},{"class":109,"line":199},4,[201],{"type":53,"tag":107,"props":202,"children":203},{"style":114},[204],{"type":59,"value":205},"# Link if needed\n",{"type":53,"tag":107,"props":207,"children":209},{"class":109,"line":208},5,[210,215],{"type":53,"tag":107,"props":211,"children":213},{"style":212},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[214],{"type":59,"value":14},{"type":53,"tag":107,"props":216,"children":217},{"style":130},[218],{"type":59,"value":219}," link\n",{"type":53,"tag":62,"props":221,"children":222},{},[223],{"type":59,"value":224},"If the project is not linked, do not continue with provisioning commands until linking completes.",{"type":53,"tag":75,"props":226,"children":228},{"id":227},"discovering-integrations",[229],{"type":59,"value":230},"Discovering Integrations",{"type":53,"tag":96,"props":232,"children":234},{"className":98,"code":233,"language":100,"meta":101,"style":101},"# Search the Marketplace catalog from CLI\nvercel integration discover\n\n# Filter by category\nvercel integration discover --category databases\nvercel integration discover --category monitoring\n\n# List integrations already installed on this project\nvercel integration list\n",[235],{"type":53,"tag":87,"props":236,"children":237},{"__ignoreMap":101},[238,246,263,270,278,304,329,337,346],{"type":53,"tag":107,"props":239,"children":240},{"class":109,"line":110},[241],{"type":53,"tag":107,"props":242,"children":243},{"style":114},[244],{"type":59,"value":245},"# Search the Marketplace catalog from CLI\n",{"type":53,"tag":107,"props":247,"children":248},{"class":109,"line":120},[249,253,258],{"type":53,"tag":107,"props":250,"children":251},{"style":212},[252],{"type":59,"value":14},{"type":53,"tag":107,"props":254,"children":255},{"style":130},[256],{"type":59,"value":257}," integration",{"type":53,"tag":107,"props":259,"children":260},{"style":130},[261],{"type":59,"value":262}," discover\n",{"type":53,"tag":107,"props":264,"children":265},{"class":109,"line":39},[266],{"type":53,"tag":107,"props":267,"children":268},{"emptyLinePlaceholder":193},[269],{"type":59,"value":196},{"type":53,"tag":107,"props":271,"children":272},{"class":109,"line":199},[273],{"type":53,"tag":107,"props":274,"children":275},{"style":114},[276],{"type":59,"value":277},"# Filter by category\n",{"type":53,"tag":107,"props":279,"children":280},{"class":109,"line":208},[281,285,289,294,299],{"type":53,"tag":107,"props":282,"children":283},{"style":212},[284],{"type":59,"value":14},{"type":53,"tag":107,"props":286,"children":287},{"style":130},[288],{"type":59,"value":257},{"type":53,"tag":107,"props":290,"children":291},{"style":130},[292],{"type":59,"value":293}," discover",{"type":53,"tag":107,"props":295,"children":296},{"style":130},[297],{"type":59,"value":298}," --category",{"type":53,"tag":107,"props":300,"children":301},{"style":130},[302],{"type":59,"value":303}," databases\n",{"type":53,"tag":107,"props":305,"children":307},{"class":109,"line":306},6,[308,312,316,320,324],{"type":53,"tag":107,"props":309,"children":310},{"style":212},[311],{"type":59,"value":14},{"type":53,"tag":107,"props":313,"children":314},{"style":130},[315],{"type":59,"value":257},{"type":53,"tag":107,"props":317,"children":318},{"style":130},[319],{"type":59,"value":293},{"type":53,"tag":107,"props":321,"children":322},{"style":130},[323],{"type":59,"value":298},{"type":53,"tag":107,"props":325,"children":326},{"style":130},[327],{"type":59,"value":328}," monitoring\n",{"type":53,"tag":107,"props":330,"children":332},{"class":109,"line":331},7,[333],{"type":53,"tag":107,"props":334,"children":335},{"emptyLinePlaceholder":193},[336],{"type":59,"value":196},{"type":53,"tag":107,"props":338,"children":340},{"class":109,"line":339},8,[341],{"type":53,"tag":107,"props":342,"children":343},{"style":114},[344],{"type":59,"value":345},"# List integrations already installed on this project\n",{"type":53,"tag":107,"props":347,"children":349},{"class":109,"line":348},9,[350,354,358],{"type":53,"tag":107,"props":351,"children":352},{"style":212},[353],{"type":59,"value":14},{"type":53,"tag":107,"props":355,"children":356},{"style":130},[357],{"type":59,"value":257},{"type":53,"tag":107,"props":359,"children":360},{"style":130},[361],{"type":59,"value":362}," list\n",{"type":53,"tag":62,"props":364,"children":365},{},[366,368,376],{"type":59,"value":367},"For browsing the full catalog interactively, use the ",{"type":53,"tag":369,"props":370,"children":374},"a",{"href":371,"rel":372},"https:\u002F\u002Fvercel.com\u002Fmarketplace",[373],"nofollow",[375],{"type":59,"value":60},{"type":59,"value":377}," dashboard.",{"type":53,"tag":75,"props":379,"children":381},{"id":380},"getting-setup-guidance",[382],{"type":59,"value":383},"Getting Setup Guidance",{"type":53,"tag":96,"props":385,"children":387},{"className":98,"code":386,"language":100,"meta":101,"style":101},"# Get agent-friendly setup guide for a specific integration\nvercel integration guide \u003Cname>\n\n# Include framework-specific steps when available\nvercel integration guide \u003Cname> --framework \u003Cfw>\n\n# Examples\nvercel integration guide neon\nvercel integration guide datadog --framework nextjs\n",[388],{"type":53,"tag":87,"props":389,"children":390},{"__ignoreMap":101},[391,399,436,443,451,506,513,521,541],{"type":53,"tag":107,"props":392,"children":393},{"class":109,"line":110},[394],{"type":53,"tag":107,"props":395,"children":396},{"style":114},[397],{"type":59,"value":398},"# Get agent-friendly setup guide for a specific integration\n",{"type":53,"tag":107,"props":400,"children":401},{"class":109,"line":120},[402,406,410,415,420,425,431],{"type":53,"tag":107,"props":403,"children":404},{"style":212},[405],{"type":59,"value":14},{"type":53,"tag":107,"props":407,"children":408},{"style":130},[409],{"type":59,"value":257},{"type":53,"tag":107,"props":411,"children":412},{"style":130},[413],{"type":59,"value":414}," guide",{"type":53,"tag":107,"props":416,"children":417},{"style":141},[418],{"type":59,"value":419}," \u003C",{"type":53,"tag":107,"props":421,"children":422},{"style":130},[423],{"type":59,"value":424},"nam",{"type":53,"tag":107,"props":426,"children":428},{"style":427},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[429],{"type":59,"value":430},"e",{"type":53,"tag":107,"props":432,"children":433},{"style":141},[434],{"type":59,"value":435},">\n",{"type":53,"tag":107,"props":437,"children":438},{"class":109,"line":39},[439],{"type":53,"tag":107,"props":440,"children":441},{"emptyLinePlaceholder":193},[442],{"type":59,"value":196},{"type":53,"tag":107,"props":444,"children":445},{"class":109,"line":199},[446],{"type":53,"tag":107,"props":447,"children":448},{"style":114},[449],{"type":59,"value":450},"# Include framework-specific steps when available\n",{"type":53,"tag":107,"props":452,"children":453},{"class":109,"line":208},[454,458,462,466,470,474,478,483,488,492,497,502],{"type":53,"tag":107,"props":455,"children":456},{"style":212},[457],{"type":59,"value":14},{"type":53,"tag":107,"props":459,"children":460},{"style":130},[461],{"type":59,"value":257},{"type":53,"tag":107,"props":463,"children":464},{"style":130},[465],{"type":59,"value":414},{"type":53,"tag":107,"props":467,"children":468},{"style":141},[469],{"type":59,"value":419},{"type":53,"tag":107,"props":471,"children":472},{"style":130},[473],{"type":59,"value":424},{"type":53,"tag":107,"props":475,"children":476},{"style":427},[477],{"type":59,"value":430},{"type":53,"tag":107,"props":479,"children":480},{"style":141},[481],{"type":59,"value":482},">",{"type":53,"tag":107,"props":484,"children":485},{"style":130},[486],{"type":59,"value":487}," --framework",{"type":53,"tag":107,"props":489,"children":490},{"style":141},[491],{"type":59,"value":419},{"type":53,"tag":107,"props":493,"children":494},{"style":130},[495],{"type":59,"value":496},"f",{"type":53,"tag":107,"props":498,"children":499},{"style":427},[500],{"type":59,"value":501},"w",{"type":53,"tag":107,"props":503,"children":504},{"style":141},[505],{"type":59,"value":435},{"type":53,"tag":107,"props":507,"children":508},{"class":109,"line":306},[509],{"type":53,"tag":107,"props":510,"children":511},{"emptyLinePlaceholder":193},[512],{"type":59,"value":196},{"type":53,"tag":107,"props":514,"children":515},{"class":109,"line":331},[516],{"type":53,"tag":107,"props":517,"children":518},{"style":114},[519],{"type":59,"value":520},"# Examples\n",{"type":53,"tag":107,"props":522,"children":523},{"class":109,"line":339},[524,528,532,536],{"type":53,"tag":107,"props":525,"children":526},{"style":212},[527],{"type":59,"value":14},{"type":53,"tag":107,"props":529,"children":530},{"style":130},[531],{"type":59,"value":257},{"type":53,"tag":107,"props":533,"children":534},{"style":130},[535],{"type":59,"value":414},{"type":53,"tag":107,"props":537,"children":538},{"style":130},[539],{"type":59,"value":540}," neon\n",{"type":53,"tag":107,"props":542,"children":543},{"class":109,"line":348},[544,548,552,556,561,565],{"type":53,"tag":107,"props":545,"children":546},{"style":212},[547],{"type":59,"value":14},{"type":53,"tag":107,"props":549,"children":550},{"style":130},[551],{"type":59,"value":257},{"type":53,"tag":107,"props":553,"children":554},{"style":130},[555],{"type":59,"value":414},{"type":53,"tag":107,"props":557,"children":558},{"style":130},[559],{"type":59,"value":560}," datadog",{"type":53,"tag":107,"props":562,"children":563},{"style":130},[564],{"type":59,"value":487},{"type":53,"tag":107,"props":566,"children":567},{"style":130},[568],{"type":59,"value":569}," nextjs\n",{"type":53,"tag":62,"props":571,"children":572},{},[573,575,581],{"type":59,"value":574},"Use ",{"type":53,"tag":87,"props":576,"children":578},{"className":577},[],[579],{"type":59,"value":580},"--framework \u003Cfw>",{"type":59,"value":582}," as the default discovery flow when framework-specific setup matters. The guide returns structured setup steps including required environment variables, SDK packages, and code snippets — ideal for agentic workflows.",{"type":53,"tag":75,"props":584,"children":586},{"id":585},"installing-an-integration",[587],{"type":59,"value":588},"Installing an Integration",{"type":53,"tag":96,"props":590,"children":592},{"className":98,"code":591,"language":100,"meta":101,"style":101},"# Install from CLI\nvercel integration add \u003Cintegration-name>\n\n# Examples\nvercel integration add neon          # Postgres database\nvercel integration add upstash       # Redis \u002F Kafka\nvercel integration add clerk         # Authentication\nvercel integration add sentry        # Error monitoring\nvercel integration add sanity        # CMS\nvercel integration add datadog       # Observability (auto-configures drain)\n",[593],{"type":53,"tag":87,"props":594,"children":595},{"__ignoreMap":101},[596,604,637,644,651,676,701,726,751,776],{"type":53,"tag":107,"props":597,"children":598},{"class":109,"line":110},[599],{"type":53,"tag":107,"props":600,"children":601},{"style":114},[602],{"type":59,"value":603},"# Install from CLI\n",{"type":53,"tag":107,"props":605,"children":606},{"class":109,"line":120},[607,611,615,620,624,629,633],{"type":53,"tag":107,"props":608,"children":609},{"style":212},[610],{"type":59,"value":14},{"type":53,"tag":107,"props":612,"children":613},{"style":130},[614],{"type":59,"value":257},{"type":53,"tag":107,"props":616,"children":617},{"style":130},[618],{"type":59,"value":619}," add",{"type":53,"tag":107,"props":621,"children":622},{"style":141},[623],{"type":59,"value":419},{"type":53,"tag":107,"props":625,"children":626},{"style":130},[627],{"type":59,"value":628},"integration-nam",{"type":53,"tag":107,"props":630,"children":631},{"style":427},[632],{"type":59,"value":430},{"type":53,"tag":107,"props":634,"children":635},{"style":141},[636],{"type":59,"value":435},{"type":53,"tag":107,"props":638,"children":639},{"class":109,"line":39},[640],{"type":53,"tag":107,"props":641,"children":642},{"emptyLinePlaceholder":193},[643],{"type":59,"value":196},{"type":53,"tag":107,"props":645,"children":646},{"class":109,"line":199},[647],{"type":53,"tag":107,"props":648,"children":649},{"style":114},[650],{"type":59,"value":520},{"type":53,"tag":107,"props":652,"children":653},{"class":109,"line":208},[654,658,662,666,671],{"type":53,"tag":107,"props":655,"children":656},{"style":212},[657],{"type":59,"value":14},{"type":53,"tag":107,"props":659,"children":660},{"style":130},[661],{"type":59,"value":257},{"type":53,"tag":107,"props":663,"children":664},{"style":130},[665],{"type":59,"value":619},{"type":53,"tag":107,"props":667,"children":668},{"style":130},[669],{"type":59,"value":670}," neon",{"type":53,"tag":107,"props":672,"children":673},{"style":114},[674],{"type":59,"value":675},"          # Postgres database\n",{"type":53,"tag":107,"props":677,"children":678},{"class":109,"line":306},[679,683,687,691,696],{"type":53,"tag":107,"props":680,"children":681},{"style":212},[682],{"type":59,"value":14},{"type":53,"tag":107,"props":684,"children":685},{"style":130},[686],{"type":59,"value":257},{"type":53,"tag":107,"props":688,"children":689},{"style":130},[690],{"type":59,"value":619},{"type":53,"tag":107,"props":692,"children":693},{"style":130},[694],{"type":59,"value":695}," upstash",{"type":53,"tag":107,"props":697,"children":698},{"style":114},[699],{"type":59,"value":700},"       # Redis \u002F Kafka\n",{"type":53,"tag":107,"props":702,"children":703},{"class":109,"line":331},[704,708,712,716,721],{"type":53,"tag":107,"props":705,"children":706},{"style":212},[707],{"type":59,"value":14},{"type":53,"tag":107,"props":709,"children":710},{"style":130},[711],{"type":59,"value":257},{"type":53,"tag":107,"props":713,"children":714},{"style":130},[715],{"type":59,"value":619},{"type":53,"tag":107,"props":717,"children":718},{"style":130},[719],{"type":59,"value":720}," clerk",{"type":53,"tag":107,"props":722,"children":723},{"style":114},[724],{"type":59,"value":725},"         # Authentication\n",{"type":53,"tag":107,"props":727,"children":728},{"class":109,"line":339},[729,733,737,741,746],{"type":53,"tag":107,"props":730,"children":731},{"style":212},[732],{"type":59,"value":14},{"type":53,"tag":107,"props":734,"children":735},{"style":130},[736],{"type":59,"value":257},{"type":53,"tag":107,"props":738,"children":739},{"style":130},[740],{"type":59,"value":619},{"type":53,"tag":107,"props":742,"children":743},{"style":130},[744],{"type":59,"value":745}," sentry",{"type":53,"tag":107,"props":747,"children":748},{"style":114},[749],{"type":59,"value":750},"        # Error monitoring\n",{"type":53,"tag":107,"props":752,"children":753},{"class":109,"line":348},[754,758,762,766,771],{"type":53,"tag":107,"props":755,"children":756},{"style":212},[757],{"type":59,"value":14},{"type":53,"tag":107,"props":759,"children":760},{"style":130},[761],{"type":59,"value":257},{"type":53,"tag":107,"props":763,"children":764},{"style":130},[765],{"type":59,"value":619},{"type":53,"tag":107,"props":767,"children":768},{"style":130},[769],{"type":59,"value":770}," sanity",{"type":53,"tag":107,"props":772,"children":773},{"style":114},[774],{"type":59,"value":775},"        # CMS\n",{"type":53,"tag":107,"props":777,"children":779},{"class":109,"line":778},10,[780,784,788,792,796],{"type":53,"tag":107,"props":781,"children":782},{"style":212},[783],{"type":59,"value":14},{"type":53,"tag":107,"props":785,"children":786},{"style":130},[787],{"type":59,"value":257},{"type":53,"tag":107,"props":789,"children":790},{"style":130},[791],{"type":59,"value":619},{"type":53,"tag":107,"props":793,"children":794},{"style":130},[795],{"type":59,"value":560},{"type":53,"tag":107,"props":797,"children":798},{"style":114},[799],{"type":59,"value":800},"       # Observability (auto-configures drain)\n",{"type":53,"tag":62,"props":802,"children":803},{},[804,810],{"type":53,"tag":87,"props":805,"children":807},{"className":806},[],[808],{"type":59,"value":809},"vercel integration add",{"type":59,"value":811}," is the primary scripted\u002FAI path. It installs to the currently linked project, auto-connects the integration, and auto-runs environment sync locally unless disabled.",{"type":53,"tag":62,"props":813,"children":814},{},[815],{"type":59,"value":816},"If the CLI hands off to the dashboard for provider-specific completion, treat that as fallback:",{"type":53,"tag":96,"props":818,"children":820},{"className":98,"code":819,"language":100,"meta":101,"style":101},"vercel integration open \u003Cintegration-name>\n",[821],{"type":53,"tag":87,"props":822,"children":823},{"__ignoreMap":101},[824],{"type":53,"tag":107,"props":825,"children":826},{"class":109,"line":110},[827,831,835,840,844,848,852],{"type":53,"tag":107,"props":828,"children":829},{"style":212},[830],{"type":59,"value":14},{"type":53,"tag":107,"props":832,"children":833},{"style":130},[834],{"type":59,"value":257},{"type":53,"tag":107,"props":836,"children":837},{"style":130},[838],{"type":59,"value":839}," open",{"type":53,"tag":107,"props":841,"children":842},{"style":141},[843],{"type":59,"value":419},{"type":53,"tag":107,"props":845,"children":846},{"style":130},[847],{"type":59,"value":628},{"type":53,"tag":107,"props":849,"children":850},{"style":427},[851],{"type":59,"value":430},{"type":53,"tag":107,"props":853,"children":854},{"style":141},[855],{"type":59,"value":435},{"type":53,"tag":62,"props":857,"children":858},{},[859,861,867],{"type":59,"value":860},"Complete the web step, then return to CLI verification (",{"type":53,"tag":87,"props":862,"children":864},{"className":863},[],[865],{"type":59,"value":866},"vercel env ls",{"type":59,"value":868}," and local env sync check).",{"type":53,"tag":75,"props":870,"children":872},{"id":871},"auto-provisioned-environment-variables",[873],{"type":59,"value":874},"Auto-Provisioned Environment Variables",{"type":53,"tag":62,"props":876,"children":877},{},[878],{"type":59,"value":879},"When you install a Marketplace integration from a linked project, Vercel automatically provisions the required environment variables for that project.",{"type":53,"tag":62,"props":881,"children":882},{},[883,889,891,896,898,904],{"type":53,"tag":884,"props":885,"children":886},"strong",{},[887],{"type":59,"value":888},"IMPORTANT: Provisioning delay after install.",{"type":59,"value":890}," After installing a database integration (especially Neon), the resource may take ",{"type":53,"tag":884,"props":892,"children":893},{},[894],{"type":59,"value":895},"1–3 minutes",{"type":59,"value":897}," to fully provision. During this window, connection attempts return HTTP 500 errors. Do NOT debug the connection string or code — just wait and retry. If local env sync was disabled or skipped, run ",{"type":53,"tag":87,"props":899,"children":901},{"className":900},[],[902],{"type":59,"value":903},"vercel env pull .env.local --yes",{"type":59,"value":905}," after a brief wait to get the finalized credentials.",{"type":53,"tag":96,"props":907,"children":909},{"className":98,"code":908,"language":100,"meta":101,"style":101},"# View environment variables added by integrations\nvercel env ls\n\n# Example: after installing Neon, these are auto-provisioned:\n# POSTGRES_URL          — connection string\n# POSTGRES_URL_NON_POOLING — direct connection\n# POSTGRES_USER         — database user\n# POSTGRES_PASSWORD     — database password\n# POSTGRES_DATABASE     — database name\n# POSTGRES_HOST         — database host\n",[910],{"type":53,"tag":87,"props":911,"children":912},{"__ignoreMap":101},[913,921,938,945,953,961,969,977,985,993],{"type":53,"tag":107,"props":914,"children":915},{"class":109,"line":110},[916],{"type":53,"tag":107,"props":917,"children":918},{"style":114},[919],{"type":59,"value":920},"# View environment variables added by integrations\n",{"type":53,"tag":107,"props":922,"children":923},{"class":109,"line":120},[924,928,933],{"type":53,"tag":107,"props":925,"children":926},{"style":212},[927],{"type":59,"value":14},{"type":53,"tag":107,"props":929,"children":930},{"style":130},[931],{"type":59,"value":932}," env",{"type":53,"tag":107,"props":934,"children":935},{"style":130},[936],{"type":59,"value":937}," ls\n",{"type":53,"tag":107,"props":939,"children":940},{"class":109,"line":39},[941],{"type":53,"tag":107,"props":942,"children":943},{"emptyLinePlaceholder":193},[944],{"type":59,"value":196},{"type":53,"tag":107,"props":946,"children":947},{"class":109,"line":199},[948],{"type":53,"tag":107,"props":949,"children":950},{"style":114},[951],{"type":59,"value":952},"# Example: after installing Neon, these are auto-provisioned:\n",{"type":53,"tag":107,"props":954,"children":955},{"class":109,"line":208},[956],{"type":53,"tag":107,"props":957,"children":958},{"style":114},[959],{"type":59,"value":960},"# POSTGRES_URL          — connection string\n",{"type":53,"tag":107,"props":962,"children":963},{"class":109,"line":306},[964],{"type":53,"tag":107,"props":965,"children":966},{"style":114},[967],{"type":59,"value":968},"# POSTGRES_URL_NON_POOLING — direct connection\n",{"type":53,"tag":107,"props":970,"children":971},{"class":109,"line":331},[972],{"type":53,"tag":107,"props":973,"children":974},{"style":114},[975],{"type":59,"value":976},"# POSTGRES_USER         — database user\n",{"type":53,"tag":107,"props":978,"children":979},{"class":109,"line":339},[980],{"type":53,"tag":107,"props":981,"children":982},{"style":114},[983],{"type":59,"value":984},"# POSTGRES_PASSWORD     — database password\n",{"type":53,"tag":107,"props":986,"children":987},{"class":109,"line":348},[988],{"type":53,"tag":107,"props":989,"children":990},{"style":114},[991],{"type":59,"value":992},"# POSTGRES_DATABASE     — database name\n",{"type":53,"tag":107,"props":994,"children":995},{"class":109,"line":778},[996],{"type":53,"tag":107,"props":997,"children":998},{"style":114},[999],{"type":59,"value":1000},"# POSTGRES_HOST         — database host\n",{"type":53,"tag":62,"props":1002,"children":1003},{},[1004,1006,1012],{"type":59,"value":1005},"No manual ",{"type":53,"tag":87,"props":1007,"children":1009},{"className":1008},[],[1010],{"type":59,"value":1011},".env",{"type":59,"value":1013}," file management is needed — the variables are injected into all environments (Development, Preview, Production) automatically.",{"type":53,"tag":75,"props":1015,"children":1017},{"id":1016},"using-provisioned-resources",[1018],{"type":59,"value":1019},"Using Provisioned Resources",{"type":53,"tag":96,"props":1021,"children":1025},{"className":1022,"code":1023,"language":1024,"meta":101,"style":101},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F app\u002Fapi\u002Fusers\u002Froute.ts — using Neon auto-provisioned env vars\nimport { neon } from \"@neondatabase\u002Fserverless\";\n\n\u002F\u002F POSTGRES_URL is auto-injected by the Neon integration\nconst sql = neon(process.env.POSTGRES_URL!);\n\nexport async function GET() {\n  const users = await sql`SELECT * FROM users LIMIT 10`;\n  return Response.json(users);\n}\n","ts",[1026],{"type":53,"tag":87,"props":1027,"children":1028},{"__ignoreMap":101},[1029,1037,1083,1090,1098,1158,1165,1198,1244,1285],{"type":53,"tag":107,"props":1030,"children":1031},{"class":109,"line":110},[1032],{"type":53,"tag":107,"props":1033,"children":1034},{"style":114},[1035],{"type":59,"value":1036},"\u002F\u002F app\u002Fapi\u002Fusers\u002Froute.ts — using Neon auto-provisioned env vars\n",{"type":53,"tag":107,"props":1038,"children":1039},{"class":109,"line":120},[1040,1046,1051,1055,1060,1065,1069,1074,1078],{"type":53,"tag":107,"props":1041,"children":1043},{"style":1042},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1044],{"type":59,"value":1045},"import",{"type":53,"tag":107,"props":1047,"children":1048},{"style":141},[1049],{"type":59,"value":1050}," {",{"type":53,"tag":107,"props":1052,"children":1053},{"style":427},[1054],{"type":59,"value":670},{"type":53,"tag":107,"props":1056,"children":1057},{"style":141},[1058],{"type":59,"value":1059}," }",{"type":53,"tag":107,"props":1061,"children":1062},{"style":1042},[1063],{"type":59,"value":1064}," from",{"type":53,"tag":107,"props":1066,"children":1067},{"style":141},[1068],{"type":59,"value":154},{"type":53,"tag":107,"props":1070,"children":1071},{"style":130},[1072],{"type":59,"value":1073},"@neondatabase\u002Fserverless",{"type":53,"tag":107,"props":1075,"children":1076},{"style":141},[1077],{"type":59,"value":164},{"type":53,"tag":107,"props":1079,"children":1080},{"style":141},[1081],{"type":59,"value":1082},";\n",{"type":53,"tag":107,"props":1084,"children":1085},{"class":109,"line":39},[1086],{"type":53,"tag":107,"props":1087,"children":1088},{"emptyLinePlaceholder":193},[1089],{"type":59,"value":196},{"type":53,"tag":107,"props":1091,"children":1092},{"class":109,"line":199},[1093],{"type":53,"tag":107,"props":1094,"children":1095},{"style":114},[1096],{"type":59,"value":1097},"\u002F\u002F POSTGRES_URL is auto-injected by the Neon integration\n",{"type":53,"tag":107,"props":1099,"children":1100},{"class":109,"line":208},[1101,1107,1112,1117,1121,1126,1130,1135,1139,1144,1149,1154],{"type":53,"tag":107,"props":1102,"children":1104},{"style":1103},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1105],{"type":59,"value":1106},"const",{"type":53,"tag":107,"props":1108,"children":1109},{"style":427},[1110],{"type":59,"value":1111}," sql ",{"type":53,"tag":107,"props":1113,"children":1114},{"style":141},[1115],{"type":59,"value":1116},"=",{"type":53,"tag":107,"props":1118,"children":1119},{"style":124},[1120],{"type":59,"value":670},{"type":53,"tag":107,"props":1122,"children":1123},{"style":427},[1124],{"type":59,"value":1125},"(process",{"type":53,"tag":107,"props":1127,"children":1128},{"style":141},[1129],{"type":59,"value":94},{"type":53,"tag":107,"props":1131,"children":1132},{"style":427},[1133],{"type":59,"value":1134},"env",{"type":53,"tag":107,"props":1136,"children":1137},{"style":141},[1138],{"type":59,"value":94},{"type":53,"tag":107,"props":1140,"children":1141},{"style":427},[1142],{"type":59,"value":1143},"POSTGRES_URL",{"type":53,"tag":107,"props":1145,"children":1146},{"style":141},[1147],{"type":59,"value":1148},"!",{"type":53,"tag":107,"props":1150,"children":1151},{"style":427},[1152],{"type":59,"value":1153},")",{"type":53,"tag":107,"props":1155,"children":1156},{"style":141},[1157],{"type":59,"value":1082},{"type":53,"tag":107,"props":1159,"children":1160},{"class":109,"line":306},[1161],{"type":53,"tag":107,"props":1162,"children":1163},{"emptyLinePlaceholder":193},[1164],{"type":59,"value":196},{"type":53,"tag":107,"props":1166,"children":1167},{"class":109,"line":331},[1168,1173,1178,1183,1188,1193],{"type":53,"tag":107,"props":1169,"children":1170},{"style":1042},[1171],{"type":59,"value":1172},"export",{"type":53,"tag":107,"props":1174,"children":1175},{"style":1103},[1176],{"type":59,"value":1177}," async",{"type":53,"tag":107,"props":1179,"children":1180},{"style":1103},[1181],{"type":59,"value":1182}," function",{"type":53,"tag":107,"props":1184,"children":1185},{"style":124},[1186],{"type":59,"value":1187}," GET",{"type":53,"tag":107,"props":1189,"children":1190},{"style":141},[1191],{"type":59,"value":1192},"()",{"type":53,"tag":107,"props":1194,"children":1195},{"style":141},[1196],{"type":59,"value":1197}," {\n",{"type":53,"tag":107,"props":1199,"children":1200},{"class":109,"line":339},[1201,1206,1211,1216,1221,1226,1231,1236,1240],{"type":53,"tag":107,"props":1202,"children":1203},{"style":1103},[1204],{"type":59,"value":1205},"  const",{"type":53,"tag":107,"props":1207,"children":1208},{"style":427},[1209],{"type":59,"value":1210}," users",{"type":53,"tag":107,"props":1212,"children":1213},{"style":141},[1214],{"type":59,"value":1215}," =",{"type":53,"tag":107,"props":1217,"children":1218},{"style":1042},[1219],{"type":59,"value":1220}," await",{"type":53,"tag":107,"props":1222,"children":1223},{"style":124},[1224],{"type":59,"value":1225}," sql",{"type":53,"tag":107,"props":1227,"children":1228},{"style":141},[1229],{"type":59,"value":1230},"`",{"type":53,"tag":107,"props":1232,"children":1233},{"style":130},[1234],{"type":59,"value":1235},"SELECT * FROM users LIMIT 10",{"type":53,"tag":107,"props":1237,"children":1238},{"style":141},[1239],{"type":59,"value":1230},{"type":53,"tag":107,"props":1241,"children":1242},{"style":141},[1243],{"type":59,"value":1082},{"type":53,"tag":107,"props":1245,"children":1246},{"class":109,"line":348},[1247,1252,1257,1261,1266,1272,1277,1281],{"type":53,"tag":107,"props":1248,"children":1249},{"style":1042},[1250],{"type":59,"value":1251},"  return",{"type":53,"tag":107,"props":1253,"children":1254},{"style":427},[1255],{"type":59,"value":1256}," Response",{"type":53,"tag":107,"props":1258,"children":1259},{"style":141},[1260],{"type":59,"value":94},{"type":53,"tag":107,"props":1262,"children":1263},{"style":124},[1264],{"type":59,"value":1265},"json",{"type":53,"tag":107,"props":1267,"children":1269},{"style":1268},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1270],{"type":59,"value":1271},"(",{"type":53,"tag":107,"props":1273,"children":1274},{"style":427},[1275],{"type":59,"value":1276},"users",{"type":53,"tag":107,"props":1278,"children":1279},{"style":1268},[1280],{"type":59,"value":1153},{"type":53,"tag":107,"props":1282,"children":1283},{"style":141},[1284],{"type":59,"value":1082},{"type":53,"tag":107,"props":1286,"children":1287},{"class":109,"line":778},[1288],{"type":53,"tag":107,"props":1289,"children":1290},{"style":141},[1291],{"type":59,"value":1292},"}\n",{"type":53,"tag":96,"props":1294,"children":1296},{"className":1022,"code":1295,"language":1024,"meta":101,"style":101},"\u002F\u002F app\u002Fapi\u002Fcache\u002Froute.ts — using Upstash auto-provisioned env vars\nimport { Redis } from \"@upstash\u002Fredis\";\n\n\u002F\u002F KV_REST_API_URL and KV_REST_API_TOKEN are auto-injected\nconst redis = Redis.fromEnv();\n\nexport async function GET() {\n  const cached = await redis.get(\"featured-products\");\n  return Response.json(cached);\n}\n",[1297],{"type":53,"tag":87,"props":1298,"children":1299},{"__ignoreMap":101},[1300,1308,1349,1356,1364,1401,1408,1435,1494,1530],{"type":53,"tag":107,"props":1301,"children":1302},{"class":109,"line":110},[1303],{"type":53,"tag":107,"props":1304,"children":1305},{"style":114},[1306],{"type":59,"value":1307},"\u002F\u002F app\u002Fapi\u002Fcache\u002Froute.ts — using Upstash auto-provisioned env vars\n",{"type":53,"tag":107,"props":1309,"children":1310},{"class":109,"line":120},[1311,1315,1319,1324,1328,1332,1336,1341,1345],{"type":53,"tag":107,"props":1312,"children":1313},{"style":1042},[1314],{"type":59,"value":1045},{"type":53,"tag":107,"props":1316,"children":1317},{"style":141},[1318],{"type":59,"value":1050},{"type":53,"tag":107,"props":1320,"children":1321},{"style":427},[1322],{"type":59,"value":1323}," Redis",{"type":53,"tag":107,"props":1325,"children":1326},{"style":141},[1327],{"type":59,"value":1059},{"type":53,"tag":107,"props":1329,"children":1330},{"style":1042},[1331],{"type":59,"value":1064},{"type":53,"tag":107,"props":1333,"children":1334},{"style":141},[1335],{"type":59,"value":154},{"type":53,"tag":107,"props":1337,"children":1338},{"style":130},[1339],{"type":59,"value":1340},"@upstash\u002Fredis",{"type":53,"tag":107,"props":1342,"children":1343},{"style":141},[1344],{"type":59,"value":164},{"type":53,"tag":107,"props":1346,"children":1347},{"style":141},[1348],{"type":59,"value":1082},{"type":53,"tag":107,"props":1350,"children":1351},{"class":109,"line":39},[1352],{"type":53,"tag":107,"props":1353,"children":1354},{"emptyLinePlaceholder":193},[1355],{"type":59,"value":196},{"type":53,"tag":107,"props":1357,"children":1358},{"class":109,"line":199},[1359],{"type":53,"tag":107,"props":1360,"children":1361},{"style":114},[1362],{"type":59,"value":1363},"\u002F\u002F KV_REST_API_URL and KV_REST_API_TOKEN are auto-injected\n",{"type":53,"tag":107,"props":1365,"children":1366},{"class":109,"line":208},[1367,1371,1376,1380,1384,1388,1393,1397],{"type":53,"tag":107,"props":1368,"children":1369},{"style":1103},[1370],{"type":59,"value":1106},{"type":53,"tag":107,"props":1372,"children":1373},{"style":427},[1374],{"type":59,"value":1375}," redis ",{"type":53,"tag":107,"props":1377,"children":1378},{"style":141},[1379],{"type":59,"value":1116},{"type":53,"tag":107,"props":1381,"children":1382},{"style":427},[1383],{"type":59,"value":1323},{"type":53,"tag":107,"props":1385,"children":1386},{"style":141},[1387],{"type":59,"value":94},{"type":53,"tag":107,"props":1389,"children":1390},{"style":124},[1391],{"type":59,"value":1392},"fromEnv",{"type":53,"tag":107,"props":1394,"children":1395},{"style":427},[1396],{"type":59,"value":1192},{"type":53,"tag":107,"props":1398,"children":1399},{"style":141},[1400],{"type":59,"value":1082},{"type":53,"tag":107,"props":1402,"children":1403},{"class":109,"line":306},[1404],{"type":53,"tag":107,"props":1405,"children":1406},{"emptyLinePlaceholder":193},[1407],{"type":59,"value":196},{"type":53,"tag":107,"props":1409,"children":1410},{"class":109,"line":331},[1411,1415,1419,1423,1427,1431],{"type":53,"tag":107,"props":1412,"children":1413},{"style":1042},[1414],{"type":59,"value":1172},{"type":53,"tag":107,"props":1416,"children":1417},{"style":1103},[1418],{"type":59,"value":1177},{"type":53,"tag":107,"props":1420,"children":1421},{"style":1103},[1422],{"type":59,"value":1182},{"type":53,"tag":107,"props":1424,"children":1425},{"style":124},[1426],{"type":59,"value":1187},{"type":53,"tag":107,"props":1428,"children":1429},{"style":141},[1430],{"type":59,"value":1192},{"type":53,"tag":107,"props":1432,"children":1433},{"style":141},[1434],{"type":59,"value":1197},{"type":53,"tag":107,"props":1436,"children":1437},{"class":109,"line":339},[1438,1442,1447,1451,1455,1460,1464,1469,1473,1477,1482,1486,1490],{"type":53,"tag":107,"props":1439,"children":1440},{"style":1103},[1441],{"type":59,"value":1205},{"type":53,"tag":107,"props":1443,"children":1444},{"style":427},[1445],{"type":59,"value":1446}," cached",{"type":53,"tag":107,"props":1448,"children":1449},{"style":141},[1450],{"type":59,"value":1215},{"type":53,"tag":107,"props":1452,"children":1453},{"style":1042},[1454],{"type":59,"value":1220},{"type":53,"tag":107,"props":1456,"children":1457},{"style":427},[1458],{"type":59,"value":1459}," redis",{"type":53,"tag":107,"props":1461,"children":1462},{"style":141},[1463],{"type":59,"value":94},{"type":53,"tag":107,"props":1465,"children":1466},{"style":124},[1467],{"type":59,"value":1468},"get",{"type":53,"tag":107,"props":1470,"children":1471},{"style":1268},[1472],{"type":59,"value":1271},{"type":53,"tag":107,"props":1474,"children":1475},{"style":141},[1476],{"type":59,"value":164},{"type":53,"tag":107,"props":1478,"children":1479},{"style":130},[1480],{"type":59,"value":1481},"featured-products",{"type":53,"tag":107,"props":1483,"children":1484},{"style":141},[1485],{"type":59,"value":164},{"type":53,"tag":107,"props":1487,"children":1488},{"style":1268},[1489],{"type":59,"value":1153},{"type":53,"tag":107,"props":1491,"children":1492},{"style":141},[1493],{"type":59,"value":1082},{"type":53,"tag":107,"props":1495,"children":1496},{"class":109,"line":348},[1497,1501,1505,1509,1513,1517,1522,1526],{"type":53,"tag":107,"props":1498,"children":1499},{"style":1042},[1500],{"type":59,"value":1251},{"type":53,"tag":107,"props":1502,"children":1503},{"style":427},[1504],{"type":59,"value":1256},{"type":53,"tag":107,"props":1506,"children":1507},{"style":141},[1508],{"type":59,"value":94},{"type":53,"tag":107,"props":1510,"children":1511},{"style":124},[1512],{"type":59,"value":1265},{"type":53,"tag":107,"props":1514,"children":1515},{"style":1268},[1516],{"type":59,"value":1271},{"type":53,"tag":107,"props":1518,"children":1519},{"style":427},[1520],{"type":59,"value":1521},"cached",{"type":53,"tag":107,"props":1523,"children":1524},{"style":1268},[1525],{"type":59,"value":1153},{"type":53,"tag":107,"props":1527,"children":1528},{"style":141},[1529],{"type":59,"value":1082},{"type":53,"tag":107,"props":1531,"children":1532},{"class":109,"line":778},[1533],{"type":53,"tag":107,"props":1534,"children":1535},{"style":141},[1536],{"type":59,"value":1292},{"type":53,"tag":75,"props":1538,"children":1540},{"id":1539},"managing-integrations",[1541],{"type":59,"value":1542},"Managing Integrations",{"type":53,"tag":96,"props":1544,"children":1546},{"className":98,"code":1545,"language":100,"meta":101,"style":101},"# List installed integrations\nvercel integration ls\n\n# Check usage and billing for an integration\nvercel integration balance \u003Cname>\n\n# Remove an integration\nvercel integration remove \u003Cintegration-name>\n",[1547],{"type":53,"tag":87,"props":1548,"children":1549},{"__ignoreMap":101},[1550,1558,1573,1580,1588,1620,1627,1635],{"type":53,"tag":107,"props":1551,"children":1552},{"class":109,"line":110},[1553],{"type":53,"tag":107,"props":1554,"children":1555},{"style":114},[1556],{"type":59,"value":1557},"# List installed integrations\n",{"type":53,"tag":107,"props":1559,"children":1560},{"class":109,"line":120},[1561,1565,1569],{"type":53,"tag":107,"props":1562,"children":1563},{"style":212},[1564],{"type":59,"value":14},{"type":53,"tag":107,"props":1566,"children":1567},{"style":130},[1568],{"type":59,"value":257},{"type":53,"tag":107,"props":1570,"children":1571},{"style":130},[1572],{"type":59,"value":937},{"type":53,"tag":107,"props":1574,"children":1575},{"class":109,"line":39},[1576],{"type":53,"tag":107,"props":1577,"children":1578},{"emptyLinePlaceholder":193},[1579],{"type":59,"value":196},{"type":53,"tag":107,"props":1581,"children":1582},{"class":109,"line":199},[1583],{"type":53,"tag":107,"props":1584,"children":1585},{"style":114},[1586],{"type":59,"value":1587},"# Check usage and billing for an integration\n",{"type":53,"tag":107,"props":1589,"children":1590},{"class":109,"line":208},[1591,1595,1599,1604,1608,1612,1616],{"type":53,"tag":107,"props":1592,"children":1593},{"style":212},[1594],{"type":59,"value":14},{"type":53,"tag":107,"props":1596,"children":1597},{"style":130},[1598],{"type":59,"value":257},{"type":53,"tag":107,"props":1600,"children":1601},{"style":130},[1602],{"type":59,"value":1603}," balance",{"type":53,"tag":107,"props":1605,"children":1606},{"style":141},[1607],{"type":59,"value":419},{"type":53,"tag":107,"props":1609,"children":1610},{"style":130},[1611],{"type":59,"value":424},{"type":53,"tag":107,"props":1613,"children":1614},{"style":427},[1615],{"type":59,"value":430},{"type":53,"tag":107,"props":1617,"children":1618},{"style":141},[1619],{"type":59,"value":435},{"type":53,"tag":107,"props":1621,"children":1622},{"class":109,"line":306},[1623],{"type":53,"tag":107,"props":1624,"children":1625},{"emptyLinePlaceholder":193},[1626],{"type":59,"value":196},{"type":53,"tag":107,"props":1628,"children":1629},{"class":109,"line":331},[1630],{"type":53,"tag":107,"props":1631,"children":1632},{"style":114},[1633],{"type":59,"value":1634},"# Remove an integration\n",{"type":53,"tag":107,"props":1636,"children":1637},{"class":109,"line":339},[1638,1642,1646,1651,1655,1659,1663],{"type":53,"tag":107,"props":1639,"children":1640},{"style":212},[1641],{"type":59,"value":14},{"type":53,"tag":107,"props":1643,"children":1644},{"style":130},[1645],{"type":59,"value":257},{"type":53,"tag":107,"props":1647,"children":1648},{"style":130},[1649],{"type":59,"value":1650}," remove",{"type":53,"tag":107,"props":1652,"children":1653},{"style":141},[1654],{"type":59,"value":419},{"type":53,"tag":107,"props":1656,"children":1657},{"style":130},[1658],{"type":59,"value":628},{"type":53,"tag":107,"props":1660,"children":1661},{"style":427},[1662],{"type":59,"value":430},{"type":53,"tag":107,"props":1664,"children":1665},{"style":141},[1666],{"type":59,"value":435},{"type":53,"tag":68,"props":1668,"children":1670},{"id":1669},"unified-billing",[1671],{"type":59,"value":1672},"Unified Billing",{"type":53,"tag":62,"props":1674,"children":1675},{},[1676],{"type":59,"value":1677},"Marketplace integrations use Vercel's unified billing system:",{"type":53,"tag":1679,"props":1680,"children":1681},"ul",{},[1682,1693,1703,1713],{"type":53,"tag":1683,"props":1684,"children":1685},"li",{},[1686,1691],{"type":53,"tag":884,"props":1687,"children":1688},{},[1689],{"type":59,"value":1690},"Single invoice",{"type":59,"value":1692},": All integration charges appear on your Vercel bill",{"type":53,"tag":1683,"props":1694,"children":1695},{},[1696,1701],{"type":53,"tag":884,"props":1697,"children":1698},{},[1699],{"type":59,"value":1700},"Usage-based",{"type":59,"value":1702},": Pay for what you use, scaled per integration's pricing model",{"type":53,"tag":1683,"props":1704,"children":1705},{},[1706,1711],{"type":53,"tag":884,"props":1707,"children":1708},{},[1709],{"type":59,"value":1710},"Team-level billing",{"type":59,"value":1712},": Charges roll up to the Vercel team account",{"type":53,"tag":1683,"props":1714,"children":1715},{},[1716,1721],{"type":53,"tag":884,"props":1717,"children":1718},{},[1719],{"type":59,"value":1720},"No separate accounts",{"type":59,"value":1722},": No need to manage billing with each provider individually",{"type":53,"tag":96,"props":1724,"children":1726},{"className":98,"code":1725,"language":100,"meta":101,"style":101},"# Check current usage balance for an integration\nvercel integration balance datadog\nvercel integration balance neon\n",[1727],{"type":53,"tag":87,"props":1728,"children":1729},{"__ignoreMap":101},[1730,1738,1758],{"type":53,"tag":107,"props":1731,"children":1732},{"class":109,"line":110},[1733],{"type":53,"tag":107,"props":1734,"children":1735},{"style":114},[1736],{"type":59,"value":1737},"# Check current usage balance for an integration\n",{"type":53,"tag":107,"props":1739,"children":1740},{"class":109,"line":120},[1741,1745,1749,1753],{"type":53,"tag":107,"props":1742,"children":1743},{"style":212},[1744],{"type":59,"value":14},{"type":53,"tag":107,"props":1746,"children":1747},{"style":130},[1748],{"type":59,"value":257},{"type":53,"tag":107,"props":1750,"children":1751},{"style":130},[1752],{"type":59,"value":1603},{"type":53,"tag":107,"props":1754,"children":1755},{"style":130},[1756],{"type":59,"value":1757}," datadog\n",{"type":53,"tag":107,"props":1759,"children":1760},{"class":109,"line":39},[1761,1765,1769,1773],{"type":53,"tag":107,"props":1762,"children":1763},{"style":212},[1764],{"type":59,"value":14},{"type":53,"tag":107,"props":1766,"children":1767},{"style":130},[1768],{"type":59,"value":257},{"type":53,"tag":107,"props":1770,"children":1771},{"style":130},[1772],{"type":59,"value":1603},{"type":53,"tag":107,"props":1774,"children":1775},{"style":130},[1776],{"type":59,"value":540},{"type":53,"tag":68,"props":1778,"children":1780},{"id":1779},"building-integrations",[1781],{"type":59,"value":1782},"Building Integrations",{"type":53,"tag":75,"props":1784,"children":1786},{"id":1785},"integration-architecture",[1787],{"type":59,"value":1788},"Integration Architecture",{"type":53,"tag":62,"props":1790,"children":1791},{},[1792],{"type":59,"value":1793},"Vercel integrations consist of:",{"type":53,"tag":1795,"props":1796,"children":1797},"ol",{},[1798,1808,1818,1828],{"type":53,"tag":1683,"props":1799,"children":1800},{},[1801,1806],{"type":53,"tag":884,"props":1802,"children":1803},{},[1804],{"type":59,"value":1805},"Integration manifest",{"type":59,"value":1807}," — declares capabilities, required scopes, and UI surfaces",{"type":53,"tag":1683,"props":1809,"children":1810},{},[1811,1816],{"type":53,"tag":884,"props":1812,"children":1813},{},[1814],{"type":59,"value":1815},"Webhook handlers",{"type":59,"value":1817}," — respond to Vercel lifecycle events",{"type":53,"tag":1683,"props":1819,"children":1820},{},[1821,1826],{"type":53,"tag":884,"props":1822,"children":1823},{},[1824],{"type":59,"value":1825},"UI components",{"type":59,"value":1827}," — optional dashboard panels rendered within Vercel",{"type":53,"tag":1683,"props":1829,"children":1830},{},[1831,1836],{"type":53,"tag":884,"props":1832,"children":1833},{},[1834],{"type":59,"value":1835},"Resource provisioning",{"type":59,"value":1837}," — create and manage resources for users",{"type":53,"tag":75,"props":1839,"children":1841},{"id":1840},"scaffold-an-integration",[1842],{"type":59,"value":1843},"Scaffold an Integration",{"type":53,"tag":96,"props":1845,"children":1847},{"className":98,"code":1846,"language":100,"meta":101,"style":101},"# Create a new integration project\nnpx create-vercel-integration my-integration\n\n# Or start from the template\nnpx create-next-app my-integration --example vercel-integration\n",[1848],{"type":53,"tag":87,"props":1849,"children":1850},{"__ignoreMap":101},[1851,1859,1877,1884,1892],{"type":53,"tag":107,"props":1852,"children":1853},{"class":109,"line":110},[1854],{"type":53,"tag":107,"props":1855,"children":1856},{"style":114},[1857],{"type":59,"value":1858},"# Create a new integration project\n",{"type":53,"tag":107,"props":1860,"children":1861},{"class":109,"line":120},[1862,1867,1872],{"type":53,"tag":107,"props":1863,"children":1864},{"style":212},[1865],{"type":59,"value":1866},"npx",{"type":53,"tag":107,"props":1868,"children":1869},{"style":130},[1870],{"type":59,"value":1871}," create-vercel-integration",{"type":53,"tag":107,"props":1873,"children":1874},{"style":130},[1875],{"type":59,"value":1876}," my-integration\n",{"type":53,"tag":107,"props":1878,"children":1879},{"class":109,"line":39},[1880],{"type":53,"tag":107,"props":1881,"children":1882},{"emptyLinePlaceholder":193},[1883],{"type":59,"value":196},{"type":53,"tag":107,"props":1885,"children":1886},{"class":109,"line":199},[1887],{"type":53,"tag":107,"props":1888,"children":1889},{"style":114},[1890],{"type":59,"value":1891},"# Or start from the template\n",{"type":53,"tag":107,"props":1893,"children":1894},{"class":109,"line":208},[1895,1899,1904,1909,1914],{"type":53,"tag":107,"props":1896,"children":1897},{"style":212},[1898],{"type":59,"value":1866},{"type":53,"tag":107,"props":1900,"children":1901},{"style":130},[1902],{"type":59,"value":1903}," create-next-app",{"type":53,"tag":107,"props":1905,"children":1906},{"style":130},[1907],{"type":59,"value":1908}," my-integration",{"type":53,"tag":107,"props":1910,"children":1911},{"style":130},[1912],{"type":59,"value":1913}," --example",{"type":53,"tag":107,"props":1915,"children":1916},{"style":130},[1917],{"type":59,"value":1918}," vercel-integration\n",{"type":53,"tag":75,"props":1920,"children":1922},{"id":1921},"integration-manifest",[1923],{"type":59,"value":1924},"Integration Manifest",{"type":53,"tag":96,"props":1926,"children":1929},{"className":1927,"code":1928,"language":1265,"meta":101,"style":101},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F vercel-integration.json\n{\n  \"name\": \"my-integration\",\n  \"slug\": \"my-integration\",\n  \"description\": \"Provides X for Vercel projects\",\n  \"logo\": \"public\u002Flogo.svg\",\n  \"website\": \"https:\u002F\u002Fmy-service.com\",\n  \"categories\": [\"databases\"],\n  \"scopes\": {\n    \"project\": [\"env-vars:read-write\"],\n    \"team\": [\"integrations:read-write\"]\n  },\n  \"installationType\": \"marketplace\",\n  \"resourceTypes\": [\n    {\n      \"name\": \"database\",\n      \"displayName\": \"Database\",\n      \"description\": \"A managed database instance\"\n    }\n  ]\n}\n",[1930],{"type":53,"tag":87,"props":1931,"children":1932},{"__ignoreMap":101},[1933,1941,1949,1989,2025,2062,2099,2136,2179,2203,2245,2288,2297,2334,2360,2369,2407,2445,2478,2487,2496],{"type":53,"tag":107,"props":1934,"children":1935},{"class":109,"line":110},[1936],{"type":53,"tag":107,"props":1937,"children":1938},{"style":114},[1939],{"type":59,"value":1940},"\u002F\u002F vercel-integration.json\n",{"type":53,"tag":107,"props":1942,"children":1943},{"class":109,"line":120},[1944],{"type":53,"tag":107,"props":1945,"children":1946},{"style":141},[1947],{"type":59,"value":1948},"{\n",{"type":53,"tag":107,"props":1950,"children":1951},{"class":109,"line":39},[1952,1957,1962,1966,1971,1975,1980,1984],{"type":53,"tag":107,"props":1953,"children":1954},{"style":141},[1955],{"type":59,"value":1956},"  \"",{"type":53,"tag":107,"props":1958,"children":1959},{"style":1103},[1960],{"type":59,"value":1961},"name",{"type":53,"tag":107,"props":1963,"children":1964},{"style":141},[1965],{"type":59,"value":164},{"type":53,"tag":107,"props":1967,"children":1968},{"style":141},[1969],{"type":59,"value":1970},":",{"type":53,"tag":107,"props":1972,"children":1973},{"style":141},[1974],{"type":59,"value":154},{"type":53,"tag":107,"props":1976,"children":1977},{"style":130},[1978],{"type":59,"value":1979},"my-integration",{"type":53,"tag":107,"props":1981,"children":1982},{"style":141},[1983],{"type":59,"value":164},{"type":53,"tag":107,"props":1985,"children":1986},{"style":141},[1987],{"type":59,"value":1988},",\n",{"type":53,"tag":107,"props":1990,"children":1991},{"class":109,"line":199},[1992,1996,2001,2005,2009,2013,2017,2021],{"type":53,"tag":107,"props":1993,"children":1994},{"style":141},[1995],{"type":59,"value":1956},{"type":53,"tag":107,"props":1997,"children":1998},{"style":1103},[1999],{"type":59,"value":2000},"slug",{"type":53,"tag":107,"props":2002,"children":2003},{"style":141},[2004],{"type":59,"value":164},{"type":53,"tag":107,"props":2006,"children":2007},{"style":141},[2008],{"type":59,"value":1970},{"type":53,"tag":107,"props":2010,"children":2011},{"style":141},[2012],{"type":59,"value":154},{"type":53,"tag":107,"props":2014,"children":2015},{"style":130},[2016],{"type":59,"value":1979},{"type":53,"tag":107,"props":2018,"children":2019},{"style":141},[2020],{"type":59,"value":164},{"type":53,"tag":107,"props":2022,"children":2023},{"style":141},[2024],{"type":59,"value":1988},{"type":53,"tag":107,"props":2026,"children":2027},{"class":109,"line":208},[2028,2032,2037,2041,2045,2049,2054,2058],{"type":53,"tag":107,"props":2029,"children":2030},{"style":141},[2031],{"type":59,"value":1956},{"type":53,"tag":107,"props":2033,"children":2034},{"style":1103},[2035],{"type":59,"value":2036},"description",{"type":53,"tag":107,"props":2038,"children":2039},{"style":141},[2040],{"type":59,"value":164},{"type":53,"tag":107,"props":2042,"children":2043},{"style":141},[2044],{"type":59,"value":1970},{"type":53,"tag":107,"props":2046,"children":2047},{"style":141},[2048],{"type":59,"value":154},{"type":53,"tag":107,"props":2050,"children":2051},{"style":130},[2052],{"type":59,"value":2053},"Provides X for Vercel projects",{"type":53,"tag":107,"props":2055,"children":2056},{"style":141},[2057],{"type":59,"value":164},{"type":53,"tag":107,"props":2059,"children":2060},{"style":141},[2061],{"type":59,"value":1988},{"type":53,"tag":107,"props":2063,"children":2064},{"class":109,"line":306},[2065,2069,2074,2078,2082,2086,2091,2095],{"type":53,"tag":107,"props":2066,"children":2067},{"style":141},[2068],{"type":59,"value":1956},{"type":53,"tag":107,"props":2070,"children":2071},{"style":1103},[2072],{"type":59,"value":2073},"logo",{"type":53,"tag":107,"props":2075,"children":2076},{"style":141},[2077],{"type":59,"value":164},{"type":53,"tag":107,"props":2079,"children":2080},{"style":141},[2081],{"type":59,"value":1970},{"type":53,"tag":107,"props":2083,"children":2084},{"style":141},[2085],{"type":59,"value":154},{"type":53,"tag":107,"props":2087,"children":2088},{"style":130},[2089],{"type":59,"value":2090},"public\u002Flogo.svg",{"type":53,"tag":107,"props":2092,"children":2093},{"style":141},[2094],{"type":59,"value":164},{"type":53,"tag":107,"props":2096,"children":2097},{"style":141},[2098],{"type":59,"value":1988},{"type":53,"tag":107,"props":2100,"children":2101},{"class":109,"line":331},[2102,2106,2111,2115,2119,2123,2128,2132],{"type":53,"tag":107,"props":2103,"children":2104},{"style":141},[2105],{"type":59,"value":1956},{"type":53,"tag":107,"props":2107,"children":2108},{"style":1103},[2109],{"type":59,"value":2110},"website",{"type":53,"tag":107,"props":2112,"children":2113},{"style":141},[2114],{"type":59,"value":164},{"type":53,"tag":107,"props":2116,"children":2117},{"style":141},[2118],{"type":59,"value":1970},{"type":53,"tag":107,"props":2120,"children":2121},{"style":141},[2122],{"type":59,"value":154},{"type":53,"tag":107,"props":2124,"children":2125},{"style":130},[2126],{"type":59,"value":2127},"https:\u002F\u002Fmy-service.com",{"type":53,"tag":107,"props":2129,"children":2130},{"style":141},[2131],{"type":59,"value":164},{"type":53,"tag":107,"props":2133,"children":2134},{"style":141},[2135],{"type":59,"value":1988},{"type":53,"tag":107,"props":2137,"children":2138},{"class":109,"line":339},[2139,2143,2148,2152,2156,2161,2165,2170,2174],{"type":53,"tag":107,"props":2140,"children":2141},{"style":141},[2142],{"type":59,"value":1956},{"type":53,"tag":107,"props":2144,"children":2145},{"style":1103},[2146],{"type":59,"value":2147},"categories",{"type":53,"tag":107,"props":2149,"children":2150},{"style":141},[2151],{"type":59,"value":164},{"type":53,"tag":107,"props":2153,"children":2154},{"style":141},[2155],{"type":59,"value":1970},{"type":53,"tag":107,"props":2157,"children":2158},{"style":141},[2159],{"type":59,"value":2160}," [",{"type":53,"tag":107,"props":2162,"children":2163},{"style":141},[2164],{"type":59,"value":164},{"type":53,"tag":107,"props":2166,"children":2167},{"style":130},[2168],{"type":59,"value":2169},"databases",{"type":53,"tag":107,"props":2171,"children":2172},{"style":141},[2173],{"type":59,"value":164},{"type":53,"tag":107,"props":2175,"children":2176},{"style":141},[2177],{"type":59,"value":2178},"],\n",{"type":53,"tag":107,"props":2180,"children":2181},{"class":109,"line":348},[2182,2186,2191,2195,2199],{"type":53,"tag":107,"props":2183,"children":2184},{"style":141},[2185],{"type":59,"value":1956},{"type":53,"tag":107,"props":2187,"children":2188},{"style":1103},[2189],{"type":59,"value":2190},"scopes",{"type":53,"tag":107,"props":2192,"children":2193},{"style":141},[2194],{"type":59,"value":164},{"type":53,"tag":107,"props":2196,"children":2197},{"style":141},[2198],{"type":59,"value":1970},{"type":53,"tag":107,"props":2200,"children":2201},{"style":141},[2202],{"type":59,"value":1197},{"type":53,"tag":107,"props":2204,"children":2205},{"class":109,"line":778},[2206,2211,2216,2220,2224,2228,2232,2237,2241],{"type":53,"tag":107,"props":2207,"children":2208},{"style":141},[2209],{"type":59,"value":2210},"    \"",{"type":53,"tag":107,"props":2212,"children":2213},{"style":212},[2214],{"type":59,"value":2215},"project",{"type":53,"tag":107,"props":2217,"children":2218},{"style":141},[2219],{"type":59,"value":164},{"type":53,"tag":107,"props":2221,"children":2222},{"style":141},[2223],{"type":59,"value":1970},{"type":53,"tag":107,"props":2225,"children":2226},{"style":141},[2227],{"type":59,"value":2160},{"type":53,"tag":107,"props":2229,"children":2230},{"style":141},[2231],{"type":59,"value":164},{"type":53,"tag":107,"props":2233,"children":2234},{"style":130},[2235],{"type":59,"value":2236},"env-vars:read-write",{"type":53,"tag":107,"props":2238,"children":2239},{"style":141},[2240],{"type":59,"value":164},{"type":53,"tag":107,"props":2242,"children":2243},{"style":141},[2244],{"type":59,"value":2178},{"type":53,"tag":107,"props":2246,"children":2248},{"class":109,"line":2247},11,[2249,2253,2258,2262,2266,2270,2274,2279,2283],{"type":53,"tag":107,"props":2250,"children":2251},{"style":141},[2252],{"type":59,"value":2210},{"type":53,"tag":107,"props":2254,"children":2255},{"style":212},[2256],{"type":59,"value":2257},"team",{"type":53,"tag":107,"props":2259,"children":2260},{"style":141},[2261],{"type":59,"value":164},{"type":53,"tag":107,"props":2263,"children":2264},{"style":141},[2265],{"type":59,"value":1970},{"type":53,"tag":107,"props":2267,"children":2268},{"style":141},[2269],{"type":59,"value":2160},{"type":53,"tag":107,"props":2271,"children":2272},{"style":141},[2273],{"type":59,"value":164},{"type":53,"tag":107,"props":2275,"children":2276},{"style":130},[2277],{"type":59,"value":2278},"integrations:read-write",{"type":53,"tag":107,"props":2280,"children":2281},{"style":141},[2282],{"type":59,"value":164},{"type":53,"tag":107,"props":2284,"children":2285},{"style":141},[2286],{"type":59,"value":2287},"]\n",{"type":53,"tag":107,"props":2289,"children":2291},{"class":109,"line":2290},12,[2292],{"type":53,"tag":107,"props":2293,"children":2294},{"style":141},[2295],{"type":59,"value":2296},"  },\n",{"type":53,"tag":107,"props":2298,"children":2300},{"class":109,"line":2299},13,[2301,2305,2310,2314,2318,2322,2326,2330],{"type":53,"tag":107,"props":2302,"children":2303},{"style":141},[2304],{"type":59,"value":1956},{"type":53,"tag":107,"props":2306,"children":2307},{"style":1103},[2308],{"type":59,"value":2309},"installationType",{"type":53,"tag":107,"props":2311,"children":2312},{"style":141},[2313],{"type":59,"value":164},{"type":53,"tag":107,"props":2315,"children":2316},{"style":141},[2317],{"type":59,"value":1970},{"type":53,"tag":107,"props":2319,"children":2320},{"style":141},[2321],{"type":59,"value":154},{"type":53,"tag":107,"props":2323,"children":2324},{"style":130},[2325],{"type":59,"value":4},{"type":53,"tag":107,"props":2327,"children":2328},{"style":141},[2329],{"type":59,"value":164},{"type":53,"tag":107,"props":2331,"children":2332},{"style":141},[2333],{"type":59,"value":1988},{"type":53,"tag":107,"props":2335,"children":2337},{"class":109,"line":2336},14,[2338,2342,2347,2351,2355],{"type":53,"tag":107,"props":2339,"children":2340},{"style":141},[2341],{"type":59,"value":1956},{"type":53,"tag":107,"props":2343,"children":2344},{"style":1103},[2345],{"type":59,"value":2346},"resourceTypes",{"type":53,"tag":107,"props":2348,"children":2349},{"style":141},[2350],{"type":59,"value":164},{"type":53,"tag":107,"props":2352,"children":2353},{"style":141},[2354],{"type":59,"value":1970},{"type":53,"tag":107,"props":2356,"children":2357},{"style":141},[2358],{"type":59,"value":2359}," [\n",{"type":53,"tag":107,"props":2361,"children":2363},{"class":109,"line":2362},15,[2364],{"type":53,"tag":107,"props":2365,"children":2366},{"style":141},[2367],{"type":59,"value":2368},"    {\n",{"type":53,"tag":107,"props":2370,"children":2372},{"class":109,"line":2371},16,[2373,2378,2382,2386,2390,2394,2399,2403],{"type":53,"tag":107,"props":2374,"children":2375},{"style":141},[2376],{"type":59,"value":2377},"      \"",{"type":53,"tag":107,"props":2379,"children":2380},{"style":212},[2381],{"type":59,"value":1961},{"type":53,"tag":107,"props":2383,"children":2384},{"style":141},[2385],{"type":59,"value":164},{"type":53,"tag":107,"props":2387,"children":2388},{"style":141},[2389],{"type":59,"value":1970},{"type":53,"tag":107,"props":2391,"children":2392},{"style":141},[2393],{"type":59,"value":154},{"type":53,"tag":107,"props":2395,"children":2396},{"style":130},[2397],{"type":59,"value":2398},"database",{"type":53,"tag":107,"props":2400,"children":2401},{"style":141},[2402],{"type":59,"value":164},{"type":53,"tag":107,"props":2404,"children":2405},{"style":141},[2406],{"type":59,"value":1988},{"type":53,"tag":107,"props":2408,"children":2410},{"class":109,"line":2409},17,[2411,2415,2420,2424,2428,2432,2437,2441],{"type":53,"tag":107,"props":2412,"children":2413},{"style":141},[2414],{"type":59,"value":2377},{"type":53,"tag":107,"props":2416,"children":2417},{"style":212},[2418],{"type":59,"value":2419},"displayName",{"type":53,"tag":107,"props":2421,"children":2422},{"style":141},[2423],{"type":59,"value":164},{"type":53,"tag":107,"props":2425,"children":2426},{"style":141},[2427],{"type":59,"value":1970},{"type":53,"tag":107,"props":2429,"children":2430},{"style":141},[2431],{"type":59,"value":154},{"type":53,"tag":107,"props":2433,"children":2434},{"style":130},[2435],{"type":59,"value":2436},"Database",{"type":53,"tag":107,"props":2438,"children":2439},{"style":141},[2440],{"type":59,"value":164},{"type":53,"tag":107,"props":2442,"children":2443},{"style":141},[2444],{"type":59,"value":1988},{"type":53,"tag":107,"props":2446,"children":2448},{"class":109,"line":2447},18,[2449,2453,2457,2461,2465,2469,2474],{"type":53,"tag":107,"props":2450,"children":2451},{"style":141},[2452],{"type":59,"value":2377},{"type":53,"tag":107,"props":2454,"children":2455},{"style":212},[2456],{"type":59,"value":2036},{"type":53,"tag":107,"props":2458,"children":2459},{"style":141},[2460],{"type":59,"value":164},{"type":53,"tag":107,"props":2462,"children":2463},{"style":141},[2464],{"type":59,"value":1970},{"type":53,"tag":107,"props":2466,"children":2467},{"style":141},[2468],{"type":59,"value":154},{"type":53,"tag":107,"props":2470,"children":2471},{"style":130},[2472],{"type":59,"value":2473},"A managed database instance",{"type":53,"tag":107,"props":2475,"children":2476},{"style":141},[2477],{"type":59,"value":187},{"type":53,"tag":107,"props":2479,"children":2481},{"class":109,"line":2480},19,[2482],{"type":53,"tag":107,"props":2483,"children":2484},{"style":141},[2485],{"type":59,"value":2486},"    }\n",{"type":53,"tag":107,"props":2488,"children":2490},{"class":109,"line":2489},20,[2491],{"type":53,"tag":107,"props":2492,"children":2493},{"style":141},[2494],{"type":59,"value":2495},"  ]\n",{"type":53,"tag":107,"props":2497,"children":2499},{"class":109,"line":2498},21,[2500],{"type":53,"tag":107,"props":2501,"children":2502},{"style":141},[2503],{"type":59,"value":1292},{"type":53,"tag":75,"props":2505,"children":2507},{"id":2506},"handling-lifecycle-webhooks",[2508],{"type":59,"value":2509},"Handling Lifecycle Webhooks",{"type":53,"tag":96,"props":2511,"children":2513},{"className":1022,"code":2512,"language":1024,"meta":101,"style":101},"\u002F\u002F app\u002Fapi\u002Fwebhook\u002Froute.ts\nimport { verifyVercelSignature } from \"@vercel\u002Fintegration-utils\";\n\nexport async function POST(req: Request) {\n  const body = await req.json();\n\n  \u002F\u002F Verify the webhook is from Vercel\n  const isValid = await verifyVercelSignature(req, body);\n  if (!isValid) {\n    return Response.json({ error: \"Invalid signature\" }, { status: 401 });\n  }\n\n  switch (body.type) {\n    case \"integration.installed\":\n      \u002F\u002F Provision resources for the new installation\n      await provisionDatabase(body.payload);\n      break;\n\n    case \"integration.uninstalled\":\n      \u002F\u002F Clean up resources\n      await deprovisionDatabase(body.payload);\n      break;\n\n    case \"integration.configuration-updated\":\n      \u002F\u002F Handle config changes\n      await updateConfiguration(body.payload);\n      break;\n  }\n\n  return Response.json({ received: true });\n}\n",[2514],{"type":53,"tag":87,"props":2515,"children":2516},{"__ignoreMap":101},[2517,2525,2566,2573,2620,2661,2668,2676,2725,2756,2843,2851,2858,2892,2918,2926,2964,2976,2983,3007,3015,3051,3063,3071,3096,3105,3142,3154,3162,3170,3225],{"type":53,"tag":107,"props":2518,"children":2519},{"class":109,"line":110},[2520],{"type":53,"tag":107,"props":2521,"children":2522},{"style":114},[2523],{"type":59,"value":2524},"\u002F\u002F app\u002Fapi\u002Fwebhook\u002Froute.ts\n",{"type":53,"tag":107,"props":2526,"children":2527},{"class":109,"line":120},[2528,2532,2536,2541,2545,2549,2553,2558,2562],{"type":53,"tag":107,"props":2529,"children":2530},{"style":1042},[2531],{"type":59,"value":1045},{"type":53,"tag":107,"props":2533,"children":2534},{"style":141},[2535],{"type":59,"value":1050},{"type":53,"tag":107,"props":2537,"children":2538},{"style":427},[2539],{"type":59,"value":2540}," verifyVercelSignature",{"type":53,"tag":107,"props":2542,"children":2543},{"style":141},[2544],{"type":59,"value":1059},{"type":53,"tag":107,"props":2546,"children":2547},{"style":1042},[2548],{"type":59,"value":1064},{"type":53,"tag":107,"props":2550,"children":2551},{"style":141},[2552],{"type":59,"value":154},{"type":53,"tag":107,"props":2554,"children":2555},{"style":130},[2556],{"type":59,"value":2557},"@vercel\u002Fintegration-utils",{"type":53,"tag":107,"props":2559,"children":2560},{"style":141},[2561],{"type":59,"value":164},{"type":53,"tag":107,"props":2563,"children":2564},{"style":141},[2565],{"type":59,"value":1082},{"type":53,"tag":107,"props":2567,"children":2568},{"class":109,"line":39},[2569],{"type":53,"tag":107,"props":2570,"children":2571},{"emptyLinePlaceholder":193},[2572],{"type":59,"value":196},{"type":53,"tag":107,"props":2574,"children":2575},{"class":109,"line":199},[2576,2580,2584,2588,2593,2597,2603,2607,2612,2616],{"type":53,"tag":107,"props":2577,"children":2578},{"style":1042},[2579],{"type":59,"value":1172},{"type":53,"tag":107,"props":2581,"children":2582},{"style":1103},[2583],{"type":59,"value":1177},{"type":53,"tag":107,"props":2585,"children":2586},{"style":1103},[2587],{"type":59,"value":1182},{"type":53,"tag":107,"props":2589,"children":2590},{"style":124},[2591],{"type":59,"value":2592}," POST",{"type":53,"tag":107,"props":2594,"children":2595},{"style":141},[2596],{"type":59,"value":1271},{"type":53,"tag":107,"props":2598,"children":2600},{"style":2599},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[2601],{"type":59,"value":2602},"req",{"type":53,"tag":107,"props":2604,"children":2605},{"style":141},[2606],{"type":59,"value":1970},{"type":53,"tag":107,"props":2608,"children":2609},{"style":212},[2610],{"type":59,"value":2611}," Request",{"type":53,"tag":107,"props":2613,"children":2614},{"style":141},[2615],{"type":59,"value":1153},{"type":53,"tag":107,"props":2617,"children":2618},{"style":141},[2619],{"type":59,"value":1197},{"type":53,"tag":107,"props":2621,"children":2622},{"class":109,"line":208},[2623,2627,2632,2636,2640,2645,2649,2653,2657],{"type":53,"tag":107,"props":2624,"children":2625},{"style":1103},[2626],{"type":59,"value":1205},{"type":53,"tag":107,"props":2628,"children":2629},{"style":427},[2630],{"type":59,"value":2631}," body",{"type":53,"tag":107,"props":2633,"children":2634},{"style":141},[2635],{"type":59,"value":1215},{"type":53,"tag":107,"props":2637,"children":2638},{"style":1042},[2639],{"type":59,"value":1220},{"type":53,"tag":107,"props":2641,"children":2642},{"style":427},[2643],{"type":59,"value":2644}," req",{"type":53,"tag":107,"props":2646,"children":2647},{"style":141},[2648],{"type":59,"value":94},{"type":53,"tag":107,"props":2650,"children":2651},{"style":124},[2652],{"type":59,"value":1265},{"type":53,"tag":107,"props":2654,"children":2655},{"style":1268},[2656],{"type":59,"value":1192},{"type":53,"tag":107,"props":2658,"children":2659},{"style":141},[2660],{"type":59,"value":1082},{"type":53,"tag":107,"props":2662,"children":2663},{"class":109,"line":306},[2664],{"type":53,"tag":107,"props":2665,"children":2666},{"emptyLinePlaceholder":193},[2667],{"type":59,"value":196},{"type":53,"tag":107,"props":2669,"children":2670},{"class":109,"line":331},[2671],{"type":53,"tag":107,"props":2672,"children":2673},{"style":114},[2674],{"type":59,"value":2675},"  \u002F\u002F Verify the webhook is from Vercel\n",{"type":53,"tag":107,"props":2677,"children":2678},{"class":109,"line":339},[2679,2683,2688,2692,2696,2700,2704,2708,2713,2717,2721],{"type":53,"tag":107,"props":2680,"children":2681},{"style":1103},[2682],{"type":59,"value":1205},{"type":53,"tag":107,"props":2684,"children":2685},{"style":427},[2686],{"type":59,"value":2687}," isValid",{"type":53,"tag":107,"props":2689,"children":2690},{"style":141},[2691],{"type":59,"value":1215},{"type":53,"tag":107,"props":2693,"children":2694},{"style":1042},[2695],{"type":59,"value":1220},{"type":53,"tag":107,"props":2697,"children":2698},{"style":124},[2699],{"type":59,"value":2540},{"type":53,"tag":107,"props":2701,"children":2702},{"style":1268},[2703],{"type":59,"value":1271},{"type":53,"tag":107,"props":2705,"children":2706},{"style":427},[2707],{"type":59,"value":2602},{"type":53,"tag":107,"props":2709,"children":2710},{"style":141},[2711],{"type":59,"value":2712},",",{"type":53,"tag":107,"props":2714,"children":2715},{"style":427},[2716],{"type":59,"value":2631},{"type":53,"tag":107,"props":2718,"children":2719},{"style":1268},[2720],{"type":59,"value":1153},{"type":53,"tag":107,"props":2722,"children":2723},{"style":141},[2724],{"type":59,"value":1082},{"type":53,"tag":107,"props":2726,"children":2727},{"class":109,"line":348},[2728,2733,2738,2742,2747,2752],{"type":53,"tag":107,"props":2729,"children":2730},{"style":1042},[2731],{"type":59,"value":2732},"  if",{"type":53,"tag":107,"props":2734,"children":2735},{"style":1268},[2736],{"type":59,"value":2737}," (",{"type":53,"tag":107,"props":2739,"children":2740},{"style":141},[2741],{"type":59,"value":1148},{"type":53,"tag":107,"props":2743,"children":2744},{"style":427},[2745],{"type":59,"value":2746},"isValid",{"type":53,"tag":107,"props":2748,"children":2749},{"style":1268},[2750],{"type":59,"value":2751},") ",{"type":53,"tag":107,"props":2753,"children":2754},{"style":141},[2755],{"type":59,"value":1948},{"type":53,"tag":107,"props":2757,"children":2758},{"class":109,"line":778},[2759,2764,2768,2772,2776,2780,2785,2790,2794,2798,2803,2807,2812,2816,2821,2825,2831,2835,2839],{"type":53,"tag":107,"props":2760,"children":2761},{"style":1042},[2762],{"type":59,"value":2763},"    return",{"type":53,"tag":107,"props":2765,"children":2766},{"style":427},[2767],{"type":59,"value":1256},{"type":53,"tag":107,"props":2769,"children":2770},{"style":141},[2771],{"type":59,"value":94},{"type":53,"tag":107,"props":2773,"children":2774},{"style":124},[2775],{"type":59,"value":1265},{"type":53,"tag":107,"props":2777,"children":2778},{"style":1268},[2779],{"type":59,"value":1271},{"type":53,"tag":107,"props":2781,"children":2782},{"style":141},[2783],{"type":59,"value":2784},"{",{"type":53,"tag":107,"props":2786,"children":2787},{"style":1268},[2788],{"type":59,"value":2789}," error",{"type":53,"tag":107,"props":2791,"children":2792},{"style":141},[2793],{"type":59,"value":1970},{"type":53,"tag":107,"props":2795,"children":2796},{"style":141},[2797],{"type":59,"value":154},{"type":53,"tag":107,"props":2799,"children":2800},{"style":130},[2801],{"type":59,"value":2802},"Invalid signature",{"type":53,"tag":107,"props":2804,"children":2805},{"style":141},[2806],{"type":59,"value":164},{"type":53,"tag":107,"props":2808,"children":2809},{"style":141},[2810],{"type":59,"value":2811}," },",{"type":53,"tag":107,"props":2813,"children":2814},{"style":141},[2815],{"type":59,"value":1050},{"type":53,"tag":107,"props":2817,"children":2818},{"style":1268},[2819],{"type":59,"value":2820}," status",{"type":53,"tag":107,"props":2822,"children":2823},{"style":141},[2824],{"type":59,"value":1970},{"type":53,"tag":107,"props":2826,"children":2828},{"style":2827},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2829],{"type":59,"value":2830}," 401",{"type":53,"tag":107,"props":2832,"children":2833},{"style":141},[2834],{"type":59,"value":1059},{"type":53,"tag":107,"props":2836,"children":2837},{"style":1268},[2838],{"type":59,"value":1153},{"type":53,"tag":107,"props":2840,"children":2841},{"style":141},[2842],{"type":59,"value":1082},{"type":53,"tag":107,"props":2844,"children":2845},{"class":109,"line":2247},[2846],{"type":53,"tag":107,"props":2847,"children":2848},{"style":141},[2849],{"type":59,"value":2850},"  }\n",{"type":53,"tag":107,"props":2852,"children":2853},{"class":109,"line":2290},[2854],{"type":53,"tag":107,"props":2855,"children":2856},{"emptyLinePlaceholder":193},[2857],{"type":59,"value":196},{"type":53,"tag":107,"props":2859,"children":2860},{"class":109,"line":2299},[2861,2866,2870,2875,2879,2884,2888],{"type":53,"tag":107,"props":2862,"children":2863},{"style":1042},[2864],{"type":59,"value":2865},"  switch",{"type":53,"tag":107,"props":2867,"children":2868},{"style":1268},[2869],{"type":59,"value":2737},{"type":53,"tag":107,"props":2871,"children":2872},{"style":427},[2873],{"type":59,"value":2874},"body",{"type":53,"tag":107,"props":2876,"children":2877},{"style":141},[2878],{"type":59,"value":94},{"type":53,"tag":107,"props":2880,"children":2881},{"style":427},[2882],{"type":59,"value":2883},"type",{"type":53,"tag":107,"props":2885,"children":2886},{"style":1268},[2887],{"type":59,"value":2751},{"type":53,"tag":107,"props":2889,"children":2890},{"style":141},[2891],{"type":59,"value":1948},{"type":53,"tag":107,"props":2893,"children":2894},{"class":109,"line":2336},[2895,2900,2904,2909,2913],{"type":53,"tag":107,"props":2896,"children":2897},{"style":1042},[2898],{"type":59,"value":2899},"    case",{"type":53,"tag":107,"props":2901,"children":2902},{"style":141},[2903],{"type":59,"value":154},{"type":53,"tag":107,"props":2905,"children":2906},{"style":130},[2907],{"type":59,"value":2908},"integration.installed",{"type":53,"tag":107,"props":2910,"children":2911},{"style":141},[2912],{"type":59,"value":164},{"type":53,"tag":107,"props":2914,"children":2915},{"style":141},[2916],{"type":59,"value":2917},":\n",{"type":53,"tag":107,"props":2919,"children":2920},{"class":109,"line":2362},[2921],{"type":53,"tag":107,"props":2922,"children":2923},{"style":114},[2924],{"type":59,"value":2925},"      \u002F\u002F Provision resources for the new installation\n",{"type":53,"tag":107,"props":2927,"children":2928},{"class":109,"line":2371},[2929,2934,2939,2943,2947,2951,2956,2960],{"type":53,"tag":107,"props":2930,"children":2931},{"style":1042},[2932],{"type":59,"value":2933},"      await",{"type":53,"tag":107,"props":2935,"children":2936},{"style":124},[2937],{"type":59,"value":2938}," provisionDatabase",{"type":53,"tag":107,"props":2940,"children":2941},{"style":1268},[2942],{"type":59,"value":1271},{"type":53,"tag":107,"props":2944,"children":2945},{"style":427},[2946],{"type":59,"value":2874},{"type":53,"tag":107,"props":2948,"children":2949},{"style":141},[2950],{"type":59,"value":94},{"type":53,"tag":107,"props":2952,"children":2953},{"style":427},[2954],{"type":59,"value":2955},"payload",{"type":53,"tag":107,"props":2957,"children":2958},{"style":1268},[2959],{"type":59,"value":1153},{"type":53,"tag":107,"props":2961,"children":2962},{"style":141},[2963],{"type":59,"value":1082},{"type":53,"tag":107,"props":2965,"children":2966},{"class":109,"line":2409},[2967,2972],{"type":53,"tag":107,"props":2968,"children":2969},{"style":1042},[2970],{"type":59,"value":2971},"      break",{"type":53,"tag":107,"props":2973,"children":2974},{"style":141},[2975],{"type":59,"value":1082},{"type":53,"tag":107,"props":2977,"children":2978},{"class":109,"line":2447},[2979],{"type":53,"tag":107,"props":2980,"children":2981},{"emptyLinePlaceholder":193},[2982],{"type":59,"value":196},{"type":53,"tag":107,"props":2984,"children":2985},{"class":109,"line":2480},[2986,2990,2994,2999,3003],{"type":53,"tag":107,"props":2987,"children":2988},{"style":1042},[2989],{"type":59,"value":2899},{"type":53,"tag":107,"props":2991,"children":2992},{"style":141},[2993],{"type":59,"value":154},{"type":53,"tag":107,"props":2995,"children":2996},{"style":130},[2997],{"type":59,"value":2998},"integration.uninstalled",{"type":53,"tag":107,"props":3000,"children":3001},{"style":141},[3002],{"type":59,"value":164},{"type":53,"tag":107,"props":3004,"children":3005},{"style":141},[3006],{"type":59,"value":2917},{"type":53,"tag":107,"props":3008,"children":3009},{"class":109,"line":2489},[3010],{"type":53,"tag":107,"props":3011,"children":3012},{"style":114},[3013],{"type":59,"value":3014},"      \u002F\u002F Clean up resources\n",{"type":53,"tag":107,"props":3016,"children":3017},{"class":109,"line":2498},[3018,3022,3027,3031,3035,3039,3043,3047],{"type":53,"tag":107,"props":3019,"children":3020},{"style":1042},[3021],{"type":59,"value":2933},{"type":53,"tag":107,"props":3023,"children":3024},{"style":124},[3025],{"type":59,"value":3026}," deprovisionDatabase",{"type":53,"tag":107,"props":3028,"children":3029},{"style":1268},[3030],{"type":59,"value":1271},{"type":53,"tag":107,"props":3032,"children":3033},{"style":427},[3034],{"type":59,"value":2874},{"type":53,"tag":107,"props":3036,"children":3037},{"style":141},[3038],{"type":59,"value":94},{"type":53,"tag":107,"props":3040,"children":3041},{"style":427},[3042],{"type":59,"value":2955},{"type":53,"tag":107,"props":3044,"children":3045},{"style":1268},[3046],{"type":59,"value":1153},{"type":53,"tag":107,"props":3048,"children":3049},{"style":141},[3050],{"type":59,"value":1082},{"type":53,"tag":107,"props":3052,"children":3054},{"class":109,"line":3053},22,[3055,3059],{"type":53,"tag":107,"props":3056,"children":3057},{"style":1042},[3058],{"type":59,"value":2971},{"type":53,"tag":107,"props":3060,"children":3061},{"style":141},[3062],{"type":59,"value":1082},{"type":53,"tag":107,"props":3064,"children":3066},{"class":109,"line":3065},23,[3067],{"type":53,"tag":107,"props":3068,"children":3069},{"emptyLinePlaceholder":193},[3070],{"type":59,"value":196},{"type":53,"tag":107,"props":3072,"children":3074},{"class":109,"line":3073},24,[3075,3079,3083,3088,3092],{"type":53,"tag":107,"props":3076,"children":3077},{"style":1042},[3078],{"type":59,"value":2899},{"type":53,"tag":107,"props":3080,"children":3081},{"style":141},[3082],{"type":59,"value":154},{"type":53,"tag":107,"props":3084,"children":3085},{"style":130},[3086],{"type":59,"value":3087},"integration.configuration-updated",{"type":53,"tag":107,"props":3089,"children":3090},{"style":141},[3091],{"type":59,"value":164},{"type":53,"tag":107,"props":3093,"children":3094},{"style":141},[3095],{"type":59,"value":2917},{"type":53,"tag":107,"props":3097,"children":3099},{"class":109,"line":3098},25,[3100],{"type":53,"tag":107,"props":3101,"children":3102},{"style":114},[3103],{"type":59,"value":3104},"      \u002F\u002F Handle config changes\n",{"type":53,"tag":107,"props":3106,"children":3108},{"class":109,"line":3107},26,[3109,3113,3118,3122,3126,3130,3134,3138],{"type":53,"tag":107,"props":3110,"children":3111},{"style":1042},[3112],{"type":59,"value":2933},{"type":53,"tag":107,"props":3114,"children":3115},{"style":124},[3116],{"type":59,"value":3117}," updateConfiguration",{"type":53,"tag":107,"props":3119,"children":3120},{"style":1268},[3121],{"type":59,"value":1271},{"type":53,"tag":107,"props":3123,"children":3124},{"style":427},[3125],{"type":59,"value":2874},{"type":53,"tag":107,"props":3127,"children":3128},{"style":141},[3129],{"type":59,"value":94},{"type":53,"tag":107,"props":3131,"children":3132},{"style":427},[3133],{"type":59,"value":2955},{"type":53,"tag":107,"props":3135,"children":3136},{"style":1268},[3137],{"type":59,"value":1153},{"type":53,"tag":107,"props":3139,"children":3140},{"style":141},[3141],{"type":59,"value":1082},{"type":53,"tag":107,"props":3143,"children":3145},{"class":109,"line":3144},27,[3146,3150],{"type":53,"tag":107,"props":3147,"children":3148},{"style":1042},[3149],{"type":59,"value":2971},{"type":53,"tag":107,"props":3151,"children":3152},{"style":141},[3153],{"type":59,"value":1082},{"type":53,"tag":107,"props":3155,"children":3157},{"class":109,"line":3156},28,[3158],{"type":53,"tag":107,"props":3159,"children":3160},{"style":141},[3161],{"type":59,"value":2850},{"type":53,"tag":107,"props":3163,"children":3165},{"class":109,"line":3164},29,[3166],{"type":53,"tag":107,"props":3167,"children":3168},{"emptyLinePlaceholder":193},[3169],{"type":59,"value":196},{"type":53,"tag":107,"props":3171,"children":3173},{"class":109,"line":3172},30,[3174,3178,3182,3186,3190,3194,3198,3203,3207,3213,3217,3221],{"type":53,"tag":107,"props":3175,"children":3176},{"style":1042},[3177],{"type":59,"value":1251},{"type":53,"tag":107,"props":3179,"children":3180},{"style":427},[3181],{"type":59,"value":1256},{"type":53,"tag":107,"props":3183,"children":3184},{"style":141},[3185],{"type":59,"value":94},{"type":53,"tag":107,"props":3187,"children":3188},{"style":124},[3189],{"type":59,"value":1265},{"type":53,"tag":107,"props":3191,"children":3192},{"style":1268},[3193],{"type":59,"value":1271},{"type":53,"tag":107,"props":3195,"children":3196},{"style":141},[3197],{"type":59,"value":2784},{"type":53,"tag":107,"props":3199,"children":3200},{"style":1268},[3201],{"type":59,"value":3202}," received",{"type":53,"tag":107,"props":3204,"children":3205},{"style":141},[3206],{"type":59,"value":1970},{"type":53,"tag":107,"props":3208,"children":3210},{"style":3209},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[3211],{"type":59,"value":3212}," true",{"type":53,"tag":107,"props":3214,"children":3215},{"style":141},[3216],{"type":59,"value":1059},{"type":53,"tag":107,"props":3218,"children":3219},{"style":1268},[3220],{"type":59,"value":1153},{"type":53,"tag":107,"props":3222,"children":3223},{"style":141},[3224],{"type":59,"value":1082},{"type":53,"tag":107,"props":3226,"children":3228},{"class":109,"line":3227},31,[3229],{"type":53,"tag":107,"props":3230,"children":3231},{"style":141},[3232],{"type":59,"value":1292},{"type":53,"tag":75,"props":3234,"children":3236},{"id":3235},"provisioning-environment-variables",[3237],{"type":59,"value":3238},"Provisioning Environment Variables",{"type":53,"tag":96,"props":3240,"children":3242},{"className":1022,"code":3241,"language":1024,"meta":101,"style":101},"\u002F\u002F lib\u002Fprovision.ts\nasync function provisionEnvVars(\n  installationId: string,\n  projectId: string,\n  credentials: { url: string; token: string },\n) {\n  const response = await fetch(\n    `https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fintegrations\u002Finstallations\u002F${installationId}\u002Fenv`,\n    {\n      method: \"POST\",\n      headers: {\n        Authorization: `Bearer ${process.env.VERCEL_INTEGRATION_TOKEN}`,\n        \"Content-Type\": \"application\u002Fjson\",\n      },\n      body: JSON.stringify({\n        projectId,\n        envVars: [\n          {\n            key: \"MY_SERVICE_URL\",\n            value: credentials.url,\n            target: [\"production\", \"preview\", \"development\"],\n            type: \"encrypted\",\n          },\n          {\n            key: \"MY_SERVICE_TOKEN\",\n            value: credentials.token,\n            target: [\"production\", \"preview\", \"development\"],\n            type: \"secret\",\n          },\n        ],\n      }),\n    },\n  );\n\n  return response.json();\n}\n",[3243],{"type":53,"tag":87,"props":3244,"children":3245},{"__ignoreMap":101},[3246,3254,3276,3297,3317,3369,3380,3409,3450,3457,3486,3502,3559,3597,3605,3639,3651,3667,3675,3704,3734,3806,3835,3843,3850,3878,3906,3973,4001,4008,4020,4036,4045,4058,4066,4094],{"type":53,"tag":107,"props":3247,"children":3248},{"class":109,"line":110},[3249],{"type":53,"tag":107,"props":3250,"children":3251},{"style":114},[3252],{"type":59,"value":3253},"\u002F\u002F lib\u002Fprovision.ts\n",{"type":53,"tag":107,"props":3255,"children":3256},{"class":109,"line":120},[3257,3262,3266,3271],{"type":53,"tag":107,"props":3258,"children":3259},{"style":1103},[3260],{"type":59,"value":3261},"async",{"type":53,"tag":107,"props":3263,"children":3264},{"style":1103},[3265],{"type":59,"value":1182},{"type":53,"tag":107,"props":3267,"children":3268},{"style":124},[3269],{"type":59,"value":3270}," provisionEnvVars",{"type":53,"tag":107,"props":3272,"children":3273},{"style":141},[3274],{"type":59,"value":3275},"(\n",{"type":53,"tag":107,"props":3277,"children":3278},{"class":109,"line":39},[3279,3284,3288,3293],{"type":53,"tag":107,"props":3280,"children":3281},{"style":2599},[3282],{"type":59,"value":3283},"  installationId",{"type":53,"tag":107,"props":3285,"children":3286},{"style":141},[3287],{"type":59,"value":1970},{"type":53,"tag":107,"props":3289,"children":3290},{"style":212},[3291],{"type":59,"value":3292}," string",{"type":53,"tag":107,"props":3294,"children":3295},{"style":141},[3296],{"type":59,"value":1988},{"type":53,"tag":107,"props":3298,"children":3299},{"class":109,"line":199},[3300,3305,3309,3313],{"type":53,"tag":107,"props":3301,"children":3302},{"style":2599},[3303],{"type":59,"value":3304},"  projectId",{"type":53,"tag":107,"props":3306,"children":3307},{"style":141},[3308],{"type":59,"value":1970},{"type":53,"tag":107,"props":3310,"children":3311},{"style":212},[3312],{"type":59,"value":3292},{"type":53,"tag":107,"props":3314,"children":3315},{"style":141},[3316],{"type":59,"value":1988},{"type":53,"tag":107,"props":3318,"children":3319},{"class":109,"line":208},[3320,3325,3329,3333,3338,3342,3346,3351,3356,3360,3364],{"type":53,"tag":107,"props":3321,"children":3322},{"style":2599},[3323],{"type":59,"value":3324},"  credentials",{"type":53,"tag":107,"props":3326,"children":3327},{"style":141},[3328],{"type":59,"value":1970},{"type":53,"tag":107,"props":3330,"children":3331},{"style":141},[3332],{"type":59,"value":1050},{"type":53,"tag":107,"props":3334,"children":3335},{"style":1268},[3336],{"type":59,"value":3337}," url",{"type":53,"tag":107,"props":3339,"children":3340},{"style":141},[3341],{"type":59,"value":1970},{"type":53,"tag":107,"props":3343,"children":3344},{"style":212},[3345],{"type":59,"value":3292},{"type":53,"tag":107,"props":3347,"children":3348},{"style":141},[3349],{"type":59,"value":3350},";",{"type":53,"tag":107,"props":3352,"children":3353},{"style":1268},[3354],{"type":59,"value":3355}," token",{"type":53,"tag":107,"props":3357,"children":3358},{"style":141},[3359],{"type":59,"value":1970},{"type":53,"tag":107,"props":3361,"children":3362},{"style":212},[3363],{"type":59,"value":3292},{"type":53,"tag":107,"props":3365,"children":3366},{"style":141},[3367],{"type":59,"value":3368}," },\n",{"type":53,"tag":107,"props":3370,"children":3371},{"class":109,"line":306},[3372,3376],{"type":53,"tag":107,"props":3373,"children":3374},{"style":141},[3375],{"type":59,"value":1153},{"type":53,"tag":107,"props":3377,"children":3378},{"style":141},[3379],{"type":59,"value":1197},{"type":53,"tag":107,"props":3381,"children":3382},{"class":109,"line":331},[3383,3387,3392,3396,3400,3405],{"type":53,"tag":107,"props":3384,"children":3385},{"style":1103},[3386],{"type":59,"value":1205},{"type":53,"tag":107,"props":3388,"children":3389},{"style":427},[3390],{"type":59,"value":3391}," response",{"type":53,"tag":107,"props":3393,"children":3394},{"style":141},[3395],{"type":59,"value":1215},{"type":53,"tag":107,"props":3397,"children":3398},{"style":1042},[3399],{"type":59,"value":1220},{"type":53,"tag":107,"props":3401,"children":3402},{"style":124},[3403],{"type":59,"value":3404}," fetch",{"type":53,"tag":107,"props":3406,"children":3407},{"style":1268},[3408],{"type":59,"value":3275},{"type":53,"tag":107,"props":3410,"children":3411},{"class":109,"line":339},[3412,3417,3422,3427,3432,3437,3442,3446],{"type":53,"tag":107,"props":3413,"children":3414},{"style":141},[3415],{"type":59,"value":3416},"    `",{"type":53,"tag":107,"props":3418,"children":3419},{"style":130},[3420],{"type":59,"value":3421},"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fintegrations\u002Finstallations\u002F",{"type":53,"tag":107,"props":3423,"children":3424},{"style":141},[3425],{"type":59,"value":3426},"${",{"type":53,"tag":107,"props":3428,"children":3429},{"style":427},[3430],{"type":59,"value":3431},"installationId",{"type":53,"tag":107,"props":3433,"children":3434},{"style":141},[3435],{"type":59,"value":3436},"}",{"type":53,"tag":107,"props":3438,"children":3439},{"style":130},[3440],{"type":59,"value":3441},"\u002Fenv",{"type":53,"tag":107,"props":3443,"children":3444},{"style":141},[3445],{"type":59,"value":1230},{"type":53,"tag":107,"props":3447,"children":3448},{"style":141},[3449],{"type":59,"value":1988},{"type":53,"tag":107,"props":3451,"children":3452},{"class":109,"line":348},[3453],{"type":53,"tag":107,"props":3454,"children":3455},{"style":141},[3456],{"type":59,"value":2368},{"type":53,"tag":107,"props":3458,"children":3459},{"class":109,"line":778},[3460,3465,3469,3473,3478,3482],{"type":53,"tag":107,"props":3461,"children":3462},{"style":1268},[3463],{"type":59,"value":3464},"      method",{"type":53,"tag":107,"props":3466,"children":3467},{"style":141},[3468],{"type":59,"value":1970},{"type":53,"tag":107,"props":3470,"children":3471},{"style":141},[3472],{"type":59,"value":154},{"type":53,"tag":107,"props":3474,"children":3475},{"style":130},[3476],{"type":59,"value":3477},"POST",{"type":53,"tag":107,"props":3479,"children":3480},{"style":141},[3481],{"type":59,"value":164},{"type":53,"tag":107,"props":3483,"children":3484},{"style":141},[3485],{"type":59,"value":1988},{"type":53,"tag":107,"props":3487,"children":3488},{"class":109,"line":2247},[3489,3494,3498],{"type":53,"tag":107,"props":3490,"children":3491},{"style":1268},[3492],{"type":59,"value":3493},"      headers",{"type":53,"tag":107,"props":3495,"children":3496},{"style":141},[3497],{"type":59,"value":1970},{"type":53,"tag":107,"props":3499,"children":3500},{"style":141},[3501],{"type":59,"value":1197},{"type":53,"tag":107,"props":3503,"children":3504},{"class":109,"line":2290},[3505,3510,3514,3519,3524,3528,3533,3537,3541,3545,3550,3555],{"type":53,"tag":107,"props":3506,"children":3507},{"style":1268},[3508],{"type":59,"value":3509},"        Authorization",{"type":53,"tag":107,"props":3511,"children":3512},{"style":141},[3513],{"type":59,"value":1970},{"type":53,"tag":107,"props":3515,"children":3516},{"style":141},[3517],{"type":59,"value":3518}," `",{"type":53,"tag":107,"props":3520,"children":3521},{"style":130},[3522],{"type":59,"value":3523},"Bearer ",{"type":53,"tag":107,"props":3525,"children":3526},{"style":141},[3527],{"type":59,"value":3426},{"type":53,"tag":107,"props":3529,"children":3530},{"style":427},[3531],{"type":59,"value":3532},"process",{"type":53,"tag":107,"props":3534,"children":3535},{"style":141},[3536],{"type":59,"value":94},{"type":53,"tag":107,"props":3538,"children":3539},{"style":427},[3540],{"type":59,"value":1134},{"type":53,"tag":107,"props":3542,"children":3543},{"style":141},[3544],{"type":59,"value":94},{"type":53,"tag":107,"props":3546,"children":3547},{"style":427},[3548],{"type":59,"value":3549},"VERCEL_INTEGRATION_TOKEN",{"type":53,"tag":107,"props":3551,"children":3552},{"style":141},[3553],{"type":59,"value":3554},"}`",{"type":53,"tag":107,"props":3556,"children":3557},{"style":141},[3558],{"type":59,"value":1988},{"type":53,"tag":107,"props":3560,"children":3561},{"class":109,"line":2299},[3562,3567,3572,3576,3580,3584,3589,3593],{"type":53,"tag":107,"props":3563,"children":3564},{"style":141},[3565],{"type":59,"value":3566},"        \"",{"type":53,"tag":107,"props":3568,"children":3569},{"style":1268},[3570],{"type":59,"value":3571},"Content-Type",{"type":53,"tag":107,"props":3573,"children":3574},{"style":141},[3575],{"type":59,"value":164},{"type":53,"tag":107,"props":3577,"children":3578},{"style":141},[3579],{"type":59,"value":1970},{"type":53,"tag":107,"props":3581,"children":3582},{"style":141},[3583],{"type":59,"value":154},{"type":53,"tag":107,"props":3585,"children":3586},{"style":130},[3587],{"type":59,"value":3588},"application\u002Fjson",{"type":53,"tag":107,"props":3590,"children":3591},{"style":141},[3592],{"type":59,"value":164},{"type":53,"tag":107,"props":3594,"children":3595},{"style":141},[3596],{"type":59,"value":1988},{"type":53,"tag":107,"props":3598,"children":3599},{"class":109,"line":2336},[3600],{"type":53,"tag":107,"props":3601,"children":3602},{"style":141},[3603],{"type":59,"value":3604},"      },\n",{"type":53,"tag":107,"props":3606,"children":3607},{"class":109,"line":2362},[3608,3613,3617,3622,3626,3631,3635],{"type":53,"tag":107,"props":3609,"children":3610},{"style":1268},[3611],{"type":59,"value":3612},"      body",{"type":53,"tag":107,"props":3614,"children":3615},{"style":141},[3616],{"type":59,"value":1970},{"type":53,"tag":107,"props":3618,"children":3619},{"style":427},[3620],{"type":59,"value":3621}," JSON",{"type":53,"tag":107,"props":3623,"children":3624},{"style":141},[3625],{"type":59,"value":94},{"type":53,"tag":107,"props":3627,"children":3628},{"style":124},[3629],{"type":59,"value":3630},"stringify",{"type":53,"tag":107,"props":3632,"children":3633},{"style":1268},[3634],{"type":59,"value":1271},{"type":53,"tag":107,"props":3636,"children":3637},{"style":141},[3638],{"type":59,"value":1948},{"type":53,"tag":107,"props":3640,"children":3641},{"class":109,"line":2371},[3642,3647],{"type":53,"tag":107,"props":3643,"children":3644},{"style":427},[3645],{"type":59,"value":3646},"        projectId",{"type":53,"tag":107,"props":3648,"children":3649},{"style":141},[3650],{"type":59,"value":1988},{"type":53,"tag":107,"props":3652,"children":3653},{"class":109,"line":2409},[3654,3659,3663],{"type":53,"tag":107,"props":3655,"children":3656},{"style":1268},[3657],{"type":59,"value":3658},"        envVars",{"type":53,"tag":107,"props":3660,"children":3661},{"style":141},[3662],{"type":59,"value":1970},{"type":53,"tag":107,"props":3664,"children":3665},{"style":1268},[3666],{"type":59,"value":2359},{"type":53,"tag":107,"props":3668,"children":3669},{"class":109,"line":2447},[3670],{"type":53,"tag":107,"props":3671,"children":3672},{"style":141},[3673],{"type":59,"value":3674},"          {\n",{"type":53,"tag":107,"props":3676,"children":3677},{"class":109,"line":2480},[3678,3683,3687,3691,3696,3700],{"type":53,"tag":107,"props":3679,"children":3680},{"style":1268},[3681],{"type":59,"value":3682},"            key",{"type":53,"tag":107,"props":3684,"children":3685},{"style":141},[3686],{"type":59,"value":1970},{"type":53,"tag":107,"props":3688,"children":3689},{"style":141},[3690],{"type":59,"value":154},{"type":53,"tag":107,"props":3692,"children":3693},{"style":130},[3694],{"type":59,"value":3695},"MY_SERVICE_URL",{"type":53,"tag":107,"props":3697,"children":3698},{"style":141},[3699],{"type":59,"value":164},{"type":53,"tag":107,"props":3701,"children":3702},{"style":141},[3703],{"type":59,"value":1988},{"type":53,"tag":107,"props":3705,"children":3706},{"class":109,"line":2489},[3707,3712,3716,3721,3725,3730],{"type":53,"tag":107,"props":3708,"children":3709},{"style":1268},[3710],{"type":59,"value":3711},"            value",{"type":53,"tag":107,"props":3713,"children":3714},{"style":141},[3715],{"type":59,"value":1970},{"type":53,"tag":107,"props":3717,"children":3718},{"style":427},[3719],{"type":59,"value":3720}," credentials",{"type":53,"tag":107,"props":3722,"children":3723},{"style":141},[3724],{"type":59,"value":94},{"type":53,"tag":107,"props":3726,"children":3727},{"style":427},[3728],{"type":59,"value":3729},"url",{"type":53,"tag":107,"props":3731,"children":3732},{"style":141},[3733],{"type":59,"value":1988},{"type":53,"tag":107,"props":3735,"children":3736},{"class":109,"line":2498},[3737,3742,3746,3750,3754,3759,3763,3767,3771,3776,3780,3784,3788,3793,3797,3802],{"type":53,"tag":107,"props":3738,"children":3739},{"style":1268},[3740],{"type":59,"value":3741},"            target",{"type":53,"tag":107,"props":3743,"children":3744},{"style":141},[3745],{"type":59,"value":1970},{"type":53,"tag":107,"props":3747,"children":3748},{"style":1268},[3749],{"type":59,"value":2160},{"type":53,"tag":107,"props":3751,"children":3752},{"style":141},[3753],{"type":59,"value":164},{"type":53,"tag":107,"props":3755,"children":3756},{"style":130},[3757],{"type":59,"value":3758},"production",{"type":53,"tag":107,"props":3760,"children":3761},{"style":141},[3762],{"type":59,"value":164},{"type":53,"tag":107,"props":3764,"children":3765},{"style":141},[3766],{"type":59,"value":2712},{"type":53,"tag":107,"props":3768,"children":3769},{"style":141},[3770],{"type":59,"value":154},{"type":53,"tag":107,"props":3772,"children":3773},{"style":130},[3774],{"type":59,"value":3775},"preview",{"type":53,"tag":107,"props":3777,"children":3778},{"style":141},[3779],{"type":59,"value":164},{"type":53,"tag":107,"props":3781,"children":3782},{"style":141},[3783],{"type":59,"value":2712},{"type":53,"tag":107,"props":3785,"children":3786},{"style":141},[3787],{"type":59,"value":154},{"type":53,"tag":107,"props":3789,"children":3790},{"style":130},[3791],{"type":59,"value":3792},"development",{"type":53,"tag":107,"props":3794,"children":3795},{"style":141},[3796],{"type":59,"value":164},{"type":53,"tag":107,"props":3798,"children":3799},{"style":1268},[3800],{"type":59,"value":3801},"]",{"type":53,"tag":107,"props":3803,"children":3804},{"style":141},[3805],{"type":59,"value":1988},{"type":53,"tag":107,"props":3807,"children":3808},{"class":109,"line":3053},[3809,3814,3818,3822,3827,3831],{"type":53,"tag":107,"props":3810,"children":3811},{"style":1268},[3812],{"type":59,"value":3813},"            type",{"type":53,"tag":107,"props":3815,"children":3816},{"style":141},[3817],{"type":59,"value":1970},{"type":53,"tag":107,"props":3819,"children":3820},{"style":141},[3821],{"type":59,"value":154},{"type":53,"tag":107,"props":3823,"children":3824},{"style":130},[3825],{"type":59,"value":3826},"encrypted",{"type":53,"tag":107,"props":3828,"children":3829},{"style":141},[3830],{"type":59,"value":164},{"type":53,"tag":107,"props":3832,"children":3833},{"style":141},[3834],{"type":59,"value":1988},{"type":53,"tag":107,"props":3836,"children":3837},{"class":109,"line":3065},[3838],{"type":53,"tag":107,"props":3839,"children":3840},{"style":141},[3841],{"type":59,"value":3842},"          },\n",{"type":53,"tag":107,"props":3844,"children":3845},{"class":109,"line":3073},[3846],{"type":53,"tag":107,"props":3847,"children":3848},{"style":141},[3849],{"type":59,"value":3674},{"type":53,"tag":107,"props":3851,"children":3852},{"class":109,"line":3098},[3853,3857,3861,3865,3870,3874],{"type":53,"tag":107,"props":3854,"children":3855},{"style":1268},[3856],{"type":59,"value":3682},{"type":53,"tag":107,"props":3858,"children":3859},{"style":141},[3860],{"type":59,"value":1970},{"type":53,"tag":107,"props":3862,"children":3863},{"style":141},[3864],{"type":59,"value":154},{"type":53,"tag":107,"props":3866,"children":3867},{"style":130},[3868],{"type":59,"value":3869},"MY_SERVICE_TOKEN",{"type":53,"tag":107,"props":3871,"children":3872},{"style":141},[3873],{"type":59,"value":164},{"type":53,"tag":107,"props":3875,"children":3876},{"style":141},[3877],{"type":59,"value":1988},{"type":53,"tag":107,"props":3879,"children":3880},{"class":109,"line":3107},[3881,3885,3889,3893,3897,3902],{"type":53,"tag":107,"props":3882,"children":3883},{"style":1268},[3884],{"type":59,"value":3711},{"type":53,"tag":107,"props":3886,"children":3887},{"style":141},[3888],{"type":59,"value":1970},{"type":53,"tag":107,"props":3890,"children":3891},{"style":427},[3892],{"type":59,"value":3720},{"type":53,"tag":107,"props":3894,"children":3895},{"style":141},[3896],{"type":59,"value":94},{"type":53,"tag":107,"props":3898,"children":3899},{"style":427},[3900],{"type":59,"value":3901},"token",{"type":53,"tag":107,"props":3903,"children":3904},{"style":141},[3905],{"type":59,"value":1988},{"type":53,"tag":107,"props":3907,"children":3908},{"class":109,"line":3144},[3909,3913,3917,3921,3925,3929,3933,3937,3941,3945,3949,3953,3957,3961,3965,3969],{"type":53,"tag":107,"props":3910,"children":3911},{"style":1268},[3912],{"type":59,"value":3741},{"type":53,"tag":107,"props":3914,"children":3915},{"style":141},[3916],{"type":59,"value":1970},{"type":53,"tag":107,"props":3918,"children":3919},{"style":1268},[3920],{"type":59,"value":2160},{"type":53,"tag":107,"props":3922,"children":3923},{"style":141},[3924],{"type":59,"value":164},{"type":53,"tag":107,"props":3926,"children":3927},{"style":130},[3928],{"type":59,"value":3758},{"type":53,"tag":107,"props":3930,"children":3931},{"style":141},[3932],{"type":59,"value":164},{"type":53,"tag":107,"props":3934,"children":3935},{"style":141},[3936],{"type":59,"value":2712},{"type":53,"tag":107,"props":3938,"children":3939},{"style":141},[3940],{"type":59,"value":154},{"type":53,"tag":107,"props":3942,"children":3943},{"style":130},[3944],{"type":59,"value":3775},{"type":53,"tag":107,"props":3946,"children":3947},{"style":141},[3948],{"type":59,"value":164},{"type":53,"tag":107,"props":3950,"children":3951},{"style":141},[3952],{"type":59,"value":2712},{"type":53,"tag":107,"props":3954,"children":3955},{"style":141},[3956],{"type":59,"value":154},{"type":53,"tag":107,"props":3958,"children":3959},{"style":130},[3960],{"type":59,"value":3792},{"type":53,"tag":107,"props":3962,"children":3963},{"style":141},[3964],{"type":59,"value":164},{"type":53,"tag":107,"props":3966,"children":3967},{"style":1268},[3968],{"type":59,"value":3801},{"type":53,"tag":107,"props":3970,"children":3971},{"style":141},[3972],{"type":59,"value":1988},{"type":53,"tag":107,"props":3974,"children":3975},{"class":109,"line":3156},[3976,3980,3984,3988,3993,3997],{"type":53,"tag":107,"props":3977,"children":3978},{"style":1268},[3979],{"type":59,"value":3813},{"type":53,"tag":107,"props":3981,"children":3982},{"style":141},[3983],{"type":59,"value":1970},{"type":53,"tag":107,"props":3985,"children":3986},{"style":141},[3987],{"type":59,"value":154},{"type":53,"tag":107,"props":3989,"children":3990},{"style":130},[3991],{"type":59,"value":3992},"secret",{"type":53,"tag":107,"props":3994,"children":3995},{"style":141},[3996],{"type":59,"value":164},{"type":53,"tag":107,"props":3998,"children":3999},{"style":141},[4000],{"type":59,"value":1988},{"type":53,"tag":107,"props":4002,"children":4003},{"class":109,"line":3164},[4004],{"type":53,"tag":107,"props":4005,"children":4006},{"style":141},[4007],{"type":59,"value":3842},{"type":53,"tag":107,"props":4009,"children":4010},{"class":109,"line":3172},[4011,4016],{"type":53,"tag":107,"props":4012,"children":4013},{"style":1268},[4014],{"type":59,"value":4015},"        ]",{"type":53,"tag":107,"props":4017,"children":4018},{"style":141},[4019],{"type":59,"value":1988},{"type":53,"tag":107,"props":4021,"children":4022},{"class":109,"line":3227},[4023,4028,4032],{"type":53,"tag":107,"props":4024,"children":4025},{"style":141},[4026],{"type":59,"value":4027},"      }",{"type":53,"tag":107,"props":4029,"children":4030},{"style":1268},[4031],{"type":59,"value":1153},{"type":53,"tag":107,"props":4033,"children":4034},{"style":141},[4035],{"type":59,"value":1988},{"type":53,"tag":107,"props":4037,"children":4039},{"class":109,"line":4038},32,[4040],{"type":53,"tag":107,"props":4041,"children":4042},{"style":141},[4043],{"type":59,"value":4044},"    },\n",{"type":53,"tag":107,"props":4046,"children":4048},{"class":109,"line":4047},33,[4049,4054],{"type":53,"tag":107,"props":4050,"children":4051},{"style":1268},[4052],{"type":59,"value":4053},"  )",{"type":53,"tag":107,"props":4055,"children":4056},{"style":141},[4057],{"type":59,"value":1082},{"type":53,"tag":107,"props":4059,"children":4061},{"class":109,"line":4060},34,[4062],{"type":53,"tag":107,"props":4063,"children":4064},{"emptyLinePlaceholder":193},[4065],{"type":59,"value":196},{"type":53,"tag":107,"props":4067,"children":4069},{"class":109,"line":4068},35,[4070,4074,4078,4082,4086,4090],{"type":53,"tag":107,"props":4071,"children":4072},{"style":1042},[4073],{"type":59,"value":1251},{"type":53,"tag":107,"props":4075,"children":4076},{"style":427},[4077],{"type":59,"value":3391},{"type":53,"tag":107,"props":4079,"children":4080},{"style":141},[4081],{"type":59,"value":94},{"type":53,"tag":107,"props":4083,"children":4084},{"style":124},[4085],{"type":59,"value":1265},{"type":53,"tag":107,"props":4087,"children":4088},{"style":1268},[4089],{"type":59,"value":1192},{"type":53,"tag":107,"props":4091,"children":4092},{"style":141},[4093],{"type":59,"value":1082},{"type":53,"tag":107,"props":4095,"children":4097},{"class":109,"line":4096},36,[4098],{"type":53,"tag":107,"props":4099,"children":4100},{"style":141},[4101],{"type":59,"value":1292},{"type":53,"tag":75,"props":4103,"children":4105},{"id":4104},"integration-cli-commands",[4106],{"type":59,"value":4107},"Integration CLI Commands",{"type":53,"tag":62,"props":4109,"children":4110},{},[4111,4113,4119],{"type":59,"value":4112},"The ",{"type":53,"tag":87,"props":4114,"children":4116},{"className":4115},[],[4117],{"type":59,"value":4118},"vercel integration",{"type":59,"value":4120}," CLI supports these subcommands:",{"type":53,"tag":96,"props":4122,"children":4124},{"className":98,"code":4123,"language":100,"meta":101,"style":101},"# Discover integrations in the Marketplace catalog\nvercel integration discover\nvercel integration discover --category \u003Ccategory>\n\n# Get agent-friendly setup guide\nvercel integration guide \u003Cname>\nvercel integration guide \u003Cname> --framework \u003Cframework>\n\n# Add (install) an integration\nvercel integration add \u003Cname>\n\n# List installed integrations\nvercel integration list    # alias: vercel integration ls\n\n# Check usage \u002F billing balance\nvercel integration balance \u003Cname>\n\n# Open integration dashboard in browser (fallback when add redirects)\nvercel integration open \u003Cname>\n\n# Remove an integration\nvercel integration remove \u003Cname>\n",[4125],{"type":53,"tag":87,"props":4126,"children":4127},{"__ignoreMap":101},[4128,4136,4151,4188,4195,4203,4234,4287,4294,4302,4333,4340,4347,4368,4375,4383,4414,4421,4429,4460,4467,4474],{"type":53,"tag":107,"props":4129,"children":4130},{"class":109,"line":110},[4131],{"type":53,"tag":107,"props":4132,"children":4133},{"style":114},[4134],{"type":59,"value":4135},"# Discover integrations in the Marketplace catalog\n",{"type":53,"tag":107,"props":4137,"children":4138},{"class":109,"line":120},[4139,4143,4147],{"type":53,"tag":107,"props":4140,"children":4141},{"style":212},[4142],{"type":59,"value":14},{"type":53,"tag":107,"props":4144,"children":4145},{"style":130},[4146],{"type":59,"value":257},{"type":53,"tag":107,"props":4148,"children":4149},{"style":130},[4150],{"type":59,"value":262},{"type":53,"tag":107,"props":4152,"children":4153},{"class":109,"line":39},[4154,4158,4162,4166,4170,4174,4179,4184],{"type":53,"tag":107,"props":4155,"children":4156},{"style":212},[4157],{"type":59,"value":14},{"type":53,"tag":107,"props":4159,"children":4160},{"style":130},[4161],{"type":59,"value":257},{"type":53,"tag":107,"props":4163,"children":4164},{"style":130},[4165],{"type":59,"value":293},{"type":53,"tag":107,"props":4167,"children":4168},{"style":130},[4169],{"type":59,"value":298},{"type":53,"tag":107,"props":4171,"children":4172},{"style":141},[4173],{"type":59,"value":419},{"type":53,"tag":107,"props":4175,"children":4176},{"style":130},[4177],{"type":59,"value":4178},"categor",{"type":53,"tag":107,"props":4180,"children":4181},{"style":427},[4182],{"type":59,"value":4183},"y",{"type":53,"tag":107,"props":4185,"children":4186},{"style":141},[4187],{"type":59,"value":435},{"type":53,"tag":107,"props":4189,"children":4190},{"class":109,"line":199},[4191],{"type":53,"tag":107,"props":4192,"children":4193},{"emptyLinePlaceholder":193},[4194],{"type":59,"value":196},{"type":53,"tag":107,"props":4196,"children":4197},{"class":109,"line":208},[4198],{"type":53,"tag":107,"props":4199,"children":4200},{"style":114},[4201],{"type":59,"value":4202},"# Get agent-friendly setup guide\n",{"type":53,"tag":107,"props":4204,"children":4205},{"class":109,"line":306},[4206,4210,4214,4218,4222,4226,4230],{"type":53,"tag":107,"props":4207,"children":4208},{"style":212},[4209],{"type":59,"value":14},{"type":53,"tag":107,"props":4211,"children":4212},{"style":130},[4213],{"type":59,"value":257},{"type":53,"tag":107,"props":4215,"children":4216},{"style":130},[4217],{"type":59,"value":414},{"type":53,"tag":107,"props":4219,"children":4220},{"style":141},[4221],{"type":59,"value":419},{"type":53,"tag":107,"props":4223,"children":4224},{"style":130},[4225],{"type":59,"value":424},{"type":53,"tag":107,"props":4227,"children":4228},{"style":427},[4229],{"type":59,"value":430},{"type":53,"tag":107,"props":4231,"children":4232},{"style":141},[4233],{"type":59,"value":435},{"type":53,"tag":107,"props":4235,"children":4236},{"class":109,"line":331},[4237,4241,4245,4249,4253,4257,4261,4265,4269,4273,4278,4283],{"type":53,"tag":107,"props":4238,"children":4239},{"style":212},[4240],{"type":59,"value":14},{"type":53,"tag":107,"props":4242,"children":4243},{"style":130},[4244],{"type":59,"value":257},{"type":53,"tag":107,"props":4246,"children":4247},{"style":130},[4248],{"type":59,"value":414},{"type":53,"tag":107,"props":4250,"children":4251},{"style":141},[4252],{"type":59,"value":419},{"type":53,"tag":107,"props":4254,"children":4255},{"style":130},[4256],{"type":59,"value":424},{"type":53,"tag":107,"props":4258,"children":4259},{"style":427},[4260],{"type":59,"value":430},{"type":53,"tag":107,"props":4262,"children":4263},{"style":141},[4264],{"type":59,"value":482},{"type":53,"tag":107,"props":4266,"children":4267},{"style":130},[4268],{"type":59,"value":487},{"type":53,"tag":107,"props":4270,"children":4271},{"style":141},[4272],{"type":59,"value":419},{"type":53,"tag":107,"props":4274,"children":4275},{"style":130},[4276],{"type":59,"value":4277},"framewor",{"type":53,"tag":107,"props":4279,"children":4280},{"style":427},[4281],{"type":59,"value":4282},"k",{"type":53,"tag":107,"props":4284,"children":4285},{"style":141},[4286],{"type":59,"value":435},{"type":53,"tag":107,"props":4288,"children":4289},{"class":109,"line":339},[4290],{"type":53,"tag":107,"props":4291,"children":4292},{"emptyLinePlaceholder":193},[4293],{"type":59,"value":196},{"type":53,"tag":107,"props":4295,"children":4296},{"class":109,"line":348},[4297],{"type":53,"tag":107,"props":4298,"children":4299},{"style":114},[4300],{"type":59,"value":4301},"# Add (install) an integration\n",{"type":53,"tag":107,"props":4303,"children":4304},{"class":109,"line":778},[4305,4309,4313,4317,4321,4325,4329],{"type":53,"tag":107,"props":4306,"children":4307},{"style":212},[4308],{"type":59,"value":14},{"type":53,"tag":107,"props":4310,"children":4311},{"style":130},[4312],{"type":59,"value":257},{"type":53,"tag":107,"props":4314,"children":4315},{"style":130},[4316],{"type":59,"value":619},{"type":53,"tag":107,"props":4318,"children":4319},{"style":141},[4320],{"type":59,"value":419},{"type":53,"tag":107,"props":4322,"children":4323},{"style":130},[4324],{"type":59,"value":424},{"type":53,"tag":107,"props":4326,"children":4327},{"style":427},[4328],{"type":59,"value":430},{"type":53,"tag":107,"props":4330,"children":4331},{"style":141},[4332],{"type":59,"value":435},{"type":53,"tag":107,"props":4334,"children":4335},{"class":109,"line":2247},[4336],{"type":53,"tag":107,"props":4337,"children":4338},{"emptyLinePlaceholder":193},[4339],{"type":59,"value":196},{"type":53,"tag":107,"props":4341,"children":4342},{"class":109,"line":2290},[4343],{"type":53,"tag":107,"props":4344,"children":4345},{"style":114},[4346],{"type":59,"value":1557},{"type":53,"tag":107,"props":4348,"children":4349},{"class":109,"line":2299},[4350,4354,4358,4363],{"type":53,"tag":107,"props":4351,"children":4352},{"style":212},[4353],{"type":59,"value":14},{"type":53,"tag":107,"props":4355,"children":4356},{"style":130},[4357],{"type":59,"value":257},{"type":53,"tag":107,"props":4359,"children":4360},{"style":130},[4361],{"type":59,"value":4362}," list",{"type":53,"tag":107,"props":4364,"children":4365},{"style":114},[4366],{"type":59,"value":4367},"    # alias: vercel integration ls\n",{"type":53,"tag":107,"props":4369,"children":4370},{"class":109,"line":2336},[4371],{"type":53,"tag":107,"props":4372,"children":4373},{"emptyLinePlaceholder":193},[4374],{"type":59,"value":196},{"type":53,"tag":107,"props":4376,"children":4377},{"class":109,"line":2362},[4378],{"type":53,"tag":107,"props":4379,"children":4380},{"style":114},[4381],{"type":59,"value":4382},"# Check usage \u002F billing balance\n",{"type":53,"tag":107,"props":4384,"children":4385},{"class":109,"line":2371},[4386,4390,4394,4398,4402,4406,4410],{"type":53,"tag":107,"props":4387,"children":4388},{"style":212},[4389],{"type":59,"value":14},{"type":53,"tag":107,"props":4391,"children":4392},{"style":130},[4393],{"type":59,"value":257},{"type":53,"tag":107,"props":4395,"children":4396},{"style":130},[4397],{"type":59,"value":1603},{"type":53,"tag":107,"props":4399,"children":4400},{"style":141},[4401],{"type":59,"value":419},{"type":53,"tag":107,"props":4403,"children":4404},{"style":130},[4405],{"type":59,"value":424},{"type":53,"tag":107,"props":4407,"children":4408},{"style":427},[4409],{"type":59,"value":430},{"type":53,"tag":107,"props":4411,"children":4412},{"style":141},[4413],{"type":59,"value":435},{"type":53,"tag":107,"props":4415,"children":4416},{"class":109,"line":2409},[4417],{"type":53,"tag":107,"props":4418,"children":4419},{"emptyLinePlaceholder":193},[4420],{"type":59,"value":196},{"type":53,"tag":107,"props":4422,"children":4423},{"class":109,"line":2447},[4424],{"type":53,"tag":107,"props":4425,"children":4426},{"style":114},[4427],{"type":59,"value":4428},"# Open integration dashboard in browser (fallback when add redirects)\n",{"type":53,"tag":107,"props":4430,"children":4431},{"class":109,"line":2480},[4432,4436,4440,4444,4448,4452,4456],{"type":53,"tag":107,"props":4433,"children":4434},{"style":212},[4435],{"type":59,"value":14},{"type":53,"tag":107,"props":4437,"children":4438},{"style":130},[4439],{"type":59,"value":257},{"type":53,"tag":107,"props":4441,"children":4442},{"style":130},[4443],{"type":59,"value":839},{"type":53,"tag":107,"props":4445,"children":4446},{"style":141},[4447],{"type":59,"value":419},{"type":53,"tag":107,"props":4449,"children":4450},{"style":130},[4451],{"type":59,"value":424},{"type":53,"tag":107,"props":4453,"children":4454},{"style":427},[4455],{"type":59,"value":430},{"type":53,"tag":107,"props":4457,"children":4458},{"style":141},[4459],{"type":59,"value":435},{"type":53,"tag":107,"props":4461,"children":4462},{"class":109,"line":2489},[4463],{"type":53,"tag":107,"props":4464,"children":4465},{"emptyLinePlaceholder":193},[4466],{"type":59,"value":196},{"type":53,"tag":107,"props":4468,"children":4469},{"class":109,"line":2498},[4470],{"type":53,"tag":107,"props":4471,"children":4472},{"style":114},[4473],{"type":59,"value":1634},{"type":53,"tag":107,"props":4475,"children":4476},{"class":109,"line":3053},[4477,4481,4485,4489,4493,4497,4501],{"type":53,"tag":107,"props":4478,"children":4479},{"style":212},[4480],{"type":59,"value":14},{"type":53,"tag":107,"props":4482,"children":4483},{"style":130},[4484],{"type":59,"value":257},{"type":53,"tag":107,"props":4486,"children":4487},{"style":130},[4488],{"type":59,"value":1650},{"type":53,"tag":107,"props":4490,"children":4491},{"style":141},[4492],{"type":59,"value":419},{"type":53,"tag":107,"props":4494,"children":4495},{"style":130},[4496],{"type":59,"value":424},{"type":53,"tag":107,"props":4498,"children":4499},{"style":427},[4500],{"type":59,"value":430},{"type":53,"tag":107,"props":4502,"children":4503},{"style":141},[4504],{"type":59,"value":435},{"type":53,"tag":4506,"props":4507,"children":4508},"blockquote",{},[4509],{"type":53,"tag":62,"props":4510,"children":4511},{},[4512,4517,4519,4525,4527,4533,4535,4541],{"type":53,"tag":884,"props":4513,"children":4514},{},[4515],{"type":59,"value":4516},"Building integrations?",{"type":59,"value":4518}," Use ",{"type":53,"tag":87,"props":4520,"children":4522},{"className":4521},[],[4523],{"type":59,"value":4524},"npx create-vercel-integration",{"type":59,"value":4526}," to scaffold, then deploy your\nintegration app to Vercel normally with ",{"type":53,"tag":87,"props":4528,"children":4530},{"className":4529},[],[4531],{"type":59,"value":4532},"vercel --prod",{"type":59,"value":4534},". Publish to the Marketplace via the\n",{"type":53,"tag":369,"props":4536,"children":4538},{"href":41,"rel":4537},[373],[4539],{"type":59,"value":4540},"Vercel Partner Dashboard",{"type":59,"value":94},{"type":53,"tag":68,"props":4543,"children":4545},{"id":4544},"common-integration-categories",[4546],{"type":59,"value":4547},"Common Integration Categories",{"type":53,"tag":4549,"props":4550,"children":4551},"table",{},[4552,4576],{"type":53,"tag":4553,"props":4554,"children":4555},"thead",{},[4556],{"type":53,"tag":4557,"props":4558,"children":4559},"tr",{},[4560,4566,4571],{"type":53,"tag":4561,"props":4562,"children":4563},"th",{},[4564],{"type":59,"value":4565},"Category",{"type":53,"tag":4561,"props":4567,"children":4568},{},[4569],{"type":59,"value":4570},"Popular Integrations",{"type":53,"tag":4561,"props":4572,"children":4573},{},[4574],{"type":59,"value":4575},"Auto-Provisioned Env Vars",{"type":53,"tag":4577,"props":4578,"children":4579},"tbody",{},[4580,4610,4639,4668,4697,4726,4748,4770,4788,4817,4839,4868],{"type":53,"tag":4557,"props":4581,"children":4582},{},[4583,4589,4594],{"type":53,"tag":4584,"props":4585,"children":4586},"td",{},[4587],{"type":59,"value":4588},"Databases",{"type":53,"tag":4584,"props":4590,"children":4591},{},[4592],{"type":59,"value":4593},"Neon, Supabase, PlanetScale, MongoDB, Turso",{"type":53,"tag":4584,"props":4595,"children":4596},{},[4597,4602,4604],{"type":53,"tag":87,"props":4598,"children":4600},{"className":4599},[],[4601],{"type":59,"value":1143},{"type":59,"value":4603},", ",{"type":53,"tag":87,"props":4605,"children":4607},{"className":4606},[],[4608],{"type":59,"value":4609},"DATABASE_URL",{"type":53,"tag":4557,"props":4611,"children":4612},{},[4613,4618,4623],{"type":53,"tag":4584,"props":4614,"children":4615},{},[4616],{"type":59,"value":4617},"Cache\u002FKV",{"type":53,"tag":4584,"props":4619,"children":4620},{},[4621],{"type":59,"value":4622},"Upstash Redis",{"type":53,"tag":4584,"props":4624,"children":4625},{},[4626,4632,4633],{"type":53,"tag":87,"props":4627,"children":4629},{"className":4628},[],[4630],{"type":59,"value":4631},"KV_REST_API_URL",{"type":59,"value":4603},{"type":53,"tag":87,"props":4634,"children":4636},{"className":4635},[],[4637],{"type":59,"value":4638},"KV_REST_API_TOKEN",{"type":53,"tag":4557,"props":4640,"children":4641},{},[4642,4647,4652],{"type":53,"tag":4584,"props":4643,"children":4644},{},[4645],{"type":59,"value":4646},"Auth",{"type":53,"tag":4584,"props":4648,"children":4649},{},[4650],{"type":59,"value":4651},"Clerk, Auth0, Descope",{"type":53,"tag":4584,"props":4653,"children":4654},{},[4655,4661,4662],{"type":53,"tag":87,"props":4656,"children":4658},{"className":4657},[],[4659],{"type":59,"value":4660},"CLERK_SECRET_KEY",{"type":59,"value":4603},{"type":53,"tag":87,"props":4663,"children":4665},{"className":4664},[],[4666],{"type":59,"value":4667},"AUTH0_SECRET",{"type":53,"tag":4557,"props":4669,"children":4670},{},[4671,4676,4681],{"type":53,"tag":4584,"props":4672,"children":4673},{},[4674],{"type":59,"value":4675},"CMS",{"type":53,"tag":4584,"props":4677,"children":4678},{},[4679],{"type":59,"value":4680},"Sanity, Contentful, Storyblok, DatoCMS",{"type":53,"tag":4584,"props":4682,"children":4683},{},[4684,4690,4691],{"type":53,"tag":87,"props":4685,"children":4687},{"className":4686},[],[4688],{"type":59,"value":4689},"SANITY_PROJECT_ID",{"type":59,"value":4603},{"type":53,"tag":87,"props":4692,"children":4694},{"className":4693},[],[4695],{"type":59,"value":4696},"CONTENTFUL_TOKEN",{"type":53,"tag":4557,"props":4698,"children":4699},{},[4700,4705,4710],{"type":53,"tag":4584,"props":4701,"children":4702},{},[4703],{"type":59,"value":4704},"Monitoring",{"type":53,"tag":4584,"props":4706,"children":4707},{},[4708],{"type":59,"value":4709},"Datadog, Sentry, Checkly, New Relic",{"type":53,"tag":4584,"props":4711,"children":4712},{},[4713,4719,4720],{"type":53,"tag":87,"props":4714,"children":4716},{"className":4715},[],[4717],{"type":59,"value":4718},"SENTRY_DSN",{"type":59,"value":4603},{"type":53,"tag":87,"props":4721,"children":4723},{"className":4722},[],[4724],{"type":59,"value":4725},"DD_API_KEY",{"type":53,"tag":4557,"props":4727,"children":4728},{},[4729,4734,4739],{"type":53,"tag":4584,"props":4730,"children":4731},{},[4732],{"type":59,"value":4733},"Payments",{"type":53,"tag":4584,"props":4735,"children":4736},{},[4737],{"type":59,"value":4738},"Stripe",{"type":53,"tag":4584,"props":4740,"children":4741},{},[4742],{"type":53,"tag":87,"props":4743,"children":4745},{"className":4744},[],[4746],{"type":59,"value":4747},"STRIPE_SECRET_KEY",{"type":53,"tag":4557,"props":4749,"children":4750},{},[4751,4756,4761],{"type":53,"tag":4584,"props":4752,"children":4753},{},[4754],{"type":59,"value":4755},"Feature Flags",{"type":53,"tag":4584,"props":4757,"children":4758},{},[4759],{"type":59,"value":4760},"LaunchDarkly, Statsig, Hypertune",{"type":53,"tag":4584,"props":4762,"children":4763},{},[4764],{"type":53,"tag":87,"props":4765,"children":4767},{"className":4766},[],[4768],{"type":59,"value":4769},"LAUNCHDARKLY_SDK_KEY",{"type":53,"tag":4557,"props":4771,"children":4772},{},[4773,4778,4783],{"type":53,"tag":4584,"props":4774,"children":4775},{},[4776],{"type":59,"value":4777},"AI Agents & Services",{"type":53,"tag":4584,"props":4779,"children":4780},{},[4781],{"type":59,"value":4782},"CodeRabbit, Braintrust, Sourcery, Chatbase",{"type":53,"tag":4584,"props":4784,"children":4785},{},[4786],{"type":59,"value":4787},"varies by integration",{"type":53,"tag":4557,"props":4789,"children":4790},{},[4791,4796,4801],{"type":53,"tag":4584,"props":4792,"children":4793},{},[4794],{"type":59,"value":4795},"Video",{"type":53,"tag":4584,"props":4797,"children":4798},{},[4799],{"type":59,"value":4800},"Mux",{"type":53,"tag":4584,"props":4802,"children":4803},{},[4804,4810,4811],{"type":53,"tag":87,"props":4805,"children":4807},{"className":4806},[],[4808],{"type":59,"value":4809},"MUX_TOKEN_ID",{"type":59,"value":4603},{"type":53,"tag":87,"props":4812,"children":4814},{"className":4813},[],[4815],{"type":59,"value":4816},"MUX_TOKEN_SECRET",{"type":53,"tag":4557,"props":4818,"children":4819},{},[4820,4825,4830],{"type":53,"tag":4584,"props":4821,"children":4822},{},[4823],{"type":59,"value":4824},"Messaging",{"type":53,"tag":4584,"props":4826,"children":4827},{},[4828],{"type":59,"value":4829},"Resend, Knock, Novu",{"type":53,"tag":4584,"props":4831,"children":4832},{},[4833],{"type":53,"tag":87,"props":4834,"children":4836},{"className":4835},[],[4837],{"type":59,"value":4838},"RESEND_API_KEY",{"type":53,"tag":4557,"props":4840,"children":4841},{},[4842,4847,4852],{"type":53,"tag":4584,"props":4843,"children":4844},{},[4845],{"type":59,"value":4846},"Searching",{"type":53,"tag":4584,"props":4848,"children":4849},{},[4850],{"type":59,"value":4851},"Algolia, Meilisearch",{"type":53,"tag":4584,"props":4853,"children":4854},{},[4855,4861,4862],{"type":53,"tag":87,"props":4856,"children":4858},{"className":4857},[],[4859],{"type":59,"value":4860},"ALGOLIA_APP_ID",{"type":59,"value":4603},{"type":53,"tag":87,"props":4863,"children":4865},{"className":4864},[],[4866],{"type":59,"value":4867},"ALGOLIA_API_KEY",{"type":53,"tag":4557,"props":4869,"children":4870},{},[4871,4876,4881],{"type":53,"tag":4584,"props":4872,"children":4873},{},[4874],{"type":59,"value":4875},"Commerce",{"type":53,"tag":4584,"props":4877,"children":4878},{},[4879],{"type":59,"value":4880},"Shopify, Swell, BigCommerce",{"type":53,"tag":4584,"props":4882,"children":4883},{},[4884],{"type":53,"tag":87,"props":4885,"children":4887},{"className":4886},[],[4888],{"type":59,"value":4889},"SHOPIFY_ACCESS_TOKEN",{"type":53,"tag":68,"props":4891,"children":4893},{"id":4892},"observability-integration-path",[4894],{"type":59,"value":4895},"Observability Integration Path",{"type":53,"tag":62,"props":4897,"children":4898},{},[4899,4901,4906],{"type":59,"value":4900},"Marketplace observability integrations (Datadog, Sentry, Axiom, Honeycomb, etc.) connect to Vercel's ",{"type":53,"tag":884,"props":4902,"children":4903},{},[4904],{"type":59,"value":4905},"Drains",{"type":59,"value":4907}," system to receive telemetry. Understanding the data-type split is critical for correct setup.",{"type":53,"tag":75,"props":4909,"children":4911},{"id":4910},"data-type-split",[4912],{"type":59,"value":4913},"Data-Type Split",{"type":53,"tag":4549,"props":4915,"children":4916},{},[4917,4938],{"type":53,"tag":4553,"props":4918,"children":4919},{},[4920],{"type":53,"tag":4557,"props":4921,"children":4922},{},[4923,4928,4933],{"type":53,"tag":4561,"props":4924,"children":4925},{},[4926],{"type":59,"value":4927},"Data Type",{"type":53,"tag":4561,"props":4929,"children":4930},{},[4931],{"type":59,"value":4932},"Delivery Mechanism",{"type":53,"tag":4561,"props":4934,"children":4935},{},[4936],{"type":59,"value":4937},"Integration Setup",{"type":53,"tag":4577,"props":4939,"children":4940},{},[4941,4968,4989,5017],{"type":53,"tag":4557,"props":4942,"children":4943},{},[4944,4952,4957],{"type":53,"tag":4584,"props":4945,"children":4946},{},[4947],{"type":53,"tag":884,"props":4948,"children":4949},{},[4950],{"type":59,"value":4951},"Logs",{"type":53,"tag":4584,"props":4953,"children":4954},{},[4955],{"type":59,"value":4956},"Native drain (auto-configured by Marketplace install)",{"type":53,"tag":4584,"props":4958,"children":4959},{},[4960,4966],{"type":53,"tag":87,"props":4961,"children":4963},{"className":4962},[],[4964],{"type":59,"value":4965},"vercel integration add \u003Cvendor>",{"type":59,"value":4967}," auto-creates drain",{"type":53,"tag":4557,"props":4969,"children":4970},{},[4971,4979,4984],{"type":53,"tag":4584,"props":4972,"children":4973},{},[4974],{"type":53,"tag":884,"props":4975,"children":4976},{},[4977],{"type":59,"value":4978},"Traces",{"type":53,"tag":4584,"props":4980,"children":4981},{},[4982],{"type":59,"value":4983},"Native drain (OpenTelemetry-compatible)",{"type":53,"tag":4584,"props":4985,"children":4986},{},[4987],{"type":59,"value":4988},"Same — auto-configured on install",{"type":53,"tag":4557,"props":4990,"children":4991},{},[4992,5000,5005],{"type":53,"tag":4584,"props":4993,"children":4994},{},[4995],{"type":53,"tag":884,"props":4996,"children":4997},{},[4998],{"type":59,"value":4999},"Speed Insights",{"type":53,"tag":4584,"props":5001,"children":5002},{},[5003],{"type":59,"value":5004},"Custom drain endpoint only",{"type":53,"tag":4584,"props":5006,"children":5007},{},[5008,5010,5016],{"type":59,"value":5009},"Requires manual drain creation via REST API or Dashboard (",{"type":53,"tag":87,"props":5011,"children":5013},{"className":5012},[],[5014],{"type":59,"value":5015},"https:\u002F\u002Fvercel.com\u002Fdashboard\u002F{team}\u002F~\u002Fsettings\u002Flog-drains",{"type":59,"value":1153},{"type":53,"tag":4557,"props":5018,"children":5019},{},[5020,5028,5032],{"type":53,"tag":4584,"props":5021,"children":5022},{},[5023],{"type":53,"tag":884,"props":5024,"children":5025},{},[5026],{"type":59,"value":5027},"Web Analytics",{"type":53,"tag":4584,"props":5029,"children":5030},{},[5031],{"type":59,"value":5004},{"type":53,"tag":4584,"props":5033,"children":5034},{},[5035,5036,5041],{"type":59,"value":5009},{"type":53,"tag":87,"props":5037,"children":5039},{"className":5038},[],[5040],{"type":59,"value":5015},{"type":59,"value":1153},{"type":53,"tag":4506,"props":5043,"children":5044},{},[5045],{"type":53,"tag":62,"props":5046,"children":5047},{},[5048,5053,5055,5060,5062,5068],{"type":53,"tag":884,"props":5049,"children":5050},{},[5051],{"type":59,"value":5052},"Key distinction:",{"type":59,"value":5054}," When you install an observability vendor via the Marketplace, it auto-configures drains for ",{"type":53,"tag":884,"props":5056,"children":5057},{},[5058],{"type":59,"value":5059},"logs and traces",{"type":59,"value":5061}," only. Speed Insights and Web Analytics data require a separate, manually configured drain pointing to a custom endpoint. See ",{"type":53,"tag":87,"props":5063,"children":5065},{"className":5064},[],[5066],{"type":59,"value":5067},"⤳ skill: observability",{"type":59,"value":5069}," for drain setup details.",{"type":53,"tag":75,"props":5071,"children":5073},{"id":5072},"agentic-flow-observability-vendor-setup",[5074],{"type":59,"value":5075},"Agentic Flow: Observability Vendor Setup",{"type":53,"tag":62,"props":5077,"children":5078},{},[5079],{"type":59,"value":5080},"Follow this sequence when setting up an observability integration:",{"type":53,"tag":5082,"props":5083,"children":5085},"h4",{"id":5084},"_1-pick-vendor",[5086],{"type":59,"value":5087},"1. Pick Vendor",{"type":53,"tag":96,"props":5089,"children":5091},{"className":98,"code":5090,"language":100,"meta":101,"style":101},"# Discover observability integrations\nvercel integration discover --category monitoring\n\n# Get setup guide for chosen vendor\nvercel integration guide datadog\n",[5092],{"type":53,"tag":87,"props":5093,"children":5094},{"__ignoreMap":101},[5095,5103,5126,5133,5141],{"type":53,"tag":107,"props":5096,"children":5097},{"class":109,"line":110},[5098],{"type":53,"tag":107,"props":5099,"children":5100},{"style":114},[5101],{"type":59,"value":5102},"# Discover observability integrations\n",{"type":53,"tag":107,"props":5104,"children":5105},{"class":109,"line":120},[5106,5110,5114,5118,5122],{"type":53,"tag":107,"props":5107,"children":5108},{"style":212},[5109],{"type":59,"value":14},{"type":53,"tag":107,"props":5111,"children":5112},{"style":130},[5113],{"type":59,"value":257},{"type":53,"tag":107,"props":5115,"children":5116},{"style":130},[5117],{"type":59,"value":293},{"type":53,"tag":107,"props":5119,"children":5120},{"style":130},[5121],{"type":59,"value":298},{"type":53,"tag":107,"props":5123,"children":5124},{"style":130},[5125],{"type":59,"value":328},{"type":53,"tag":107,"props":5127,"children":5128},{"class":109,"line":39},[5129],{"type":53,"tag":107,"props":5130,"children":5131},{"emptyLinePlaceholder":193},[5132],{"type":59,"value":196},{"type":53,"tag":107,"props":5134,"children":5135},{"class":109,"line":199},[5136],{"type":53,"tag":107,"props":5137,"children":5138},{"style":114},[5139],{"type":59,"value":5140},"# Get setup guide for chosen vendor\n",{"type":53,"tag":107,"props":5142,"children":5143},{"class":109,"line":208},[5144,5148,5152,5156],{"type":53,"tag":107,"props":5145,"children":5146},{"style":212},[5147],{"type":59,"value":14},{"type":53,"tag":107,"props":5149,"children":5150},{"style":130},[5151],{"type":59,"value":257},{"type":53,"tag":107,"props":5153,"children":5154},{"style":130},[5155],{"type":59,"value":414},{"type":53,"tag":107,"props":5157,"children":5158},{"style":130},[5159],{"type":59,"value":1757},{"type":53,"tag":5082,"props":5161,"children":5163},{"id":5162},"_2-install-integration",[5164],{"type":59,"value":5165},"2. Install Integration",{"type":53,"tag":96,"props":5167,"children":5169},{"className":98,"code":5168,"language":100,"meta":101,"style":101},"# Install — auto-provisions env vars and creates log\u002Ftrace drains\nvercel integration add datadog\n",[5170],{"type":53,"tag":87,"props":5171,"children":5172},{"__ignoreMap":101},[5173,5181],{"type":53,"tag":107,"props":5174,"children":5175},{"class":109,"line":110},[5176],{"type":53,"tag":107,"props":5177,"children":5178},{"style":114},[5179],{"type":59,"value":5180},"# Install — auto-provisions env vars and creates log\u002Ftrace drains\n",{"type":53,"tag":107,"props":5182,"children":5183},{"class":109,"line":120},[5184,5188,5192,5196],{"type":53,"tag":107,"props":5185,"children":5186},{"style":212},[5187],{"type":59,"value":14},{"type":53,"tag":107,"props":5189,"children":5190},{"style":130},[5191],{"type":59,"value":257},{"type":53,"tag":107,"props":5193,"children":5194},{"style":130},[5195],{"type":59,"value":619},{"type":53,"tag":107,"props":5197,"children":5198},{"style":130},[5199],{"type":59,"value":1757},{"type":53,"tag":5082,"props":5201,"children":5203},{"id":5202},"_3-verify-drain-created",[5204],{"type":59,"value":5205},"3. Verify Drain Created",{"type":53,"tag":96,"props":5207,"children":5209},{"className":98,"code":5208,"language":100,"meta":101,"style":101},"# Confirm drain was auto-configured\ncurl -s -H \"Authorization: Bearer $VERCEL_TOKEN\" \\\n  \"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fdrains?teamId=$TEAM_ID\" | jq '.[] | {id, url, type, sources}'\n",[5210],{"type":53,"tag":87,"props":5211,"children":5212},{"__ignoreMap":101},[5213,5221,5262],{"type":53,"tag":107,"props":5214,"children":5215},{"class":109,"line":110},[5216],{"type":53,"tag":107,"props":5217,"children":5218},{"style":114},[5219],{"type":59,"value":5220},"# Confirm drain was auto-configured\n",{"type":53,"tag":107,"props":5222,"children":5223},{"class":109,"line":120},[5224,5229,5234,5239,5243,5248,5253,5257],{"type":53,"tag":107,"props":5225,"children":5226},{"style":212},[5227],{"type":59,"value":5228},"curl",{"type":53,"tag":107,"props":5230,"children":5231},{"style":130},[5232],{"type":59,"value":5233}," -s",{"type":53,"tag":107,"props":5235,"children":5236},{"style":130},[5237],{"type":59,"value":5238}," -H",{"type":53,"tag":107,"props":5240,"children":5241},{"style":141},[5242],{"type":59,"value":154},{"type":53,"tag":107,"props":5244,"children":5245},{"style":130},[5246],{"type":59,"value":5247},"Authorization: Bearer ",{"type":53,"tag":107,"props":5249,"children":5250},{"style":427},[5251],{"type":59,"value":5252},"$VERCEL_TOKEN",{"type":53,"tag":107,"props":5254,"children":5255},{"style":141},[5256],{"type":59,"value":164},{"type":53,"tag":107,"props":5258,"children":5259},{"style":427},[5260],{"type":59,"value":5261}," \\\n",{"type":53,"tag":107,"props":5263,"children":5264},{"class":109,"line":39},[5265,5269,5274,5279,5283,5288,5293,5298,5303],{"type":53,"tag":107,"props":5266,"children":5267},{"style":141},[5268],{"type":59,"value":1956},{"type":53,"tag":107,"props":5270,"children":5271},{"style":130},[5272],{"type":59,"value":5273},"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fdrains?teamId=",{"type":53,"tag":107,"props":5275,"children":5276},{"style":427},[5277],{"type":59,"value":5278},"$TEAM_ID",{"type":53,"tag":107,"props":5280,"children":5281},{"style":141},[5282],{"type":59,"value":164},{"type":53,"tag":107,"props":5284,"children":5285},{"style":141},[5286],{"type":59,"value":5287}," |",{"type":53,"tag":107,"props":5289,"children":5290},{"style":212},[5291],{"type":59,"value":5292}," jq",{"type":53,"tag":107,"props":5294,"children":5295},{"style":141},[5296],{"type":59,"value":5297}," '",{"type":53,"tag":107,"props":5299,"children":5300},{"style":130},[5301],{"type":59,"value":5302},".[] | {id, url, type, sources}",{"type":53,"tag":107,"props":5304,"children":5305},{"style":141},[5306],{"type":59,"value":5307},"'\n",{"type":53,"tag":62,"props":5309,"children":5310},{},[5311,5313,5318],{"type":59,"value":5312},"Check the response for a drain pointing to the vendor's ingestion endpoint. If no drain appears, the integration may need manual drain setup — see ",{"type":53,"tag":87,"props":5314,"children":5316},{"className":5315},[],[5317],{"type":59,"value":5067},{"type":59,"value":5319}," for REST API drain creation.",{"type":53,"tag":5082,"props":5321,"children":5323},{"id":5322},"_4-validate-endpoint",[5324],{"type":59,"value":5325},"4. Validate Endpoint",{"type":53,"tag":96,"props":5327,"children":5329},{"className":98,"code":5328,"language":100,"meta":101,"style":101},"# Send a test payload to the drain\ncurl -X POST -H \"Authorization: Bearer $VERCEL_TOKEN\" \\\n  \"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fdrains\u002F\u003Cdrain-id>\u002Ftest?teamId=$TEAM_ID\"\n",[5330],{"type":53,"tag":87,"props":5331,"children":5332},{"__ignoreMap":101},[5333,5341,5381],{"type":53,"tag":107,"props":5334,"children":5335},{"class":109,"line":110},[5336],{"type":53,"tag":107,"props":5337,"children":5338},{"style":114},[5339],{"type":59,"value":5340},"# Send a test payload to the drain\n",{"type":53,"tag":107,"props":5342,"children":5343},{"class":109,"line":120},[5344,5348,5353,5357,5361,5365,5369,5373,5377],{"type":53,"tag":107,"props":5345,"children":5346},{"style":212},[5347],{"type":59,"value":5228},{"type":53,"tag":107,"props":5349,"children":5350},{"style":130},[5351],{"type":59,"value":5352}," -X",{"type":53,"tag":107,"props":5354,"children":5355},{"style":130},[5356],{"type":59,"value":2592},{"type":53,"tag":107,"props":5358,"children":5359},{"style":130},[5360],{"type":59,"value":5238},{"type":53,"tag":107,"props":5362,"children":5363},{"style":141},[5364],{"type":59,"value":154},{"type":53,"tag":107,"props":5366,"children":5367},{"style":130},[5368],{"type":59,"value":5247},{"type":53,"tag":107,"props":5370,"children":5371},{"style":427},[5372],{"type":59,"value":5252},{"type":53,"tag":107,"props":5374,"children":5375},{"style":141},[5376],{"type":59,"value":164},{"type":53,"tag":107,"props":5378,"children":5379},{"style":427},[5380],{"type":59,"value":5261},{"type":53,"tag":107,"props":5382,"children":5383},{"class":109,"line":39},[5384,5388,5393,5397],{"type":53,"tag":107,"props":5385,"children":5386},{"style":141},[5387],{"type":59,"value":1956},{"type":53,"tag":107,"props":5389,"children":5390},{"style":130},[5391],{"type":59,"value":5392},"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fdrains\u002F\u003Cdrain-id>\u002Ftest?teamId=",{"type":53,"tag":107,"props":5394,"children":5395},{"style":427},[5396],{"type":59,"value":5278},{"type":53,"tag":107,"props":5398,"children":5399},{"style":141},[5400],{"type":59,"value":187},{"type":53,"tag":62,"props":5402,"children":5403},{},[5404],{"type":59,"value":5405},"Confirm the vendor dashboard shows the test event arriving.",{"type":53,"tag":5082,"props":5407,"children":5409},{"id":5408},"_5-smoke-log-check",[5410],{"type":59,"value":5411},"5. Smoke Log Check",{"type":53,"tag":96,"props":5413,"children":5415},{"className":98,"code":5414,"language":100,"meta":101,"style":101},"# Trigger a deployment and check logs flow through\nvercel logs \u003Cdeployment-url> --follow --since 5m\n\n# Check integration balance to confirm data is flowing\nvercel integration balance datadog\n",[5416],{"type":53,"tag":87,"props":5417,"children":5418},{"__ignoreMap":101},[5419,5427,5472,5479,5487],{"type":53,"tag":107,"props":5420,"children":5421},{"class":109,"line":110},[5422],{"type":53,"tag":107,"props":5423,"children":5424},{"style":114},[5425],{"type":59,"value":5426},"# Trigger a deployment and check logs flow through\n",{"type":53,"tag":107,"props":5428,"children":5429},{"class":109,"line":120},[5430,5434,5439,5443,5448,5453,5457,5462,5467],{"type":53,"tag":107,"props":5431,"children":5432},{"style":212},[5433],{"type":59,"value":14},{"type":53,"tag":107,"props":5435,"children":5436},{"style":130},[5437],{"type":59,"value":5438}," logs",{"type":53,"tag":107,"props":5440,"children":5441},{"style":141},[5442],{"type":59,"value":419},{"type":53,"tag":107,"props":5444,"children":5445},{"style":130},[5446],{"type":59,"value":5447},"deployment-ur",{"type":53,"tag":107,"props":5449,"children":5450},{"style":427},[5451],{"type":59,"value":5452},"l",{"type":53,"tag":107,"props":5454,"children":5455},{"style":141},[5456],{"type":59,"value":482},{"type":53,"tag":107,"props":5458,"children":5459},{"style":130},[5460],{"type":59,"value":5461}," --follow",{"type":53,"tag":107,"props":5463,"children":5464},{"style":130},[5465],{"type":59,"value":5466}," --since",{"type":53,"tag":107,"props":5468,"children":5469},{"style":130},[5470],{"type":59,"value":5471}," 5m\n",{"type":53,"tag":107,"props":5473,"children":5474},{"class":109,"line":39},[5475],{"type":53,"tag":107,"props":5476,"children":5477},{"emptyLinePlaceholder":193},[5478],{"type":59,"value":196},{"type":53,"tag":107,"props":5480,"children":5481},{"class":109,"line":199},[5482],{"type":53,"tag":107,"props":5483,"children":5484},{"style":114},[5485],{"type":59,"value":5486},"# Check integration balance to confirm data is flowing\n",{"type":53,"tag":107,"props":5488,"children":5489},{"class":109,"line":208},[5490,5494,5498,5502],{"type":53,"tag":107,"props":5491,"children":5492},{"style":212},[5493],{"type":59,"value":14},{"type":53,"tag":107,"props":5495,"children":5496},{"style":130},[5497],{"type":59,"value":257},{"type":53,"tag":107,"props":5499,"children":5500},{"style":130},[5501],{"type":59,"value":1603},{"type":53,"tag":107,"props":5503,"children":5504},{"style":130},[5505],{"type":59,"value":1757},{"type":53,"tag":62,"props":5507,"children":5508},{},[5509],{"type":59,"value":5510},"Verify that logs appear both in Vercel's runtime logs and in the vendor's dashboard.",{"type":53,"tag":4506,"props":5512,"children":5513},{},[5514],{"type":53,"tag":62,"props":5515,"children":5516},{},[5517,5522,5524,5529,5531,5537],{"type":53,"tag":884,"props":5518,"children":5519},{},[5520],{"type":59,"value":5521},"For drain payload formats and signature verification",{"type":59,"value":5523},", see ",{"type":53,"tag":87,"props":5525,"children":5527},{"className":5526},[],[5528],{"type":59,"value":5067},{"type":59,"value":5530}," — the Drains section covers JSON\u002FNDJSON schemas and ",{"type":53,"tag":87,"props":5532,"children":5534},{"className":5533},[],[5535],{"type":59,"value":5536},"x-vercel-signature",{"type":59,"value":5538}," HMAC-SHA1 verification.",{"type":53,"tag":75,"props":5540,"children":5542},{"id":5541},"speed-insights-web-analytics-drains",[5543],{"type":59,"value":5544},"Speed Insights + Web Analytics Drains",{"type":53,"tag":62,"props":5546,"children":5547},{},[5548],{"type":59,"value":5549},"For observability vendors that also want Speed Insights or Web Analytics data, configure a separate drain manually:",{"type":53,"tag":96,"props":5551,"children":5553},{"className":98,"code":5552,"language":100,"meta":101,"style":101},"# Create a drain for Speed Insights + Web Analytics\ncurl -X POST -H \"Authorization: Bearer $VERCEL_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  \"https:\u002F\u002Fapi.vercel.com\u002Fv1\u002Fdrains?teamId=$TEAM_ID\" \\\n  -d '{\n    \"url\": \"https:\u002F\u002Fyour-vendor-endpoint.example.com\u002Fvercel-analytics\",\n    \"type\": \"json\",\n    \"sources\": [\"lambda\"],\n    \"environments\": [\"production\"]\n  }'\n",[5554],{"type":53,"tag":87,"props":5555,"children":5556},{"__ignoreMap":101},[5557,5565,5604,5629,5652,5668,5676,5684,5692,5700],{"type":53,"tag":107,"props":5558,"children":5559},{"class":109,"line":110},[5560],{"type":53,"tag":107,"props":5561,"children":5562},{"style":114},[5563],{"type":59,"value":5564},"# Create a drain for Speed Insights + Web Analytics\n",{"type":53,"tag":107,"props":5566,"children":5567},{"class":109,"line":120},[5568,5572,5576,5580,5584,5588,5592,5596,5600],{"type":53,"tag":107,"props":5569,"children":5570},{"style":212},[5571],{"type":59,"value":5228},{"type":53,"tag":107,"props":5573,"children":5574},{"style":130},[5575],{"type":59,"value":5352},{"type":53,"tag":107,"props":5577,"children":5578},{"style":130},[5579],{"type":59,"value":2592},{"type":53,"tag":107,"props":5581,"children":5582},{"style":130},[5583],{"type":59,"value":5238},{"type":53,"tag":107,"props":5585,"children":5586},{"style":141},[5587],{"type":59,"value":154},{"type":53,"tag":107,"props":5589,"children":5590},{"style":130},[5591],{"type":59,"value":5247},{"type":53,"tag":107,"props":5593,"children":5594},{"style":427},[5595],{"type":59,"value":5252},{"type":53,"tag":107,"props":5597,"children":5598},{"style":141},[5599],{"type":59,"value":164},{"type":53,"tag":107,"props":5601,"children":5602},{"style":427},[5603],{"type":59,"value":5261},{"type":53,"tag":107,"props":5605,"children":5606},{"class":109,"line":39},[5607,5612,5616,5621,5625],{"type":53,"tag":107,"props":5608,"children":5609},{"style":130},[5610],{"type":59,"value":5611},"  -H",{"type":53,"tag":107,"props":5613,"children":5614},{"style":141},[5615],{"type":59,"value":154},{"type":53,"tag":107,"props":5617,"children":5618},{"style":130},[5619],{"type":59,"value":5620},"Content-Type: application\u002Fjson",{"type":53,"tag":107,"props":5622,"children":5623},{"style":141},[5624],{"type":59,"value":164},{"type":53,"tag":107,"props":5626,"children":5627},{"style":427},[5628],{"type":59,"value":5261},{"type":53,"tag":107,"props":5630,"children":5631},{"class":109,"line":199},[5632,5636,5640,5644,5648],{"type":53,"tag":107,"props":5633,"children":5634},{"style":141},[5635],{"type":59,"value":1956},{"type":53,"tag":107,"props":5637,"children":5638},{"style":130},[5639],{"type":59,"value":5273},{"type":53,"tag":107,"props":5641,"children":5642},{"style":427},[5643],{"type":59,"value":5278},{"type":53,"tag":107,"props":5645,"children":5646},{"style":141},[5647],{"type":59,"value":164},{"type":53,"tag":107,"props":5649,"children":5650},{"style":427},[5651],{"type":59,"value":5261},{"type":53,"tag":107,"props":5653,"children":5654},{"class":109,"line":208},[5655,5660,5664],{"type":53,"tag":107,"props":5656,"children":5657},{"style":130},[5658],{"type":59,"value":5659},"  -d",{"type":53,"tag":107,"props":5661,"children":5662},{"style":141},[5663],{"type":59,"value":5297},{"type":53,"tag":107,"props":5665,"children":5666},{"style":130},[5667],{"type":59,"value":1948},{"type":53,"tag":107,"props":5669,"children":5670},{"class":109,"line":306},[5671],{"type":53,"tag":107,"props":5672,"children":5673},{"style":130},[5674],{"type":59,"value":5675},"    \"url\": \"https:\u002F\u002Fyour-vendor-endpoint.example.com\u002Fvercel-analytics\",\n",{"type":53,"tag":107,"props":5677,"children":5678},{"class":109,"line":331},[5679],{"type":53,"tag":107,"props":5680,"children":5681},{"style":130},[5682],{"type":59,"value":5683},"    \"type\": \"json\",\n",{"type":53,"tag":107,"props":5685,"children":5686},{"class":109,"line":339},[5687],{"type":53,"tag":107,"props":5688,"children":5689},{"style":130},[5690],{"type":59,"value":5691},"    \"sources\": [\"lambda\"],\n",{"type":53,"tag":107,"props":5693,"children":5694},{"class":109,"line":348},[5695],{"type":53,"tag":107,"props":5696,"children":5697},{"style":130},[5698],{"type":59,"value":5699},"    \"environments\": [\"production\"]\n",{"type":53,"tag":107,"props":5701,"children":5702},{"class":109,"line":778},[5703,5708],{"type":53,"tag":107,"props":5704,"children":5705},{"style":130},[5706],{"type":59,"value":5707},"  }",{"type":53,"tag":107,"props":5709,"children":5710},{"style":141},[5711],{"type":59,"value":5307},{"type":53,"tag":4506,"props":5713,"children":5714},{},[5715],{"type":53,"tag":62,"props":5716,"children":5717},{},[5718,5723,5725,5730,5732,5738],{"type":53,"tag":884,"props":5719,"children":5720},{},[5721],{"type":59,"value":5722},"Payload schema reference:",{"type":59,"value":5724}," See ",{"type":53,"tag":87,"props":5726,"children":5728},{"className":5727},[],[5729],{"type":59,"value":5067},{"type":59,"value":5731}," for Web Analytics drain payload formats (JSON array of ",{"type":53,"tag":87,"props":5733,"children":5735},{"className":5734},[],[5736],{"type":59,"value":5737},"{type, url, referrer, timestamp, geo, device}",{"type":59,"value":5739}," events).",{"type":53,"tag":68,"props":5741,"children":5743},{"id":5742},"decision-matrix",[5744],{"type":59,"value":5745},"Decision Matrix",{"type":53,"tag":4549,"props":5747,"children":5748},{},[5749,5770],{"type":53,"tag":4553,"props":5750,"children":5751},{},[5752],{"type":53,"tag":4557,"props":5753,"children":5754},{},[5755,5760,5765],{"type":53,"tag":4561,"props":5756,"children":5757},{},[5758],{"type":59,"value":5759},"Need",{"type":53,"tag":4561,"props":5761,"children":5762},{},[5763],{"type":59,"value":5764},"Use",{"type":53,"tag":4561,"props":5766,"children":5767},{},[5768],{"type":59,"value":5769},"Why",{"type":53,"tag":4577,"props":5771,"children":5772},{},[5773,5795,5817,5839,5861,5883,5901,5919,5937,5958,5976,6000],{"type":53,"tag":4557,"props":5774,"children":5775},{},[5776,5781,5790],{"type":53,"tag":4584,"props":5777,"children":5778},{},[5779],{"type":59,"value":5780},"Add a database to your project",{"type":53,"tag":4584,"props":5782,"children":5783},{},[5784],{"type":53,"tag":87,"props":5785,"children":5787},{"className":5786},[],[5788],{"type":59,"value":5789},"vercel integration add neon",{"type":53,"tag":4584,"props":5791,"children":5792},{},[5793],{"type":59,"value":5794},"Auto-provisioned, unified billing",{"type":53,"tag":4557,"props":5796,"children":5797},{},[5798,5803,5812],{"type":53,"tag":4584,"props":5799,"children":5800},{},[5801],{"type":59,"value":5802},"Browse available services",{"type":53,"tag":4584,"props":5804,"children":5805},{},[5806],{"type":53,"tag":87,"props":5807,"children":5809},{"className":5808},[],[5810],{"type":59,"value":5811},"vercel integration discover",{"type":53,"tag":4584,"props":5813,"children":5814},{},[5815],{"type":59,"value":5816},"CLI-native catalog search",{"type":53,"tag":4557,"props":5818,"children":5819},{},[5820,5825,5834],{"type":53,"tag":4584,"props":5821,"children":5822},{},[5823],{"type":59,"value":5824},"Get setup steps for an integration",{"type":53,"tag":4584,"props":5826,"children":5827},{},[5828],{"type":53,"tag":87,"props":5829,"children":5831},{"className":5830},[],[5832],{"type":59,"value":5833},"vercel integration guide \u003Cname> --framework \u003Cfw>",{"type":53,"tag":4584,"props":5835,"children":5836},{},[5837],{"type":59,"value":5838},"Framework-specific, agent-friendly setup guide",{"type":53,"tag":4557,"props":5840,"children":5841},{},[5842,5847,5856],{"type":53,"tag":4584,"props":5843,"children":5844},{},[5845],{"type":59,"value":5846},"CLI redirects to dashboard during install",{"type":53,"tag":4584,"props":5848,"children":5849},{},[5850],{"type":53,"tag":87,"props":5851,"children":5853},{"className":5852},[],[5854],{"type":59,"value":5855},"vercel integration open \u003Cname>",{"type":53,"tag":4584,"props":5857,"children":5858},{},[5859],{"type":59,"value":5860},"Fallback to complete provider web flow",{"type":53,"tag":4557,"props":5862,"children":5863},{},[5864,5869,5878],{"type":53,"tag":4584,"props":5865,"children":5866},{},[5867],{"type":59,"value":5868},"Check integration usage\u002Fcost",{"type":53,"tag":4584,"props":5870,"children":5871},{},[5872],{"type":53,"tag":87,"props":5873,"children":5875},{"className":5874},[],[5876],{"type":59,"value":5877},"vercel integration balance \u003Cname>",{"type":53,"tag":4584,"props":5879,"children":5880},{},[5881],{"type":59,"value":5882},"Billing visibility per integration",{"type":53,"tag":4557,"props":5884,"children":5885},{},[5886,5891,5896],{"type":53,"tag":4584,"props":5887,"children":5888},{},[5889],{"type":59,"value":5890},"Build a SaaS integration",{"type":53,"tag":4584,"props":5892,"children":5893},{},[5894],{"type":59,"value":5895},"Integration SDK + manifest",{"type":53,"tag":4584,"props":5897,"children":5898},{},[5899],{"type":59,"value":5900},"Full lifecycle management",{"type":53,"tag":4557,"props":5902,"children":5903},{},[5904,5909,5914],{"type":53,"tag":4584,"props":5905,"children":5906},{},[5907],{"type":59,"value":5908},"Centralize billing",{"type":53,"tag":4584,"props":5910,"children":5911},{},[5912],{"type":59,"value":5913},"Marketplace integrations",{"type":53,"tag":4584,"props":5915,"children":5916},{},[5917],{"type":59,"value":5918},"Single Vercel invoice",{"type":53,"tag":4557,"props":5920,"children":5921},{},[5922,5927,5932],{"type":53,"tag":4584,"props":5923,"children":5924},{},[5925],{"type":59,"value":5926},"Auto-inject credentials",{"type":53,"tag":4584,"props":5928,"children":5929},{},[5930],{"type":59,"value":5931},"Marketplace auto-provisioning",{"type":53,"tag":4584,"props":5933,"children":5934},{},[5935],{"type":59,"value":5936},"No manual env var management",{"type":53,"tag":4557,"props":5938,"children":5939},{},[5940,5945,5953],{"type":53,"tag":4584,"props":5941,"children":5942},{},[5943],{"type":59,"value":5944},"Add observability vendor",{"type":53,"tag":4584,"props":5946,"children":5947},{},[5948],{"type":53,"tag":87,"props":5949,"children":5951},{"className":5950},[],[5952],{"type":59,"value":4965},{"type":53,"tag":4584,"props":5954,"children":5955},{},[5956],{"type":59,"value":5957},"Auto-creates log\u002Ftrace drains",{"type":53,"tag":4557,"props":5959,"children":5960},{},[5961,5966,5971],{"type":53,"tag":4584,"props":5962,"children":5963},{},[5964],{"type":59,"value":5965},"Export Speed Insights \u002F Web Analytics",{"type":53,"tag":4584,"props":5967,"children":5968},{},[5969],{"type":59,"value":5970},"Manual drain via REST API",{"type":53,"tag":4584,"props":5972,"children":5973},{},[5974],{"type":59,"value":5975},"Not auto-configured by vendor install",{"type":53,"tag":4557,"props":5977,"children":5978},{},[5979,5984,5989],{"type":53,"tag":4584,"props":5980,"children":5981},{},[5982],{"type":59,"value":5983},"Manage integrations programmatically",{"type":53,"tag":4584,"props":5985,"children":5986},{},[5987],{"type":59,"value":5988},"Vercel REST API",{"type":53,"tag":4584,"props":5990,"children":5991},{},[5992,5998],{"type":53,"tag":87,"props":5993,"children":5995},{"className":5994},[],[5996],{"type":59,"value":5997},"\u002Fv1\u002Fintegrations",{"type":59,"value":5999}," endpoints",{"type":53,"tag":4557,"props":6001,"children":6002},{},[6003,6008,6017],{"type":53,"tag":4584,"props":6004,"children":6005},{},[6006],{"type":59,"value":6007},"Test integration locally",{"type":53,"tag":4584,"props":6009,"children":6010},{},[6011],{"type":53,"tag":87,"props":6012,"children":6014},{"className":6013},[],[6015],{"type":59,"value":6016},"vercel dev",{"type":53,"tag":4584,"props":6018,"children":6019},{},[6020],{"type":59,"value":6021},"Local development server with Vercel features",{"type":53,"tag":68,"props":6023,"children":6025},{"id":6024},"cross-references",[6026],{"type":59,"value":6027},"Cross-References",{"type":53,"tag":1679,"props":6029,"children":6030},{},[6031,6046,6061,6097,6112],{"type":53,"tag":1683,"props":6032,"children":6033},{},[6034,6039,6041],{"type":53,"tag":884,"props":6035,"children":6036},{},[6037],{"type":59,"value":6038},"Drain configuration, payload formats, signature verification",{"type":59,"value":6040}," → ",{"type":53,"tag":87,"props":6042,"children":6044},{"className":6043},[],[6045],{"type":59,"value":5067},{"type":53,"tag":1683,"props":6047,"children":6048},{},[6049,6054,6055],{"type":53,"tag":884,"props":6050,"children":6051},{},[6052],{"type":59,"value":6053},"Drains REST API endpoints",{"type":59,"value":6040},{"type":53,"tag":87,"props":6056,"children":6058},{"className":6057},[],[6059],{"type":59,"value":6060},"⤳ skill: vercel-api",{"type":53,"tag":1683,"props":6062,"children":6063},{},[6064,6090,6091],{"type":53,"tag":884,"props":6065,"children":6066},{},[6067,6069,6075,6076,6082,6083,6089],{"type":59,"value":6068},"CLI log streaming (",{"type":53,"tag":87,"props":6070,"children":6072},{"className":6071},[],[6073],{"type":59,"value":6074},"--follow",{"type":59,"value":4603},{"type":53,"tag":87,"props":6077,"children":6079},{"className":6078},[],[6080],{"type":59,"value":6081},"--since",{"type":59,"value":4603},{"type":53,"tag":87,"props":6084,"children":6086},{"className":6085},[],[6087],{"type":59,"value":6088},"--level",{"type":59,"value":1153},{"type":59,"value":6040},{"type":53,"tag":87,"props":6092,"children":6094},{"className":6093},[],[6095],{"type":59,"value":6096},"⤳ skill: vercel-cli",{"type":53,"tag":1683,"props":6098,"children":6099},{},[6100,6105,6106],{"type":53,"tag":884,"props":6101,"children":6102},{},[6103],{"type":59,"value":6104},"Safe project setup sequencing (link, env pull, then run db\u002Fdev)",{"type":59,"value":6040},{"type":53,"tag":87,"props":6107,"children":6109},{"className":6108},[],[6110],{"type":59,"value":6111},"⤳ skill:bootstrap",{"type":53,"tag":1683,"props":6113,"children":6114},{},[6115,6120,6121],{"type":53,"tag":884,"props":6116,"children":6117},{},[6118],{"type":59,"value":6119},"Headless CMS integrations (Sanity, Contentful)",{"type":59,"value":6040},{"type":53,"tag":87,"props":6122,"children":6124},{"className":6123},[],[6125],{"type":59,"value":6126},"⤳ skill:cms",{"type":53,"tag":68,"props":6128,"children":6130},{"id":6129},"official-documentation",[6131],{"type":59,"value":6132},"Official Documentation",{"type":53,"tag":1679,"props":6134,"children":6135},{},[6136,6144,6152,6162,6172,6182,6192],{"type":53,"tag":1683,"props":6137,"children":6138},{},[6139],{"type":53,"tag":369,"props":6140,"children":6142},{"href":371,"rel":6141},[373],[6143],{"type":59,"value":60},{"type":53,"tag":1683,"props":6145,"children":6146},{},[6147],{"type":53,"tag":369,"props":6148,"children":6150},{"href":41,"rel":6149},[373],[6151],{"type":59,"value":1782},{"type":53,"tag":1683,"props":6153,"children":6154},{},[6155],{"type":53,"tag":369,"props":6156,"children":6159},{"href":6157,"rel":6158},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fcli\u002Fintegration",[373],[6160],{"type":59,"value":6161},"Integration CLI",{"type":53,"tag":1683,"props":6163,"children":6164},{},[6165],{"type":53,"tag":369,"props":6166,"children":6169},{"href":6167,"rel":6168},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fintegrations#webhooks",[373],[6170],{"type":59,"value":6171},"Integration Webhooks",{"type":53,"tag":1683,"props":6173,"children":6174},{},[6175],{"type":53,"tag":369,"props":6176,"children":6179},{"href":6177,"rel":6178},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fenvironment-variables",[373],[6180],{"type":59,"value":6181},"Environment Variables",{"type":53,"tag":1683,"props":6183,"children":6184},{},[6185],{"type":53,"tag":369,"props":6186,"children":6189},{"href":6187,"rel":6188},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fdrains",[373],[6190],{"type":59,"value":6191},"Drains Overview",{"type":53,"tag":1683,"props":6193,"children":6194},{},[6195],{"type":53,"tag":369,"props":6196,"children":6199},{"href":6197,"rel":6198},"https:\u002F\u002Fvercel.com\u002Fdocs\u002Fdrains\u002Fsecurity",[373],[6200],{"type":59,"value":6201},"Drains Security",{"type":53,"tag":6203,"props":6204,"children":6205},"style",{},[6206],{"type":59,"value":6207},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":6209,"total":6327},[6210,6229,6245,6257,6277,6297,6317],{"slug":6211,"name":6211,"fn":6212,"description":6213,"org":6214,"tags":6215,"stars":25,"repoUrl":26,"updatedAt":6228},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6216,6219,6222,6225],{"name":6217,"slug":6218,"type":15},"Accessibility","accessibility",{"name":6220,"slug":6221,"type":15},"Charts","charts",{"name":6223,"slug":6224,"type":15},"Data Visualization","data-visualization",{"name":6226,"slug":6227,"type":15},"Design","design","2026-06-30T19:00:57.102",{"slug":6230,"name":6230,"fn":6231,"description":6232,"org":6233,"tags":6234,"stars":25,"repoUrl":26,"updatedAt":6244},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6235,6238,6241],{"name":6236,"slug":6237,"type":15},"Agents","agents",{"name":6239,"slug":6240,"type":15},"Browser Automation","browser-automation",{"name":6242,"slug":6243,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":6246,"name":6246,"fn":6247,"description":6248,"org":6249,"tags":6250,"stars":25,"repoUrl":26,"updatedAt":6256},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6251,6252,6255],{"name":6239,"slug":6240,"type":15},{"name":6253,"slug":6254,"type":15},"Local Development","local-development",{"name":6242,"slug":6243,"type":15},"2026-04-06T18:41:17.526867",{"slug":6258,"name":6258,"fn":6259,"description":6260,"org":6261,"tags":6262,"stars":25,"repoUrl":26,"updatedAt":6276},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6263,6264,6267,6270,6273],{"name":6236,"slug":6237,"type":15},{"name":6265,"slug":6266,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":6268,"slug":6269,"type":15},"SDK","sdk",{"name":6271,"slug":6272,"type":15},"Serverless","serverless",{"name":6274,"slug":6275,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":6278,"name":6278,"fn":6279,"description":6280,"org":6281,"tags":6282,"stars":25,"repoUrl":26,"updatedAt":6296},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6283,6286,6289,6292,6295],{"name":6284,"slug":6285,"type":15},"Frontend","frontend",{"name":6287,"slug":6288,"type":15},"React","react",{"name":6290,"slug":6291,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":6293,"slug":6294,"type":15},"UI Components","ui-components",{"name":13,"slug":14,"type":15},"2026-04-06T18:40:59.619419",{"slug":6298,"name":6298,"fn":6299,"description":6300,"org":6301,"tags":6302,"stars":25,"repoUrl":26,"updatedAt":6316},"ai-gateway","configure Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6303,6306,6309,6312,6315],{"name":6304,"slug":6305,"type":15},"AI Infrastructure","ai-infrastructure",{"name":6307,"slug":6308,"type":15},"Cost Optimization","cost-optimization",{"name":6310,"slug":6311,"type":15},"LLM","llm",{"name":6313,"slug":6314,"type":15},"Performance","performance",{"name":13,"slug":14,"type":15},"2026-04-06T18:40:44.377464",{"slug":6318,"name":6318,"fn":6319,"description":6320,"org":6321,"tags":6322,"stars":25,"repoUrl":26,"updatedAt":6326},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6323,6324,6325],{"name":6307,"slug":6308,"type":15},{"name":2436,"slug":2398,"type":15},{"name":6310,"slug":6311,"type":15},"2026-04-06T18:41:08.513425",600,{"items":6329,"total":6522},[6330,6351,6374,6391,6405,6420,6439,6451,6465,6479,6491,6506],{"slug":6331,"name":6331,"fn":6332,"description":6333,"org":6334,"tags":6335,"stars":6348,"repoUrl":6349,"updatedAt":6350},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6336,6339,6342,6345],{"name":6337,"slug":6338,"type":15},"Documents","documents",{"name":6340,"slug":6341,"type":15},"Healthcare","healthcare",{"name":6343,"slug":6344,"type":15},"Insurance","insurance",{"name":6346,"slug":6347,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":6352,"name":6352,"fn":6353,"description":6354,"org":6355,"tags":6356,"stars":6371,"repoUrl":6372,"updatedAt":6373},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6357,6360,6362,6365,6368],{"name":6358,"slug":6359,"type":15},".NET","dotnet",{"name":6361,"slug":6352,"type":15},"ASP.NET Core",{"name":6363,"slug":6364,"type":15},"Blazor","blazor",{"name":6366,"slug":6367,"type":15},"C#","csharp",{"name":6369,"slug":6370,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":6375,"name":6375,"fn":6376,"description":6377,"org":6378,"tags":6379,"stars":6371,"repoUrl":6372,"updatedAt":6390},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6380,6383,6386,6389],{"name":6381,"slug":6382,"type":15},"Apps SDK","apps-sdk",{"name":6384,"slug":6385,"type":15},"ChatGPT","chatgpt",{"name":6387,"slug":6388,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":6392,"name":6392,"fn":6393,"description":6394,"org":6395,"tags":6396,"stars":6371,"repoUrl":6372,"updatedAt":6404},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6397,6400,6401],{"name":6398,"slug":6399,"type":15},"API Development","api-development",{"name":20,"slug":21,"type":15},{"name":6402,"slug":6403,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":6406,"name":6406,"fn":6407,"description":6408,"org":6409,"tags":6410,"stars":6371,"repoUrl":6372,"updatedAt":6419},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6411,6414,6417,6418],{"name":6412,"slug":6413,"type":15},"Cloudflare","cloudflare",{"name":6415,"slug":6416,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":6265,"slug":6266,"type":15},{"name":23,"slug":24,"type":15},"2026-04-12T05:07:14.275118",{"slug":6421,"name":6421,"fn":6422,"description":6423,"org":6424,"tags":6425,"stars":6371,"repoUrl":6372,"updatedAt":6438},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6426,6429,6432,6435],{"name":6427,"slug":6428,"type":15},"Productivity","productivity",{"name":6430,"slug":6431,"type":15},"Project Management","project-management",{"name":6433,"slug":6434,"type":15},"Strategy","strategy",{"name":6436,"slug":6437,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":6440,"name":6440,"fn":6441,"description":6442,"org":6443,"tags":6444,"stars":6371,"repoUrl":6372,"updatedAt":6450},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6445,6446,6448,6449],{"name":6226,"slug":6227,"type":15},{"name":6447,"slug":6440,"type":15},"Figma",{"name":6284,"slug":6285,"type":15},{"name":6387,"slug":6388,"type":15},"2026-04-12T05:06:47.939943",{"slug":6452,"name":6452,"fn":6453,"description":6454,"org":6455,"tags":6456,"stars":6371,"repoUrl":6372,"updatedAt":6464},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6457,6458,6461,6462,6463],{"name":6226,"slug":6227,"type":15},{"name":6459,"slug":6460,"type":15},"Design System","design-system",{"name":6447,"slug":6440,"type":15},{"name":6284,"slug":6285,"type":15},{"name":6293,"slug":6294,"type":15},"2026-05-10T05:59:52.971881",{"slug":6466,"name":6466,"fn":6467,"description":6468,"org":6469,"tags":6470,"stars":6371,"repoUrl":6372,"updatedAt":6478},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6471,6472,6473,6476,6477],{"name":6226,"slug":6227,"type":15},{"name":6459,"slug":6460,"type":15},{"name":6474,"slug":6475,"type":15},"Documentation","documentation",{"name":6447,"slug":6440,"type":15},{"name":6284,"slug":6285,"type":15},"2026-05-16T06:07:47.821474",{"slug":6480,"name":6480,"fn":6481,"description":6482,"org":6483,"tags":6484,"stars":6371,"repoUrl":6372,"updatedAt":6490},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6485,6486,6487,6488,6489],{"name":6226,"slug":6227,"type":15},{"name":6447,"slug":6440,"type":15},{"name":6284,"slug":6285,"type":15},{"name":6293,"slug":6294,"type":15},{"name":6369,"slug":6370,"type":15},"2026-05-16T06:07:40.583615",{"slug":6492,"name":6492,"fn":6493,"description":6494,"org":6495,"tags":6496,"stars":6371,"repoUrl":6372,"updatedAt":6505},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6497,6500,6501,6504],{"name":6498,"slug":6499,"type":15},"Animation","animation",{"name":6402,"slug":6403,"type":15},{"name":6502,"slug":6503,"type":15},"Creative","creative",{"name":6226,"slug":6227,"type":15},"2026-05-02T05:31:48.48485",{"slug":6507,"name":6507,"fn":6508,"description":6509,"org":6510,"tags":6511,"stars":6371,"repoUrl":6372,"updatedAt":6521},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[6512,6513,6514,6517,6520],{"name":6502,"slug":6503,"type":15},{"name":6226,"slug":6227,"type":15},{"name":6515,"slug":6516,"type":15},"Image Generation","image-generation",{"name":6518,"slug":6519,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675]