packages/cloud-frontend/content/apps.mdx
import { Callout, Steps, Cards } from "@/docs/components";
Apps are Cloud records that connect your product to Eliza Cloud APIs. A Cloud app is separate from your deployable project and from any @elizaos/app-* app plugin loaded inside an Eliza runtime.
An Eliza Cloud app provides:
id for chat routing, domains, analytics, and marketplace records.Use a project for deployable product workspace state and container project_name. Use the Cloud app id when calling /api/v1/apps/{id}/chat.
curl -X POST "https://www.elizacloud.ai/api/v1/apps" \
-H "Authorization: Bearer $ELIZA_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My App",
"app_url": "https://placeholder.invalid",
"allowed_origins": ["https://placeholder.invalid"],
"description": "Custom AI app",
"website_url": "https://example.com",
"skipGitHubRepo": true
}'
{
"success": true,
"app": {
"id": "uuid-abc123",
"name": "My App",
"app_url": "https://placeholder.invalid",
"allowed_origins": ["https://placeholder.invalid"],
"created_at": "2026-05-05T10:30:00Z"
},
"apiKey": {
"id": "key_abc123"
}
}
Create the Cloud app with name, app_url, and optional metadata. If your container URL does not exist yet, use a placeholder URL and patch it after deployment.
curl -X PUT "https://www.elizacloud.ai/api/v1/apps/$APP_ID/monetization" \
-H "Authorization: Bearer $ELIZA_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"monetizationEnabled": true,
"inferenceMarkupPercentage": 100,
"purchaseSharePercentage": 10
}'
Deploy your project as a container with POST /api/v1/containers or the SDK createContainer() helper. Use project_name for the deployment identifier and pass the Cloud app ID through environment variables.
curl -X PATCH "https://www.elizacloud.ai/api/v1/apps/$APP_ID" \
-H "Authorization: Bearer $ELIZA_CLOUD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"app_url": "https://my-app.example.com",
"allowed_origins": ["https://my-app.example.com"]
}'
Route user chats through the Cloud app record:
const response = await fetch(`https://www.elizacloud.ai/api/v1/apps/${APP_ID}/chat`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${userStewardJwt}`,
},
body: JSON.stringify({
model: "provider/model-id",
messages: [{ role: "user", content: "Hello" }],
stream: false,
}),
});
The app-scoped endpoint charges the user's organization credit balance. If monetizationEnabled is true, inferenceMarkupPercentage is credited to the Cloud app creator's redeemable earnings.
| Field | Type | Description |
|---|---|---|
monetizationEnabled | boolean | Enables creator earnings for the app. |
inferenceMarkupPercentage | number | Creator markup on inference, 0-1000. |
purchaseSharePercentage | number | Purchase share percentage, 0-100. |
Older enabled plus nested pricing payloads are not accepted by the current app monetization endpoint.
Creator markup lands in redeemable earnings. Daily container billing can use those earnings first, then organization credits, when the billing setting payAsYouGoFromEarnings is enabled.
Redeem available earnings for elizaOS tokens from Dashboard -> Earnings or the Redemptions API.
id separately from container project_name.app_url and allowed_origins after container deployment.