Developers
Build with App Preview Kit
Automate screenshot generation, AI listing briefs, and store publishing from any AI agent or script — using MCP tools or REST API v1.
Jump to section
Quick reference
MCP endpoint
https://mcp.apppreviewkit.com/mcp
POST · stateless HTTP · 9 tools
REST base URL
https://apppreviewkit.com/api/v1
Bearer token · JSON · 12 endpoints
Get a token
Settings → API Tokens — create one, copy it, add it as Authorization: Bearer <token>
Authentication
Every API call requires a Bearer token. Create tokens in Settings → API Tokens. Each token has a name and one or more scopes that limit what it can do.
Authorization: Bearer <your-token>The scopes available when creating a token:
| Scope | Grants access to |
|---|---|
projects:read | List and get projects, run audits |
sources:write | Add URL / Markdown context sources |
ai:execute | Regenerate listing briefs (uses AI credits) |
render:execute | Start screenshot render jobs (uses render credits) |
render:read | Poll render status, download ZIPs, publish |
screen-sets:read | List templates and screen sets |
Tokens are workspace-scoped. An owner or admin can revoke them at any time from the same settings page. The audit log records every tool call and API request attributed to a token ID.
MCP integration
App Preview Kit ships a stateless Model Context Protocol (MCP) server that exposes 9 tools. Plug it into Cursor, Claude Desktop, or any MCP-compatible agent to control the full project lifecycle from chat.
Cursor IDE — add to .cursor/mcp.json
{
"mcpServers": {
"app-preview-kit": {
"url": "https://mcp.apppreviewkit.com/mcp",
"headers": {
"Authorization": "Bearer <your-token>"
}
}
}
}Restart Cursor after saving. The server appears under MCP Tools in the chat panel.
Available tools
| Tool | Description | Scope required |
|---|---|---|
list_projects | List all projects in the workspace. Returns IDs, names, and app URLs. | projects:read |
get_project | Project details: metadata, platforms, locales, brief status, timestamps. | projects:read |
add_source | Add a URL or Markdown context source to improve listing brief generation. | sources:write |
regenerate_listing_brief | Regenerate AI title, subtitle, description, keywords, and promo text. | ai:execute |
render_screen_set | Start screenshot renders for device presets + locales. Returns a job ID to poll. | render:execute |
export_project_zip | Get the download URL for a completed render ZIP (poll jobId first). | render:read |
audit_listing | Compliance + ASO audit: Apple/Google policy, keyword density, readability. | projects:read |
list_templates | List available screenshot templates with IDs, names, and device support. | screen-sets:read |
publish_project | Publish a screen set to App Store Connect or Google Play. Requires admin role. | render:read |
Transport details
- POST /mcp — the JSON-RPC endpoint for all tool calls.
- GET /health — returns { "ok": true }. Use for uptime monitoring.
- Stateless: no session IDs. Each request is fully self-contained.
- GET and DELETE to /mcp return 405 (not supported in stateless mode).
REST API v1
A lightweight REST API for scripted workflows that don’t use MCP. All endpoints return JSON. Authenticate with the same Bearer tokens.
https://apppreviewkit.com/api/v1| Method | Path | Description |
|---|---|---|
| GET | /api/v1/projects | List all projects in your workspace. |
| POST | /api/v1/projects | Create a new project. Body: { name, appUrl? } |
| GET | /api/v1/projects/:id | Get a project by ID. |
| PATCH | /api/v1/projects/:id | Update a project. Body: { name? } |
| DELETE | /api/v1/projects/:id | Delete a project. Returns 204. |
| GET | /api/v1/projects/:id/screen-sets | List screen sets for a project. |
| POST | /api/v1/projects/:id/screen-sets | Create a screen set. Body: { name, platform?, templateId? } |
| GET | /api/v1/projects/:id/screen-sets/:ssId | Get a screen set by ID. |
| GET | /api/v1/projects/:id/screen-sets/:ssId/render | Poll render job status for a screen set. |
| GET | /api/v1/projects/:id/sources | List context sources attached to a project. |
| POST | /api/v1/projects/:id/sources | Add a source. Body: { url } or { markdown } |
| GET | /api/v1/projects/:id/export | Download the latest completed render ZIP. |
All requests must include Content-Type: application/json for POST and PATCH requests. Responses always include an error field and a human-readable message on non-2xx status codes.
Rate limits
Limits apply per workspace, per tool or endpoint. They reset on a rolling window.
| Surface | Per minute | Per day |
|---|---|---|
| Read operations (list, get, audit) | 30 | 1,000 |
| Source ingestion (add_source) | 30 | 500 |
| AI brief generation | 5 | 100 |
| Render jobs (render_screen_set) | 10 | 200 |
| Export / publish | 30 | 1,000 |
When a limit is exceeded, the server returns 429 RATE_LIMITED with a Retry-After header (seconds until reset). For MCP, the error message includes Resets in Xs. Implement exponential backoff with jitter on your client.
Error reference
Every non-2xx response includes a machine-readable error code and a human-readable message. MCP errors use the MCP error code enumeration in the JSON-RPC response body.
| Code | HTTP | Meaning |
|---|---|---|
UNAUTHENTICATED | 401 | Missing or invalid Bearer token. |
FORBIDDEN | 403 | Token lacks the required scope for this operation, or your plan doesn't include it. |
NOT_FOUND | 404 | The requested resource doesn't exist in your workspace. |
BAD_REQUEST | 400 | Missing or invalid request body fields. |
RATE_LIMITED | 429 | Per-workspace rate limit exceeded. See Retry-After header. |
INTERNAL_ERROR | 500 | Something went wrong on our side. Retry with exponential backoff. |
Support
Questions about the API, token scopes, or integration bugs — one address:
joel.jaimon99@gmail.comApp Preview Kit · Operated as a trade name from India.
Also see: Authentication · Privacy Policy · Terms of Use
Developer