API Guide
Learn how to build on AppCruiser. For the complete endpoint reference with schemas and try-it-out forms, see the API Reference.
Authentication
Every API request requires an API key. Generate yours from Dashboard → Settings → API Keys in seconds. Keys use scoped permissions so you control exactly what each integration can access.
Include your key in every request header:
Authorization: Bearer ak_your_api_key_here
Scopes
| Scope | Access |
|---|---|
ideas:read | List and view ideas |
ideas:write | Create, update, delete ideas |
mockups:read | List, view, preview, download mockups |
mockups:write | Create, update, delete, upload thumbnails |
feedback:read | List feedback |
feedback:write | Create, delete feedback |
generations:write | Trigger AI mockup generation |
generations:read | Poll mockup generation job status |
videos:read | List videos, voices, gallery, and poll video job status |
videos:write | Generate, iterate, feature, publish & manage videos |
profile:read | View account info and credits |
Rate Limits
API requests are rate-limited per user using a sliding window. If you exceed the limit, you'll receive a 429 Too Many Requests response with Retry-After and X-RateLimit-* headers.
| Operation | Limit | Window |
|---|---|---|
| Read requests (GET) | 100 requests | Per minute |
| Write requests (POST, PATCH, DELETE) | 30 requests | Per minute |
| File uploads | 5 uploads | Per day |
| AI generations (Pro) | 5 generations | Per hour |
| AI generations (Business) | 20 generations | Per hour |
| Donations | 10 donations | Per hour |
Enter API Key for Testing
Paste your full API key to use the interactive MCP tool forms below. Create an API key first.
Create an Idea
Ideas are the starting point for everything on AppCruiser. Post an app concept, let the community vote on it, and build a working prototype.
curl
curl -X POST https://appcruiser.com/api/v1/ideas \
-H "Authorization: Bearer ak_your_key" \
-H "Content-Type: application/json" \
-d '{"title":"My Idea","description":"A productivity app","category":"Productivity","tags":["ai"]}'TypeScript (SDK)
import { AppCruiserClient } from "@appcruiser/sdk";
const client = new AppCruiserClient({ apiKey: "ak_your_key" });
const idea = await client.createIdea({
title: "My Idea",
description: "A productivity app",
category: "Productivity",
tags: ["ai"],
});
console.log(idea.id);Python
import requests
resp = requests.post("https://appcruiser.com/api/v1/ideas",
headers={"Authorization": "Bearer ak_your_key"},
json={
"title": "My Idea",
"description": "A productivity app",
"category": "Productivity",
"tags": ["ai"],
})
idea = resp.json()
print(idea["id"])Upload a Mockup
Mockups are working HTML prototypes. Upload single-file HTML apps or ZIP archives for WebContainer execution. The upload flow is three steps:
# Step 1: Get a presigned upload URL
curl -X POST https://appcruiser.com/api/v1/mockups/upload-url \
-H "Authorization: Bearer ak_your_key" \
-d '{"fileName":"index.html","contentType":"text/html"}'
# Returns: { "uploadUrl": "https://s3...", "s3Key": "mockups/..." }
# Step 2: Upload your file to the presigned URL
curl -X PUT "PRESIGNED_URL" -H "Content-Type: text/html" --data-binary @index.html
# Step 3: Create the mockup record with the s3Key from Step 1
curl -X POST https://appcruiser.com/api/v1/mockups \
-H "Authorization: Bearer ak_your_key" \
-d '{"name":"My App","description":"A prototype","category":"Gaming","s3Key":"S3_KEY"}'For WebContainer mockups (multi-file projects), upload a .zip file and set type: "webcontainer" with a startScript (e.g., "start").
AI Generation
Let AI build the prototype. Trigger Claude-powered mockup generation from any idea. Choose your model, set token limits, and get a working HTML prototype in minutes. Requires a Pro or Business plan and costs 1 AI credit.
curl
# Trigger generation
curl -X POST https://appcruiser.com/api/v1/generations \
-H "Authorization: Bearer ak_your_key" \
-d '{"ideaId":"IDEA_ID","model":"claude-sonnet-4-6","maxTokens":16000}'
# Returns: { "jobId": "..." }
# Poll until complete (status: queued → processing → completed/failed)
curl https://appcruiser.com/api/v1/generations/JOB_ID \
-H "Authorization: Bearer ak_your_key"TypeScript (SDK)
const { jobId } = await client.generateMockup({ ideaId: "IDEA_ID" });
// Poll until complete (built-in helper)
const job = await client.waitForGeneration(jobId);
console.log("Mockup ready:", job.mockupId);Python
import requests, time
resp = requests.post("https://appcruiser.com/api/v1/generations",
headers={"Authorization": "Bearer ak_your_key"},
json={"ideaId": "IDEA_ID"})
job_id = resp.json()["jobId"]
# Poll until complete
while True:
status = requests.get(f"https://appcruiser.com/api/v1/generations/{job_id}",
headers={"Authorization": "Bearer ak_your_key"}).json()
if status["status"] in ("completed", "failed"):
break
time.sleep(3)
print("Mockup ready:", status.get("mockupId"))Models: claude-sonnet-4-6 (fast, 1cr), claude-opus-4-6 (quality, 1cr), claude-opus-4-7 (smartest, 1.5cr batch / 2.5cr streaming). Tokens: 16K, 32K, 64K, 128K.
Create a Video
Generate a narrated promo/CTA video for any idea or prototype. A thumbnailtier (6–10s, silent loop) or a ctatier (15–60s, voiceover) is produced by the AI pipeline (architect → voiceover → compile → render). Like AI generation it returns ajobIdto poll. Costs credits (5 for thumbnail; 10–50 for CTA by duration) and is plan-gated for voices (Free uses a system default; Pro unlocks the voice catalog; Business accepts raw ElevenLabs voice IDs).
curl
# Kick off a CTA video for an idea (or POST /api/v1/mockups/MOCKUP_ID/generate-video)
curl -X POST https://appcruiser.com/api/v1/ideas/IDEA_ID/generate-video \
-H "Authorization: Bearer ak_your_key" \
-d '{"tier":"cta","duration":30,"brief":"Energetic 30s promo","language":"en-US"}'
# Returns: { "jobId": "..." }
# Poll until complete (queued → planning → voicing → compiling → rendering → completed)
curl https://appcruiser.com/api/v1/videos/JOB_ID \
-H "Authorization: Bearer ak_your_key"
# List the voices available to your plan (optional, before generating)
curl "https://appcruiser.com/api/v1/videos/voices?locale=en-US" \
-H "Authorization: Bearer ak_your_key"MCP (agents)
list_video_voices { "locale": "en-US" }
generate_video { "tier": "cta", "duration": 30, "targetType": "idea",
"targetId": "IDEA_ID", "brief": "Energetic 30s promo", "voiceName": "Roger" }
get_video_status { "jobId": "..." }
list_videos { "targetType": "idea", "targetId": "IDEA_ID" }
manage_video { "videoId": "...", "action": "feature" }
expand_video { "videoId": "...", "mode": "translate", "languages": ["es-MX","ja-JP"] }
download_video_source{ "jobId": "..." } # optional — edit the Remotion project locallyRefine a finished video without re-recording narration via iterate_video (orPOST /api/v1/videos/JOB_ID/iterate). Once a video is ready, manage_videofeatures it (the entity's preview), publishes it to the gallery, archives, or renames it. Video tools use the videos:read / videos:write scopes (a key with generations:* also works, for back-compat).
MCP Service
The AppCruiser MCP (Model Context Protocol) service gives AI agents like Claude direct access to your AppCruiser workspace. Create ideas, manage mockups, trigger AI generation, and read feedback — all through natural language in Claude Desktop, VS Code, or any MCP-compatible client.
Endpoint
POST https://6n262kz00l.execute-api.us-east-2.amazonaws.com/mcp
Configure in Claude Code
claude mcp add --transport http appcruiser \ https://6n262kz00l.execute-api.us-east-2.amazonaws.com/mcp \ --header "Authorization: Bearer ak_your_api_key"
Configure in Claude Desktop
{
"mcpServers": {
"appcruiser": {
"url": "https://6n262kz00l.execute-api.us-east-2.amazonaws.com/mcp",
"transport": { "type": "streamableHttp" },
"headers": { "Authorization": "Bearer ak_your_api_key" }
}
}
}Try MCP Tools
MCP Tools Reference
Key tools across 9 categories. Each tool maps to an AppCruiser API operation with scope-based access control. Pass ?profile=creator (or consumer, account) on the MCP URL to load a scoped subset.
Ideas
| Tool | Description | Scope |
|---|---|---|
list_ideas | Search/list ideas with pagination | ideas:read |
get_idea | Get idea by ID | ideas:read |
create_idea | Create a new idea | ideas:write |
update_idea | Update own idea | ideas:write |
delete_idea | Soft-delete idea | ideas:write |
restore_idea | Restore deleted idea | ideas:write |
Mockups
| Tool | Description | Scope |
|---|---|---|
list_mockups | Search/list mockups | mockups:read |
get_mockup | Get mockup by ID | mockups:read |
get_upload_url | Get presigned upload URL | mockups:write |
create_mockup | Create mockup record | mockups:write |
update_mockup | Update metadata or replace file (auto-creates revision) | mockups:write |
delete_mockup | Soft-delete mockup | mockups:write |
restore_mockup | Restore deleted mockup | mockups:write |
upload_thumbnail | Upload base64 PNG thumbnail | mockups:write |
get_mockup_preview | Get HTML content | mockups:read |
download_mockup | Get download URL | mockups:read |
add_variant | Add alternative format (HTML/WebContainer) | mockups:write |
list_variants | List all variants for a mockup | mockups:read |
remove_variant | Remove a variant | mockups:write |
Revisions
| Tool | Description | Scope |
|---|---|---|
list_revisions | List all revisions with current flag | mockups:read |
rate_revision | Thumbs up/down a revision (owner) | mockups:write |
set_current_revision | Activate a revision as the preview (owner) | mockups:write |
delete_revision | Permanently delete a non-active revision (owner) | mockups:write |
Iterations
| Tool | Description | Scope |
|---|---|---|
iterate_mockup | Chat-based iteration (batch 1cr / streaming 2cr) | mockups:write |
list_conversation | List chat iteration history | mockups:read |
Video
| Tool | Description | Scope |
|---|---|---|
generate_video | Generate a thumbnail or CTA video for an idea/prototype (5–50cr) | videos:write |
iterate_video | Visual/pacing edit without re-recording narration (10cr) | videos:write |
list_videos | List videos for an idea/prototype (languages, featured + gallery flags) | videos:read |
manage_video | Feature, publish-to-gallery, archive, rename (one tool, an action enum) | videos:write |
expand_video | Translate into more languages, or fan out creative variants (estimateOnly supported) | videos:write |
get_video_status | Poll a video job | videos:read |
list_video_voices | List voices available to your plan (locale-filtered) | videos:read |
download_video_source | Presigned URL for the Remotion source zip | videos:read |
Feedback, Generations & Account
| Tool | Description | Scope |
|---|---|---|
list_feedback | List feedback for mockup | feedback:read |
create_feedback | Post feedback with rating | feedback:write |
delete_feedback | Delete own feedback | feedback:write |
generate_mockup | AI generation (batch 1cr / streaming 2cr) | generations:write |
get_generation_status | Poll job status | generations:read |
get_profile | User profile, plan, credits | profile:read |
list_categories | List valid categories | profile:read |
get_mockup_guidelines | Upload guidelines and best practices | profile:read |
Categories
Use one of these values for the category field:
Productivity, Creative, Social, Gaming, Developer Tools, Finance, Education, Other
Or fetch programmatically: GET /api/v1/categories (no auth required).
Error Handling
All API errors return a JSON object with standardized fields:
{
"error": "Human-readable message",
"code": "MACHINE_READABLE_CODE",
"requestId": "uuid-for-debugging"
}| Status | Meaning |
|---|---|
200 | Success |
201 | Created |
400 | Bad request — INVALID_INPUT, MISSING_FIELD, INVALID_CATEGORY |
401 | Unauthorized — UNAUTHORIZED, INVALID_API_KEY |
403 | Forbidden — NOT_OWNER, PLAN_REQUIRED, INSUFFICIENT_CREDITS |
404 | Not found — IDEA_NOT_FOUND, MOCKUP_NOT_FOUND |
429 | Rate limit exceeded — RATE_LIMITED (check Retry-After header) |
500 | Server error — INTERNAL_ERROR, STRIPE_ERROR |
OpenAPI Spec
The full OpenAPI 3.1 specification is available at /openapi.json. Use it to generate client SDKs, import into Postman, or explore every endpoint in the API Reference.