Pulse Editor Vibe Coding APIs
Generate and build Pulse Apps using the Vibe Dev Flow API. Use this skill when the user wants to create, update, or generate code for Pulse Editor applications.
Generate and build Pulse Apps using the Vibe Dev Flow API. Use this skill when the user wants to create, update, or generate code for Pulse Editor applications.
Real data. Real impact.
Growing
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
This skill enables you to interact with the Pulse Editor Vibe Dev Flow API to generate, build, and publish Pulse Apps using cloud-based AI coding agents. The API uses Server-Sent Events (SSE) streaming to provide real-time progress updates.
This skill provides significant advantages for AI agents:
No Local Code Generation Required: Instead of generating code locally on the user's machine, agents can offload code generation to Pulse Editor's cloud-based vibe coding service. This eliminates the need for local build tools, dependencies, or development environments.
Built-in Version Control: Every app generation is automatically versioned. Agents can update existing apps by specifying
appId and version, making it easy to iterate on applications without manual version management.
Instant Deployment: Apps are automatically built and published immediately after generation. No separate build or deploy steps needed—users get a live, working app URL as soon as generation completes.
Parallel App Generation: Agents can generate multiple apps simultaneously by making concurrent API calls. This is ideal for scenarios where an agent needs to scaffold several microservices, create multiple related applications, or batch-generate apps for different purposes—all at the same time.
Stateless & Scalable: Since all code generation happens in the cloud, agents remain lightweight and can scale horizontally without worrying about local resource constraints.
This API call is a long-running operation. The Vibe Dev Flow performs multiple steps including workspace creation, AI code generation, building, and publishing.
"streamUpdatePolicy": "artifactOnly" in the request body to receive only the final artifact output, significantly reducing input tokens. But it won't count as being stuck if no messages are received for a while.Use this skill when the user wants to:
The Pulse Editor API requires an API key for authentication. Users can obtain their API key by:
The API key should be passed in the
Authorization header as a Bearer token:
Authorization: Bearer your_api_key_here
POST
https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate
| Header | Required | Description |
|---|---|---|
| Yes | Bearer token with Pulse Editor API key |
| Yes | |
| Yes | |
| Parameter | Type | Required | Description | Example |
|---|---|---|---|---|
| string | Yes | The user prompt instructing the Vibe coding agent | |
| string | No | Friendly display name for the app | |
| string | No | Unique identifier of an existing app to update. If not provided, a new app will be created | |
| string | No | Version identifier of an existing app. If not provided, defaults to latest version | |
| string | No | Set to to receive only the final artifact output (recommended for agents to save tokens) | |
The response is a Server-Sent Events (SSE) stream. Each event contains a JSON-encoded message. Messages are separated by
\n\n.
Each SSE message is formatted as:
data: <JSON>
followed by a blank line.
There are two message types:
Creation Message - A new message in the stream:
{ "messageId": "msg_abc123", "type": "creation", "data": { "type": "text" | "toolCall" | "toolResult" | "artifactOutput", "result": "string content", "error": "error message if any" }, "isFinal": false }
Update Message - Delta update to an existing message:
{ "messageId": "msg_abc123", "type": "update", "delta": { "result": "additional content to append", "error": "additional error to append" }, "isFinal": true }
| Type | Description |
|---|---|
| Text output from the agent |
| Tool invocation by the agent |
| Result from a tool execution |
| Final artifact with published app info |
When the generation completes, an
artifactOutput message contains:
{ "publishedAppLink": "https://pulse-editor.com/app/...", "sourceCodeArchiveLink": "https://...", "appId": "my_app_x7k9q2", "version": "0.0.1" }
| Code | Description |
|---|---|
| 200 | Streaming SSE with progress and final result |
| 400 | Bad request - invalid parameters |
| 401 | Unauthorized - invalid or missing API key |
| 500 | Server error |
curl -L 'https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate' \ -H 'Content-Type: application/json' \ -H 'Accept: text/event-stream' \ -H 'Authorization: Bearer your_api_key_here' \ -d '{ "prompt": "Create a todo app with auth and dark mode", "appName": "My Todo App" }'
import requests import jsonurl = "https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate"
headers = { "Authorization": "Bearer your_api_key_here", "Content-Type": "application/json", "Accept": "text/event-stream" }
payload = { "prompt": "Create a todo app with auth and dark mode", "appName": "My Todo App" }
response = requests.post(url, json=payload, headers=headers, stream=True)
messages = {} # Track messages by messageId buffer = ""
for chunk in response.iter_content(chunk_size=None, decode_unicode=True): buffer += chunk
# SSE messages end with \n\n while "\n\n" in buffer: part, buffer = buffer.split("\n\n", 1) if not part.startswith("data:"): continue data = json.loads(part.replace("data: ", "", 1)) if data["type"] == "creation": messages[data["messageId"]] = data print(f"New: {data['data'].get('result', '')}") elif data["type"] == "update": msg = messages.get(data["messageId"]) if msg: msg["data"]["result"] = (msg["data"].get("result") or "") + (data["delta"].get("result") or "") msg["isFinal"] = data["isFinal"] # Check for artifact output if data.get("data", {}).get("type") == "artifactOutput" and data.get("isFinal"): result = json.loads(messages[data["messageId"]]["data"]["result"]) print(f"Published: {result.get('publishedAppLink')}")
const response = await fetch( "https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate", { method: "POST", headers: { Authorization: "Bearer your_api_key_here", "Content-Type": "application/json", }, body: JSON.stringify({ prompt: "Create a todo app with auth and dark mode", appName: "My Todo App", }), }, );const reader = response.body.getReader(); const decoder = new TextDecoder(); let buffer = ""; const messages = new Map();
while (true) { const { done, value } = await reader.read(); if (done) break;
buffer += decoder.decode(value, { stream: true });
// SSE messages end with \n\n const parts = buffer.split("\n\n"); buffer = parts.pop(); // Keep incomplete part in buffer
for (const part of parts) { if (!part.startsWith("data:")) continue;
const json = part.replace(/^data:\s*/, ""); const message = JSON.parse(json); if (message.type === "creation") { messages.set(message.messageId, message); } else if (message.type === "update") { const msg = messages.get(message.messageId); if (msg) { msg.data.result = (msg.data.result ?? "") + (message.delta.result ?? ""); msg.data.error = (msg.data.error ?? "") + (message.delta.error ?? ""); msg.isFinal = message.isFinal; } } // Check for final artifact output const msg = messages.get(message.messageId); if (msg?.data.type === "artifactOutput" && msg.isFinal) { const result = JSON.parse(msg.data.result); console.log("Published:", result.publishedAppLink); }} }
To update an existing app, include the
appId and optionally the version:
curl -L 'https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate' \ -H 'Content-Type: application/json' \ -H 'Accept: text/event-stream' \ -H 'Authorization: Bearer your_api_key_here' \ -d '{ "prompt": "Add a calendar view to display tasks by date", "appName": "My Todo App", "appId": "my_app_x7k9q2", "version": "0.0.1" }'
To update an existing app, include the
appId and optionally the version:
curl -L 'https://pulse-editor.com/api/server-function/vibe_dev_flow/latest/generate-code/v2/generate' \ -H 'Content-Type: application/json' \ -H 'Accept: text/event-stream' \ -H 'Authorization: Bearer your_api_key_here' \ -d '{ "prompt": "Add a calendar view to display tasks by date", "appName": "My Todo App", "appId": "my_app_x7k9q2", "version": "0.0.1" }'
| Issue | Solution |
|---|---|
| 401 Unauthorized | Verify your API key is correct and has beta access |
| No SSE events | Ensure header is set |
| App not updating | Verify the exists and you have access to it |
This skill includes a ready-to-run Python example in the
examples/ folder:
examples/generate_app.py - Complete Python script demonstrating SSE streaming with the Vibe Dev Flow APIexamples/generate_app.js - Complete Node.js script demonstrating SSE streaming with the Vibe Dev Flow APITo run the example Python script:
# Set your API key export PULSE_EDITOR_API_KEY=your_api_key_here # Linux/Mac set PULSE_EDITOR_API_KEY=your_api_key_here # WindowsInstall dependencies
pip install requests
Run the script
python examples/generate_app.py
To run the example Node.js script:
# Set your API key export PULSE_EDITOR_API_KEY=your_api_key_here # Linux/Mac set PULSE_EDITOR_API_KEY=your_api_key_here # Windows # Install dependencies npm install node-fetch # Run the script node examples/generate_app.js
No automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.