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
Starts At
Public Release
Key Takeaways
Introduction to v0 Platform API
The v0 Platform API, now in public beta, represents a fundamental shift in how developers can leverage AI-powered code generation. Rather than being limited to the web interface, you can now integrate v0's capabilities directly into your 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
Access to the v0 Platform API requires a v0 Premium plan ($20/month) or Team plan ($30/user/month) with usage-based billing enabled. The free tier does not include API access.
Get Your API Key
Navigate to v0.dev/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 { V0 } from 'v0-sdk';
// Using environment variable (recommended)
const client = new V0();
// Or with explicit API key
const client = new V0({
apiKey: process.env.V0_API_KEY
});
// Custom base URL for enterprise deployments
const enterpriseClient = new V0({
apiKey: process.env.V0_API_KEY,
baseURL: 'https://api.v0-enterprise.example.com'
});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 client.chats.create({
messages: [
{
role: 'user',
content: 'Build a responsive pricing page with three tiers'
}
],
projectId: 'proj_abc123',
modelConfig: {
temperature: 0.7,
maxTokens: 4000
}
});
// Response includes:
// - chat.id: Unique chat identifier
// - chat.project: Associated project details
// - chat.messages: Full conversation history
// - chat.generatedCode: Structured code 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 client.chats.initialize({
source: {
type: 'github',
url: 'https://github.com/user/repo',
branch: 'main'
},
prompt: 'Add authentication to this Next.js app'
});
// Initialize from local files
const fileChat = await client.chats.initialize({
source: {
type: 'files',
files: [
{ path: 'package.json', content: packageJson },
{ path: 'src/App.tsx', content: appCode }
]
},
prompt: '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 client.deployments.get({
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,
status: deployment.status,
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 client.deployments.findLogs({
deploymentId: 'dpl_xyz789',
since: new Date(Date.now() - 3600000), // Last hour
limit: 100
});
// Process logs
for (const log of logs.entries) {
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) {
const client = new V0();
try {
// Step 1: Create project
console.log('Creating project...');
const project = await client.projects.create({
name: 'AI Generated App',
description: 'Generated from prompt via API'
});
// Step 2: Generate code from prompt
console.log('Generating code from prompt...');
const chat = await client.chats.create({
messages: [
{
role: 'system',
content: 'You are an expert React/Next.js developer. Generate production-ready code.'
},
{
role: 'user',
content: userPrompt
}
],
projectId: project.id,
modelConfig: {
temperature: 0.7,
maxTokens: 8000
}
});
// Step 3: Parse generated code
console.log('Parsing generated files...');
const files = chat.generatedCode.files;
console.log(`Generated ${files.length} files`);
// Step 4: Validate code
console.log('Validating code...');
const validation = await client.code.validate({
files,
projectId: project.id
});
if (!validation.valid) {
console.log('Fixing validation errors...');
// API automatically fixes common errors
const fixed = await client.code.fix({
files,
errors: validation.errors
});
}
// Step 5: Create deployment
console.log('Deploying to Vercel...');
const deployment = await client.deployments.create({
chatId: chat.id,
projectId: project.id,
environment: 'production'
});
// Step 6: Wait for deployment to complete
console.log('Waiting for deployment...');
let deploymentStatus = deployment;
while (deploymentStatus.status === 'building') {
await new Promise(resolve => setTimeout(resolve, 5000));
deploymentStatus = await client.deployments.get({
deploymentId: deployment.id
});
console.log(`Status: ${deploymentStatus.status}`);
}
// Step 7: Return results
if (deploymentStatus.status === 'ready') {
console.log('✅ Deployment successful!');
return {
success: true,
webUrl: deploymentStatus.webUrl,
inspectorUrl: deploymentStatus.inspectorUrl,
chatId: chat.id,
projectId: project.id,
deploymentId: deployment.id,
files: files.map(f => f.path)
};
} else {
throw new Error(`Deployment failed: ${deploymentStatus.status}`);
}
} 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;
const client = new V0();
// 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 client.chats.create({
messages: [{ role: 'user', content: enhancedPrompt }],
projectId: req.user.projectId
});
const deployment = await client.deployments.create({
chatId: chat.id,
projectId: req.user.projectId
});
res.json({
previewUrl: deployment.webUrl,
editUrl: `https://v0.dev/chat/${chat.id}`,
files: chat.generatedCode.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 client = new V0();
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 client = new V0();
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 client.chats.create({
messages: [{ role: 'user', content: prompt }]
});
// Extract component code
const dashboardComponent = chat.generatedCode.files.find(
f => f.path.includes('dashboard')
);
return {
code: dashboardComponent.content,
preview: chat.previewUrl
};
}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();
const client = new V0();
try {
const chat = await client.chats.create({
messages: [{ role: 'user', content: prompt }]
});
spinner.succeed('Code generated!');
// Save files locally
if (options.output) {
const fs = await import('fs/promises');
for (const file of chat.generatedCode.files) {
const filePath = `${options.output}/${file.path}`;
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();
const deployment = await client.deployments.create({
chatId: chat.id
});
// Wait for deployment
let status = deployment;
while (status.status === 'building') {
await new Promise(r => setTimeout(r, 3000));
status = await client.deployments.get({
deploymentId: deployment.id
});
}
deploySpinner.succeed('Deployed!');
console.log(chalk.blue('🌐 Live URL:', status.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();
const client = new V0();
try {
const deployment = await client.deployments.create({ chatId });
spinner.succeed('Deployed!');
console.log(chalk.blue('🌐', deployment.webUrl));
} 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@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- 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');
const client = new V0();
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 webhooks for deployments
Avoid polling—subscribe to deployment status changes
- Batch operations
Group multiple chat requests when possible
- Monitor credit usage
Track API consumption to optimize costs
import { V0, V0Error } from 'v0-sdk';
class V0ApiService {
private client: V0;
private maxRetries = 3;
constructor() {
this.client = new V0();
}
async generateWithRetry(prompt: string, retryCount = 0): Promise<any> {
try {
const chat = await this.client.chats.create({
messages: [{ role: 'user', content: prompt }]
});
// Validate response
if (!chat.generatedCode?.files?.length) {
throw new Error('No code generated');
}
return chat;
} catch (error) {
if (error instanceof V0Error) {
// Handle specific API errors
if (error.code === 'rate_limit_exceeded') {
if (retryCount < this.maxRetries) {
const delay = Math.pow(2, retryCount) * 1000; // Exponential backoff
console.log(`Rate limited. Retrying in ${delay}ms...`);
await new Promise(resolve => setTimeout(resolve, delay));
return this.generateWithRetry(prompt, retryCount + 1);
}
}
if (error.code === 'invalid_request') {
throw new Error(`Invalid prompt: ${error.message}`);
}
if (error.code === 'insufficient_credits') {
throw new Error('Out of v0 credits. Please add more credits.');
}
}
// Log unexpected errors
console.error('V0 API Error:', {
error,
prompt: prompt.substring(0, 100),
retryCount,
timestamp: new Date().toISOString()
});
throw error;
}
}
async safeDeployment(chatId: string): Promise<any> {
try {
const deployment = await this.client.deployments.create({ chatId });
// Poll for completion with timeout
const timeout = 300000; // 5 minutes
const startTime = Date.now();
while (Date.now() - startTime < timeout) {
const status = await this.client.deployments.get({
deploymentId: deployment.id
});
if (status.status === 'ready') {
return status;
}
if (status.status === 'error') {
const logs = await this.client.deployments.findLogs({
deploymentId: deployment.id
});
throw new Error(`Deployment failed: ${logs.entries[0]?.message}`);
}
await new Promise(resolve => setTimeout(resolve, 5000));
}
throw new Error('Deployment timeout');
} 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