v0 Platform API: Automate AI App Generation with REST API
Discover how to leverage v0's REST API for automated UI generation, custom app builders, and complete prompt-to-production workflows. Build your own AI-powered development tools.
API Interface
Setup Time
Usage Model
API Quota
Key Takeaways
Introduction to v0 Platform API
The v0 Platform API gives developers programmatic access to v0's AI-powered code generation, chat, project management, and deployment workflows. Rather than being limited to the web interface, you can integrate v0's capabilities directly into development tools, automation scripts, and custom applications. This enables powerful AI-driven development workflows for businesses looking to accelerate product delivery.
Core Capabilities
- Code generation from prompts: Generate React/Next.js apps via API
- Structured code parsing: Extract and process generated files
- Automatic error fixing: Built-in validation and correction
- Live preview URLs: Rendered previews of generated apps
Integration Points
- REST API: Standard HTTP endpoints for all operations
- TypeScript SDK: Official client library with type safety
- Deployment integration: Direct deployment to Vercel platform
- GitHub Actions: CI/CD pipeline integration support
The Complete Lifecycle
The v0 Platform API wraps the entire code generation lifecycle into a composable REST interface:
Getting Started with v0 API
Required Account
Create a v0 API key in account settings and monitor usage in the v0 dashboard. v0 currently lists Free, Premium, Team, Business, and Enterprise plans with monthly credits and token-metered usage, so verify current plan access before using the API in production.
Get Your API Key
Navigate to v0.app/chat/settings/keys to generate your API key. Store this securely—it provides full access to your v0 account.
Installation Options
1. Quick Start with create-v0-sdk-app
The fastest way to get started is using the official starter template:
pnpm create v0-sdk-app@latest my-v0-app
cd my-v0-app
pnpm install2. Manual SDK Installation
Install the v0 SDK in your existing project:
# Using pnpm (recommended)
pnpm add v0-sdk
# Using npm
npm install v0-sdk
# Using yarn
yarn add v0-sdk3. Environment Configuration
Set up your API key as an environment variable:
# .env.local
V0_API_KEY=your_api_key_here4. Basic Client Setup
Initialize the v0 client in your application:
import { createClient, v0 } from 'v0-sdk';
// Using environment variable (recommended)
const projects = await v0.projects.find();
// Or create a scoped client with explicit configuration
const client = createClient({
apiKey: process.env.V0_API_KEY,
baseUrl: 'https://api.v0.dev/v1'
});
console.log(projects.data);Core API Operations
The v0 Platform API provides two primary operation categories: chat management for code generation and deployment operations for publishing apps.
Create Chat - Generate Code from Prompts
Creates a new chat session using a user message, optional system context, and model configuration for prompting within a specific project scope.
const chat = await v0.chats.create({
message: 'Build a responsive pricing page with three tiers',
system: 'Use React, Tailwind CSS, and accessible shadcn/ui components.',
projectId: 'proj_abc123',
modelConfiguration: {
modelId: 'v0-auto'
}
});
// Response includes:
// - chat.id: Unique chat identifier
// - chat.webUrl: Open the chat in v0
// - chat.latestVersion: Current generated version
// - chat.latestVersion?.files: Generated filesInitialize Chat - Context-Rich Code Generation
Initializes a chat from source content such as files, repositories, registries, or zip archives for context-rich conversations.
// Initialize from GitHub repository
const repoChat = await v0.chats.init({
type: 'repo',
repo: {
url: 'https://github.com/user/repo',
branch: 'main'
},
initialContext: 'Add authentication to this Next.js app'
});
// Initialize from local files
const fileChat = await v0.chats.init({
type: 'files',
files: [
{ name: 'package.json', content: packageJson },
{ name: 'src/App.tsx', content: appCode }
],
initialContext: 'Refactor components to use TypeScript strict mode'
});Get Deployment - Retrieve Deployment Details
Returns comprehensive deployment information including inspector URL, chat ID, project ID, version ID, API URL, and web URL.
const deployment = await v0.deployments.getById({
deploymentId: 'dpl_xyz789'
});
// Access deployment URLs
const webUrl = deployment.webUrl; // Live app URL
const inspectorUrl = deployment.inspectorUrl; // Debug interface
const apiUrl = deployment.apiUrl; // API endpoint
// Deployment metadata
console.log({
chatId: deployment.chatId,
projectId: deployment.projectId,
versionId: deployment.versionId,
createdAt: deployment.createdAt
});Find Deployment Logs - Monitor Deployments
Retrieves logs for a specific deployment with support for filtering by timestamp, enabling real-time monitoring and debugging.
const logs = await v0.deployments.findLogs({
deploymentId: 'dpl_xyz789',
since: Math.floor((Date.now() - 3600000) / 1000) // Last hour
});
// Process logs
for (const log of logs.data ?? []) {
console.log(`[${log.timestamp}] ${log.level}: ${log.message}`);
if (log.level === 'error') {
// Handle deployment errors
await handleDeploymentError(log);
}
}Prompt-to-Deployment Workflow
The complete automation pipeline from natural language prompt to live deployed application. This workflow demonstrates the full power of the v0 Platform API.
import { v0 } from 'v0-sdk';
async function promptToDeployment(userPrompt: string) {
try {
// Step 1: Create project
console.log('Creating project...');
const project = await v0.projects.create({
name: 'AI Generated App'
});
// Step 2: Generate code from prompt
console.log('Generating code from prompt...');
const chat = await v0.chats.create({
message: userPrompt,
system: 'You are an expert React/Next.js developer. Generate production-ready code.',
projectId: project.id,
modelConfiguration: {
modelId: 'v0-auto'
}
});
// Step 3: Parse generated code
console.log('Parsing generated files...');
const files = chat.latestVersion?.files ?? [];
console.log(`Generated ${files.length} files`);
if (files.length === 0 || !chat.latestVersion?.id) {
throw new Error('v0 did not return deployable files yet.');
}
// Step 4: Create deployment from the latest chat version
console.log('Deploying to Vercel...');
const deployment = await v0.deployments.create({
chatId: chat.id,
projectId: project.id,
versionId: chat.latestVersion.id
});
console.log('Deployment created.');
return {
success: true,
webUrl: deployment.webUrl,
inspectorUrl: deployment.inspectorUrl,
chatId: chat.id,
projectId: project.id,
deploymentId: deployment.id,
files: files.map((file) => file.name)
};
} catch (error) {
console.error('Workflow failed:', error);
throw error;
}
}
// Usage
const result = await promptToDeployment(
'Build a modern landing page with hero section, features grid, testimonials, and contact form. Use Tailwind CSS and shadcn/ui components.'
);
console.log('Live URL:', result.webUrl);
console.log('Inspector:', result.inspectorUrl);
console.log('Generated files:', result.files);Custom Builder Patterns
The v0 Platform API enables building custom app builders, internal tools, and specialized workflows on top of v0's code generation capabilities. These patterns are especially valuable for agencies and businesses implementing CRM automation and custom business applications.
1. Website Builder Interface
Build a no-code website builder where users describe their sites and get production-ready code:
// Website builder API endpoint
app.post('/api/build-website', async (req, res) => {
const { description, industry, style } = req.body;
// Enhanced prompt engineering
const enhancedPrompt = `
Build a professional ${industry} website with the following requirements:
Description: ${description}
Style: ${style}
Requirements:
- Modern, responsive design
- Mobile-first approach
- SEO optimized
- Accessibility compliant (WCAG 2.1)
- Fast loading (Core Web Vitals optimized)
- shadcn/ui components
- Tailwind CSS styling
Include:
- Hero section with CTA
- Features/Services section
- About section
- Contact form
- Footer with links
`;
const chat = await v0.chats.create({
message: enhancedPrompt,
projectId: req.user.projectId
});
if (!chat.latestVersion?.id) {
throw new Error('No generated version available for deployment');
}
const deployment = await v0.deployments.create({
chatId: chat.id,
projectId: req.user.projectId,
versionId: chat.latestVersion.id
});
res.json({
previewUrl: deployment.webUrl,
editUrl: `https://v0.dev/chat/${chat.id}`,
files: chat.latestVersion.files
});
});2. Slack Bot Agent
Create a Slack bot that generates and deploys web apps from team conversations:
import { App } from '@slack/bolt';
import { v0 } from 'v0-sdk';
const slackApp = new App({
token: process.env.SLACK_BOT_TOKEN,
signingSecret: process.env.SLACK_SIGNING_SECRET
});
// Listen for /build-app command
slackApp.command('/build-app', async ({ command, ack, say }) => {
await ack();
await say('🚀 Building your app...');
const result = await promptToDeployment(command.text);
await say({
blocks: [
{
type: 'section',
text: {
type: 'mrkdwn',
text: '✅ *App deployed successfully!*'
}
},
{
type: 'section',
fields: [
{
type: 'mrkdwn',
text: `*Live URL:*\n<${result.webUrl}|${result.webUrl}>`
},
{
type: 'mrkdwn',
text: `*Edit in v0:*\n<https://v0.dev/chat/${result.chatId}|Open Editor>`
}
]
},
{
type: 'actions',
elements: [
{
type: 'button',
text: { type: 'plain_text', text: 'View Live App' },
url: result.webUrl
},
{
type: 'button',
text: { type: 'plain_text', text: 'Edit Code' },
url: `https://v0.dev/chat/${result.chatId}`
}
]
}
]
});
});
slackApp.start(3000);3. CRM Integration - Dynamic UI Generation
Embed v0's code generation into CRM or analytics tools for generating custom dashboards:
// Generate custom dashboard for CRM data
async function generateDashboard(dataSchema, metrics) {
const prompt = `
Create a professional analytics dashboard with:
Data Schema:
${JSON.stringify(dataSchema, null, 2)}
Metrics to Display:
${metrics.map(m => `- ${m.name}: ${m.description}`).join('\n')}
Requirements:
- Use Recharts for visualizations
- Responsive grid layout
- Real-time data updates
- Export to CSV functionality
- Filter and date range selectors
- shadcn/ui components
`;
const chat = await v0.chats.create({
message: prompt,
modelConfiguration: { modelId: 'v0-auto' }
});
// Extract component code
const dashboardComponent = chat.latestVersion?.files.find(
(file) => file.name.includes('dashboard')
);
return {
code: dashboardComponent?.content,
preview: chat.webUrl
};
}CLI Integration
Build command-line tools that leverage v0's API for developer workflow automation and rapid prototyping. Combined with modern web development practices, these CLI tools can dramatically accelerate your development process.
#!/usr/bin/env node
import { Command } from 'commander';
import { v0 } from 'v0-sdk';
import ora from 'ora';
import chalk from 'chalk';
const program = new Command();
program
.name('v0-cli')
.description('CLI tool for v0 Platform API')
.version('1.0.0');
program
.command('generate <prompt>')
.description('Generate code from a prompt')
.option('-d, --deploy', 'Deploy after generation')
.option('-o, --output <dir>', 'Output directory for files')
.action(async (prompt, options) => {
const spinner = ora('Generating code...').start();
try {
const chat = await v0.chats.create({
message: prompt,
modelConfiguration: { modelId: 'v0-auto' }
});
spinner.succeed('Code generated!');
// Save files locally
if (options.output) {
const fs = await import('fs/promises');
const path = await import('path');
for (const file of chat.latestVersion?.files ?? []) {
const filePath = `${options.output}/${file.name}`;
await fs.mkdir(path.dirname(filePath), { recursive: true });
await fs.writeFile(filePath, file.content);
}
console.log(chalk.green(`✓ Files saved to ${options.output}`));
}
// Deploy if requested
if (options.deploy) {
const deploySpinner = ora('Deploying...').start();
if (!chat.projectId || !chat.latestVersion?.id) {
throw new Error('Missing project or version for deployment');
}
const deployment = await v0.deployments.create({
chatId: chat.id,
projectId: chat.projectId,
versionId: chat.latestVersion.id
});
deploySpinner.succeed('Deployed!');
console.log(chalk.blue('🌐 Live URL:', deployment.webUrl));
console.log(chalk.gray('📝 Edit:', `https://v0.dev/chat/${chat.id}`));
}
} catch (error) {
spinner.fail('Generation failed');
console.error(chalk.red(error.message));
process.exit(1);
}
});
program
.command('deploy <chatId>')
.description('Deploy an existing chat')
.action(async (chatId) => {
const spinner = ora('Deploying...').start();
try {
throw new Error('Deploy requires projectId and versionId from a chat version');
} catch (error) {
spinner.fail('Deployment failed');
console.error(chalk.red(error.message));
}
});
program.parse();
// Usage:
// v0-cli generate "Build a blog with posts list and detail pages" --deploy
// v0-cli deploy chat_123abc --output ./my-appAutomate code generation and deployment in CI/CD pipelines:
# .github/workflows/v0-deploy.yml
name: V0 Auto Deploy
on:
issues:
types: [labeled]
jobs:
generate-and-deploy:
if: github.event.label.name == 'v0-generate'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
- name: Install dependencies
run: npm install v0-sdk
- name: Generate and Deploy
env:
V0_API_KEY: ${{ secrets.V0_API_KEY }}
run: |
node <<'EOF'
const { v0 } = require('v0-sdk');
async function deploy() {
const issueBody = process.env.GITHUB_EVENT_ISSUE_BODY;
const result = await promptToDeployment(issueBody);
// Comment on issue with results
await fetch(
`https://api.github.com/repos/${process.env.GITHUB_REPOSITORY}/issues/${process.env.GITHUB_EVENT_ISSUE_NUMBER}/comments`,
{
method: 'POST',
headers: {
'Authorization': `token ${process.env.GITHUB_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
body: `## ✅ Deployed!\n\n🌐 Live: ${result.webUrl}\n📝 Edit: https://v0.dev/chat/${result.chatId}`
})
}
);
}
deploy().catch(console.error);
EOFProduction Best Practices
- Implement retry logic
Use exponential backoff for rate limit errors
- Validate responses
Check for complete code generation before deployment
- Log all operations
Track chat IDs and deployment IDs for debugging
- Handle timeouts gracefully
Set appropriate timeouts for long-running generations
- Cache generated code
Store results to avoid duplicate generations
- Use hooks for chat/message workflows
Current hooks cover chat and message events; keep deployment polling separate
- Batch operations
Group multiple chat requests when possible
- Monitor credit usage
Track API consumption to optimize costs
import { createClient } from 'v0-sdk';
class V0ApiService {
private client = createClient({
apiKey: process.env.V0_API_KEY,
baseUrl: 'https://api.v0.dev/v1'
});
private maxRetries = 3;
async generateWithRetry(prompt: string, retryCount = 0): Promise<any> {
try {
const chat = await this.client.chats.create({
message: prompt,
modelConfiguration: { modelId: 'v0-auto' }
});
// Validate response
if (!chat.latestVersion?.files?.length) {
throw new Error('No code generated');
}
return chat;
} catch (error) {
const apiError = error as { status?: number; code?: string; message?: string };
if (apiError.status === 429 || apiError.code === 'rate_limit_exceeded') {
if (retryCount < this.maxRetries) {
const delay = Math.pow(2, retryCount) * 1000;
console.log(`Rate limited. Retrying in ${delay}ms...`);
await new Promise(resolve => setTimeout(resolve, delay));
return this.generateWithRetry(prompt, retryCount + 1);
}
}
// Log unexpected errors
console.error('V0 API Error:', {
error,
prompt: prompt.substring(0, 100),
retryCount,
timestamp: new Date().toISOString()
});
throw error;
}
}
async safeDeployment(projectId: string, chatId: string, versionId: string): Promise<any> {
try {
const deployment = await this.client.deployments.create({
projectId,
chatId,
versionId
});
return this.client.deployments.getById({
deploymentId: deployment.id
});
} catch (error) {
console.error('Deployment Error:', error);
throw error;
}
}
}Use Cases and Examples
Real-world applications developers are building with the v0 Platform API:
Generate UI components directly in your editor:
- • Select text describing a component
- • Right-click → "Generate with v0"
- • Component inserted at cursor position
- • Full TypeScript and import handling
Let non-technical users build websites:
- • Visual form for site requirements
- • Automatic prompt engineering
- • One-click deployment to custom domain
- • Built-in CMS for content updates
Generate custom dashboards from data schemas:
- • Connect to database
- • Define metrics and KPIs
- • Auto-generate visualization dashboard
- • Real-time data sync
Team collaboration with instant deployments:
- • /build-app command in chat
- • Natural language descriptions
- • Deployed app URL in response
- • Team sharing and iteration
Enterprise Use Cases
Internal Tools
Generate admin dashboards, data entry forms, and CRUD interfaces for internal operations teams without dedicated development resources.
Rapid Prototyping
Validate product ideas with functional prototypes in hours instead of weeks. Iterate based on user feedback before committing to full development.
Component Libraries
Build and maintain design systems by generating consistent, production-grade components that follow your brand guidelines and accessibility standards.
Client Deliverables
Agencies use v0 API to speed up client work: generate landing pages, marketing sites, and promotional microsites with consistent quality.
Ready to Automate with v0 Platform API?
At Digital Applied, we build custom AI development tools and automation workflows using the v0 Platform API. Transform your development process with API-driven code generation and unlock new efficiencies in your software delivery pipeline.
Frequently Asked Questions
Related Articles
Continue exploring AI-powered development and automation tools with these related guides