App Builder API
Create and manage app builder projects, pages, and components.
Endpoints
/api/v1/appBuilder/listProjectsList all app builder projects. Returns array with id, name, description, linkedBaseId, page count, component count.
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/listProjects \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{}'/api/v1/appBuilder/getProjectGet a project with its pages, components, linkedBase, and triggers
Parameters
id | stringrequired | Project ID from listProjects |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getProject \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/createProjectCreate a new app builder project
Parameters
name | stringrequired | Project name |
description | string | Optional project description |
color | string | Hex color code (default: #3B82F6) |
projectType | string | Project type: web or mobile app |
bundleIdentifier | string | Mobile app bundle identifier (e.g. com.example.myapp) |
appDisplayName | string | Mobile app display name for App Store / Play Store |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/createProject \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "example",
"description": "example",
"color": "example"
}'/api/v1/appBuilder/updateProjectUpdate project settings including branding, dependencies, marketplace, and mobile config
Parameters
id | stringrequired | Project ID from listProjects |
name | string | New project name |
description | string | New description |
color | string | New hex color code |
logo | string | URL or path to logo image (recommended: 200x50px PNG or SVG) |
favicon | string | URL or path to favicon image (recommended: 32x32px PNG or ICO) |
showSerenitesBranding | boolean | Show "Powered by Serenities AI" branding on published app |
dependencies | object | NPM packages to bundle. Example: {"framer-motion": "^10.0.0", "chart.js": "^4.4.0"}. Packages are installed via Bun and bundled by Vite for production. Tailwind CSS is included by default. |
aiKnowledge | string | AI project knowledge - persistent instructions for AI including project goals, coding style, and constraints |
marketplaceEnabled | boolean | Enable marketplace listing for this app |
marketplaceThumbnail | string | Thumbnail image URL or path for marketplace listing (recommended: 400x300px) |
marketplaceCover | string | Cover/banner image URL or path for marketplace detail page (recommended: 1200x400px) |
marketplaceDescription | string | Extended description for marketplace listing |
appDisplayName | string | Mobile app display name for App Store / Play Store |
bundleIdentifier | string | Mobile app bundle identifier (e.g. com.example.myapp) |
appVersion | string | Mobile app version (e.g. 1.0.0) |
buildNumber | integer | Mobile app build number |
appIcon | string | URL to app icon image (1024x1024 PNG) |
splashScreen | string | URL to splash screen image (1284x2778 PNG) |
orientation | string | Mobile app orientation lock |
mobilePermissions | array | Mobile permissions: camera, location, notifications, media-library, contacts, biometrics, file-system |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateProject \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"name": "example",
"description": "example"
}'/api/v1/appBuilder/updateProjectAuthUpdate project authentication settings
Parameters
id | stringrequired | Project ID |
authEnabled | boolean | Enable authentication for this app |
authAllowSignup | boolean | Allow new users to sign up |
authRequireEmail | boolean | Require email verification |
authAllowSocial | boolean | Allow social login (Google, GitHub) |
authPaths | object | Custom auth paths object. Keys: login, signup, forgotPassword, resetPassword, verifyEmail, afterLogin, afterLogout, accessDenied, or any custom paths. Values: the URL path (e.g., "/signin", "/register") |
authCustomFields | array | Custom signup form fields - added after email/password/name |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateProjectAuth \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"authEnabled": true,
"authAllowSignup": true
}'/api/v1/appBuilder/bundleDepsBundle npm dependencies for a project. Call this after adding/changing dependencies to ensure they are bundled and ready for preview.
Parameters
id | stringrequired | Project ID |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/bundleDeps \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/listEnvVarsList environment variables for a project
Parameters
projectId | stringrequired | Project ID |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/listEnvVars \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/createEnvVarCreate a new environment variable
Parameters
projectId | stringrequired | Project ID |
name | stringrequired | Variable name (e.g., OPENAI_API_KEY) |
value | stringrequired | Variable value |
description | string | Optional description |
isSecret | boolean | If true, value is masked in UI |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/createEnvVar \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"name": "example",
"value": "example"
}'/api/v1/appBuilder/updateEnvVarUpdate an environment variable
Parameters
id | stringrequired | Environment variable ID |
value | string | New value (only if changing) |
description | string | New description |
isSecret | boolean | Update secret flag |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateEnvVar \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"value": "example",
"description": "example"
}'/api/v1/appBuilder/deleteEnvVarDelete an environment variable
Parameters
id | stringrequired | Environment variable ID to delete |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/deleteEnvVar \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/updateCustomDomainUpdate custom domain settings
Parameters
id | stringrequired | Project ID |
customDomain | string | Custom domain (e.g., myapp.com) |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateCustomDomain \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"customDomain": "example"
}'/api/v1/appBuilder/getAppUsersGet users who signed up to this published app
Parameters
projectId | stringrequired | Project ID |
limit | number | |
offset | number |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getAppUsers \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"limit": 0,
"offset": 0
}'/api/v1/appBuilder/deleteAppUserDelete a user from this published app
Parameters
projectId | stringrequired | Project ID |
userId | stringrequired | App user ID to delete |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/deleteAppUser \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"userId": "example"
}'/api/v1/appBuilder/createAppUserManually create a user for this published app
Parameters
projectId | stringrequired | Project ID |
email | stringrequired | User email |
name | string | User name |
password | stringrequired | User password (min 8 chars) |
role | string | User role |
sendWelcomeEmail | boolean | Send welcome email with credentials |
customFields | object | Custom field values keyed by field ID |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/createAppUser \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"email": "example",
"name": "example"
}'/api/v1/appBuilder/resetAppUserPasswordReset password for an app user
Parameters
projectId | stringrequired | Project ID |
userId | stringrequired | App user ID |
newPassword | stringrequired | New password (min 8 chars) |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/resetAppUserPassword \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"userId": "example",
"newPassword": "example"
}'/api/v1/appBuilder/updateAppUserRoleUpdate role for an app user
Parameters
projectId | stringrequired | Project ID |
userId | stringrequired | App user ID |
role | stringrequired | New role |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateAppUserRole \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"userId": "example",
"role": "example"
}'/api/v1/appBuilder/deleteProjectDelete a project, its linked Base, and all pages/components
Parameters
id | stringrequired | Project ID to delete |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/deleteProject \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/createPageCreate a new page in a project
Parameters
projectId | stringrequired | Project ID from listProjects |
name | stringrequired | Page name (e.g., "About", "Contact") |
path | stringrequired | URL path (e.g., "/about", "/contact") |
commitMessage | string | Git commit message describing what was created and why. Always provide a meaningful message. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/createPage \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"name": "example",
"path": "example"
}'/api/v1/appBuilder/createComponentCreate a new component in a project
Parameters
projectId | stringrequired | Project ID from listProjects |
name | stringrequired | Component name |
description | string | Optional component description |
type | string | Component type: "custom", "layout", "ui", or "data" |
isGlobal | boolean | Whether component is globally accessible |
commitMessage | string | Git commit message describing what was created and why. Always provide a meaningful message. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/createComponent \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"name": "example",
"description": "example"
}'/api/v1/appBuilder/listPagesList all pages in a project
Parameters
projectId | stringrequired | Project ID from listProjects |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/listPages \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/getPageGet page details including content
Parameters
id | stringrequired | Page ID from listPages |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getPage \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/readPageRead page content with line numbers. Use offset/limit to read specific sections of large files.
Parameters
id | stringrequired | Page ID from listPages |
offset | number | Line number to start from (1-indexed). If not specified, starts from line 1. |
limit | number | Number of lines to read. If not specified, reads entire file. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/readPage \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"offset": 0,
"limit": 0
}'/api/v1/appBuilder/readComponentRead component content with line numbers. Use offset/limit for large files.
Parameters
id | stringrequired | Component ID from listComponents |
offset | number | Line number to start from (1-indexed) |
limit | number | Number of lines to read |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/readComponent \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"offset": 0,
"limit": 0
}'/api/v1/appBuilder/updatePageUpdate page properties and content
Parameters
id | stringrequired | Page ID from listPages |
name | string | New page name |
path | string | New URL path |
content | string | Page content (React component code or JSON) |
layout | string | Layout template name |
isHomePage | boolean | Set as home page |
sortOrder | number | Sort order for navigation |
title | string | Page title for SEO |
description | string | Page description for SEO |
isDraft | boolean | Draft mode - page exists in builder but is not included when publishing |
isProtected | boolean | Require authentication to access |
requiredRole | string | Required role to access (null = any authenticated user) |
redirectIfUnauth | string | Redirect path for unauthenticated users |
commitMessage | string | Git commit message describing what changed and why. Always provide a meaningful message. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updatePage \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"name": "example",
"path": "example"
}'/api/v1/appBuilder/editPageEdit page content by replacing specific text. The oldString must match exactly (including whitespace/indentation). If not unique, either provide more surrounding context or use replaceAll=true.
Parameters
id | stringrequired | Page ID from listPages |
oldString | stringrequired | The exact text to find and replace. Must be unique in the file unless using replaceAll. |
newString | stringrequired | The replacement text (must be different from oldString) |
replaceAll | boolean | Replace all occurrences. If false (default), oldString must be unique in the file. |
commitMessage | string | Git commit message describing what changed and why. Always provide a meaningful message. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/editPage \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"oldString": "example",
"newString": "example"
}'/api/v1/appBuilder/searchPageSearch page content for specific text/patterns. Returns matching lines with context. More efficient than getPage for finding specific code.
Parameters
id | stringrequired | Page ID from listPages |
pattern | stringrequired | Text or regex pattern to search for |
contextLines | number | Number of lines to show before and after each match (default: 3) |
maxMatches | number | Maximum number of matches to return (default: 5) |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/searchPage \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"pattern": "example",
"contextLines": 0
}'/api/v1/appBuilder/deletePageDelete a page from the project
Parameters
id | stringrequired | Page ID to delete |
commitMessage | string | Git commit message explaining why the page was deleted. Always provide a meaningful message. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/deletePage \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"commitMessage": "example"
}'/api/v1/appBuilder/listComponentsList all components in a project
Parameters
projectId | stringrequired | Project ID from listProjects |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/listComponents \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/getComponentGet component details including content
Parameters
id | stringrequired | Component ID from listComponents |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getComponent \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/updateComponentUpdate component properties and code
Parameters
id | stringrequired | Component ID from listComponents |
name | string | New component name |
description | string | Component description |
content | string | Component code (React/TSX) |
type | string | Component type |
isGlobal | boolean | Whether globally accessible |
commitMessage | string | Git commit message describing what changed and why. Always provide a meaningful message. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateComponent \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"name": "example",
"description": "example"
}'/api/v1/appBuilder/editComponentEdit component content by replacing specific text. The oldString must match exactly (including whitespace/indentation). If not unique, provide more context or use replaceAll=true.
Parameters
id | stringrequired | Component ID from listComponents |
oldString | stringrequired | The exact text to find and replace. Must be unique unless using replaceAll. |
newString | stringrequired | The replacement text (must be different from oldString) |
replaceAll | boolean | Replace all occurrences. If false (default), oldString must be unique. |
commitMessage | string | Git commit message describing what changed and why. Always provide a meaningful message. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/editComponent \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"oldString": "example",
"newString": "example"
}'/api/v1/appBuilder/searchComponentSearch component content for specific text/patterns. Returns matching lines with context.
Parameters
id | stringrequired | Component ID from listComponents |
pattern | stringrequired | Text or regex pattern to search for |
contextLines | number | Lines to show before/after match |
maxMatches | number | Maximum matches to return |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/searchComponent \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"pattern": "example",
"contextLines": 0
}'/api/v1/appBuilder/deleteComponentDelete a component from the project
Parameters
id | stringrequired | Component ID to delete |
commitMessage | string | Git commit message explaining why the component was deleted. Always provide a meaningful message. |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/deleteComponent \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"commitMessage": "example"
}'/api/v1/appBuilder/listTriggersList all triggers (event-flow mappings) in a project
Parameters
projectId | stringrequired | Project ID from listProjects |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/listTriggers \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/createTriggerCreate a trigger to execute a flow when an event occurs
Parameters
projectId | stringrequired | Project ID from listProjects |
event | stringrequired | Event type |
flowId | stringrequired | Flow ID to execute when event fires |
targetPageId | string | Page ID for page-specific events |
targetElementId | string | Element ID for element-specific events (button clicks, form submits) |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/createTrigger \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"event": "example",
"flowId": "example"
}'/api/v1/appBuilder/updateTriggerUpdate trigger settings
Parameters
id | stringrequired | Trigger ID from listTriggers |
flowId | string | New Flow ID |
isActive | boolean | Enable/disable trigger |
orderIndex | number | Execution order |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateTrigger \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example",
"flowId": "example",
"isActive": true
}'/api/v1/appBuilder/deleteTriggerDelete a trigger
Parameters
id | stringrequired | Trigger ID to delete |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/deleteTrigger \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/publishPublish an app to production. Builds all pages and deploys for serving.
Parameters
id | stringrequired | Project ID to publish |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/publish \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/unpublishUnpublish an app (marks as unpublished but keeps deployed files)
Parameters
id | stringrequired | Project ID to unpublish |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/unpublish \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/verifyCustomDomainVerify custom domain ownership via DNS TXT record lookup
Parameters
id | stringrequired | Project ID |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/verifyCustomDomain \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"id": "example"
}'/api/v1/appBuilder/getCodeGuideGet coding guide for writing App Builder pages. Call this BEFORE writing any page code to understand available globals and patterns.
Parameters
topic | string | Topic: "all", "sdk", "globals", "hooks", "navigation", "libraries", "styling", "components", "examples", "errors", "mcp", "access", "auth", "payments", "saas", "functions" |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getCodeGuide \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"topic": "example"
}'/api/v1/appBuilder/getStripeConnectionGet Stripe connection status for a project
Parameters
projectId | stringrequired | Project ID |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getStripeConnection \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/updateStripeConnectionSave Stripe API key and/or webhook secret for test or live mode
Parameters
projectId | stringrequired | Project ID |
mode | stringrequired | Which mode to update |
secretKey | string | Stripe Secret Key (sk_test_xxx or sk_live_xxx) |
webhookSecret | string | Stripe Webhook Secret (whsec_xxx) |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateStripeConnection \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"mode": "example",
"secretKey": "example"
}'/api/v1/appBuilder/toggleStripeModeSwitch between test and live Stripe mode
Parameters
projectId | stringrequired | Project ID |
mode | stringrequired | Mode to switch to |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/toggleStripeMode \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"mode": "example"
}'/api/v1/appBuilder/syncStripeProductsSync products and prices from Stripe account
Parameters
projectId | stringrequired | Project ID |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/syncStripeProducts \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/listStripeProductsList synced Stripe products
Parameters
projectId | stringrequired | Project ID |
mode | string | Filter by mode (default: current mode) |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/listStripeProducts \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"mode": "example"
}'/api/v1/appBuilder/disconnectStripeRemove Stripe connection for test or live mode
Parameters
projectId | stringrequired | Project ID |
mode | stringrequired | Which mode to disconnect |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/disconnectStripe \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"mode": "example"
}'/api/v1/appBuilder/createStripeProductCreate a new product with price in Stripe
Parameters
projectId | stringrequired | Project ID |
name | stringrequired | Product name |
description | string | Product description |
amount | integerrequired | Price amount in cents (e.g., 999 = $9.99) |
currency | string | Currency code (default: usd) |
interval | string | Billing interval for subscriptions |
intervalCount | integer | Number of intervals between billings |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/createStripeProduct \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"name": "example",
"description": "example"
}'/api/v1/appBuilder/getGitConnectionGet Git connection status. Param "projectId". Returns: connected, repoOwner, repoName, branch, lastCommitSha, AI permission flags.
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getGitConnection \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/connectGitHubConnect a GitHub repository. Params: projectId (required), repoOwner (GitHub username or org), repoName (repo name), OR createNew (true) with newRepoName to create a new repo.
Parameters
projectId | stringrequired | |
repoOwner | string | |
repoName | string | |
createNew | boolean | |
newRepoName | string |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/connectGitHub \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"repoOwner": "example",
"repoName": "example"
}'/api/v1/appBuilder/disconnectGitHubDisconnect GitHub from project. Param "projectId". Clears all Git settings and token.
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/disconnectGitHub \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/updateGitPermissionsUpdate AI Git permissions. Params: projectId (required), plus any of: - allowAiCommit: boolean - Allow AI to commit changes - allowAiPull: boolean - Allow AI to pull from remote - allowAiPush: boolean - Allow AI to push to remote - allowAiCreateBranch: boolean - Allow AI to create branches/repos
Parameters
projectId | stringrequired | |
allowAiCommit | boolean | |
allowAiPull | boolean | |
allowAiPush | boolean | |
allowAiCreateBranch | boolean |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateGitPermissions \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"allowAiCommit": true,
"allowAiPull": true
}'/api/v1/appBuilder/listGitHubReposList user GitHub repos for selection. Param "projectId". Returns array of {fullName, name, owner, private, defaultBranch}.
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/listGitHubRepos \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/gitPullPull latest changes from GitHub remote
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitPull \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/gitPushPush commits to GitHub remote
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitPush \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/gitCommitCreate a new commit with current source files
Parameters
projectId | stringrequired | |
message | stringrequired | Commit message |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitCommit \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"message": "example"
}'/api/v1/appBuilder/gitCreateBranchCreate a new branch from current HEAD
Parameters
projectId | stringrequired | |
name | stringrequired | New branch name |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitCreateBranch \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"name": "example"
}'/api/v1/appBuilder/gitSwitchBranchSwitch to an existing branch
Parameters
projectId | stringrequired | |
name | stringrequired | Branch name to switch to |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitSwitchBranch \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"name": "example"
}'/api/v1/appBuilder/gitMergeMerge one branch into another
Parameters
projectId | stringrequired | |
from | stringrequired | Source branch to merge from |
to | stringrequired | Target branch to merge into |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitMerge \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"from": "example",
"to": "example"
}'/api/v1/appBuilder/gitListCommitsGet commit history
Parameters
projectId | stringrequired | |
limit | number | Maximum number of commits to return |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitListCommits \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"limit": 0
}'/api/v1/appBuilder/gitRollbackRestore project to a previous commit
Parameters
projectId | stringrequired | |
sha | stringrequired | Commit SHA to rollback to |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitRollback \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"sha": "example"
}'/api/v1/appBuilder/gitStatusGet current Git status
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitStatus \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/gitCreateRepoCreate a new GitHub repository
Parameters
projectId | stringrequired | |
name | stringrequired | Repository name |
isPrivate | boolean | Whether the repo should be private |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitCreateRepo \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"name": "example",
"isPrivate": true
}'/api/v1/appBuilder/gitListBranchesList all branches in the repository
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/gitListBranches \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/serverProxyMake an HTTP request through server-side proxy with env var placeholder resolution.
Parameters
projectId | stringrequired | |
url | stringrequired | |
method | string | |
headers | object | |
body | any | |
timeout | number |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/serverProxy \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"url": "example",
"method": "example"
}'/api/v1/appBuilder/setServerProxyAccessRulesSet access rules for server proxy on a project. Controls who can use serverFetch in published apps. No rules = deny (only app owner). Set execute rules to allow app users.
Parameters
projectId | stringrequired | |
accessRules | objectrequired | Access rules object with execute operation |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/setServerProxyAccessRules \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"accessRules": {}
}'/api/v1/appBuilder/getServerProxyAccessRulesGet the current server proxy access rules for a project.
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getServerProxyAccessRules \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/listBackendFunctionsList all backend functions for a project. Params: projectId (required). Returns array with id, name, description, code, accessRules, timeout, isActive.
Parameters
projectId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/listBackendFunctions \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example"
}'/api/v1/appBuilder/getBackendFunctionGet a single backend function. Params: projectId (required), functionId (required). Returns full function with code.
Parameters
projectId | stringrequired | |
functionId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/getBackendFunction \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"functionId": "example"
}'/api/v1/appBuilder/createBackendFunctionCreate a new backend function. Server-side JavaScript that runs in isolated V8 sandbox with access to tables, files, external APIs via ctx object. Params: - projectId: Project ID (required) - name: Function name (required, unique within project, used in SDK: functions.call("name", params)) - description: What the function does - code: JavaScript function body (required). Has access to: params (user input), ctx.tables (getRows, getRow, createRow, updateRow, deleteRow, searchRows, getRowCount, listTables, getTableSchema, upsertRow, bulkUpdateRows, bulkDeleteRows), ctx.service.tables (same but bypasses access rules), ctx.files (list, getUrl, getUploadUrl, upload, delete), ctx.fetch (external HTTP with {{ENV_VAR}} placeholders), ctx.env.get(key), ctx.user (caller info) - accessRules: { execute: [{ type: "public" | "authenticated" | "has_role", role?: "admin" }] }. No rules = deny (owner only). - timeout: Execution timeout in ms (1000-30000, default 10000) Example code: const order = await ctx.tables.createRow("Orders", { item: params.item, total: params.qty * params.price }); const charge = await ctx.fetch("https://api.stripe.com/v1/charges", { method: "POST", headers: { "Authorization": "Bearer {{STRIPE_KEY}}" }, body: JSON.stringify({ amount: order.total * 100 }) }); return { orderId: order.id, charged: true }; SDK usage in published app: await functions.call("processOrder", { item: "Widget", qty: 3, price: 9.99 })
Parameters
projectId | stringrequired | |
name | stringrequired | |
description | string | |
code | string | |
accessRules | any | |
timeout | number |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/createBackendFunction \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"name": "example",
"description": "example"
}'/api/v1/appBuilder/updateBackendFunctionUpdate a backend function. Only provided fields are updated. Params: projectId (required), functionId (required), name, description, code, accessRules, timeout (1000-30000), isActive (boolean).
Parameters
projectId | stringrequired | |
functionId | stringrequired | |
name | string | |
description | string | |
code | string | |
accessRules | any | |
timeout | number | |
isActive | boolean |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/updateBackendFunction \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"functionId": "example",
"name": "example"
}'/api/v1/appBuilder/deleteBackendFunctionDelete a backend function permanently. Params: projectId (required), functionId (required).
Parameters
projectId | stringrequired | |
functionId | stringrequired |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/deleteBackendFunction \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"functionId": "example"
}'/api/v1/appBuilder/invokeBackendFunctionExecute/invoke a backend function and return the result. Use this to test functions after creating them. Params: - projectId: Project ID (required) - functionName: The function name (required, NOT the function ID) - params: Optional object of key-value parameters to pass to the function Returns: { success: true, data: <function return value>, executionTime: <ms> } or throws error with the function's error message. Example: invokeBackendFunction({ projectId: "abc", functionName: "getTaskStats", params: {} })
Parameters
projectId | stringrequired | |
functionName | stringrequired | |
params | object |
Example Request
curl -X POST https://app.serenitiesai.com/api/v1/appBuilder/invokeBackendFunction \
-H "Authorization: Bearer mk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"projectId": "example",
"functionName": "example",
"params": {}
}'