build-monetized-app
Build a monetized app on Eliza Cloud
Use this skill when you need to build an app that takes a markup on every chat or inference call and credits the earnings back to your owner. Eliza Cloud already supports app registration, per-app API keys, container deploys, the appId-based auth and redirect flow, the affiliate-header revenue path, and creator-monetization plumbing — you do not need to invent any of these.
Read references/sdk-flow.md for the 6-step build flow with a self-contained code example. External references (all public):
- Working chat-app:
elizaOS/cloud-mini-apps/apps/edad-chat— copyable end-to-end implementation. Read itsserver.tsandapi/proxy.tsfor the canonical chat-forwarder shape using@elizaos/cloud-sdk. - SDK reference:
@elizaos/cloud-sdkREADME — typed methods + helpers + auth. - Human-readable recipe:
docs/building-a-monetized-app.md— same loop, narrative form, with the schema fields explained.
The survival-economics loop
A Milady-style agent running in an Eliza Cloud container costs ~$0.67/day at the default tier (256 MB CPU + 512 MB RAM). When the org's credit balance and the owner's redeemable earnings both hit zero, the container is stopped after a 48-hour grace window. The container-billing cron pulls earnings before credits, so an app that earns more than its hosting costs keeps the agent alive indefinitely. See references/survival-economics.md for the exact accounting (redeemable_earnings_ledger, credit_transactions, the cron at app/api/cron/container-billing/route.ts).
This is why the skill exists: making money is how the agent stays online.
Default flow
import { ElizaCloudClient } from "@elizaos/cloud-sdk";
const cloud = new ElizaCloudClient({ apiKey: process.env.ELIZAOS_CLOUD_API_KEY });
// 1. register the app
const { app, apiKey } = await cloud.routes.postApiV1Apps({
json: { name, app_url: "https://placeholder.invalid", skipGitHubRepo: true },
});
// 2. build + push container image
// 3. deploy container
// 4. set markup %
// 5. patch app_url + allowed_origins to the container URL
// 6. report URLs to the human
Full code in references/sdk-flow.md. The skill assumes you have:
ELIZAOS_CLOUD_API_KEYin env (Milady packages this for you)@elizaos/cloud-sdkavailable (already a runtime dependency)- A goal and a name (make the name up if not given; collisions retry once with a 6-char suffix)
Auth + monetization headers
Every cloud-SDK call your deployed app makes on behalf of a user MUST carry:
Authorization: Bearer <user_jwt>— the JWT from the app-auth OAuth redirectx-affiliate-code: <your_affiliate_code>— the owner's affiliate code; this is what credits earnings
This pattern is shared with the eliza-cloud skill; see that skill for the auth flow itself. This skill assumes you've already read it.
Read these references in order
references/sdk-flow.md— the 6-step deploy + monetize flow with full codereferences/survival-economics.md— why this matters; how earnings flow into hostingreferences/failure-modes.md— recovery table for the failures you'll actually hit (name collision, container deploy failure, auth blocker, etc.)
What this skill is NOT
- It is not the app's product code. The skill is the deploy + monetize + survive surface. What the app DOES is up to you given the task.
- It is not a retry loop. Each SDK call is idempotent; if step 5 fails, restart from there.
- It does not configure affiliate codes. Affiliate codes belong to the owner, not the app, and live across all of an owner's apps. The skill inherits whatever is configured.
- It does not assume always-on billing. The org may have set
pay_as_you_go_from_earnings = false, in which case hosting comes purely from credits and earnings stay on the redemption ledger. The skill works either way; the org's owner controls the toggle.
More from elizaos/eliza
nano-pdf
Edits PDF files using natural-language instructions via the nano-pdf CLI. Supports modifying text, changing titles, fixing typos, and updating content on specific pages. Use when the user wants to edit a PDF, modify PDF content, update PDF text, fix a typo in a PDF, change a PDF title, or rewrite part of a PDF page.
30wacli
Send WhatsApp messages to other people or search/sync WhatsApp history via the wacli CLI (not for normal user chats). Use when the user asks to send a WhatsApp message, text someone on WhatsApp, search WhatsApp chat history, sync WhatsApp conversations, backfill message history, or forward a file via WhatsApp to a third party.
27obsidian
Work with Obsidian vaults (plain Markdown notes) and automate via obsidian-cli. Use when the user asks about notes, vault management, PKM, knowledge base organization, wikilinks, or personal knowledge management in Obsidian.
25openai-image-gen
Batch-generate images via the OpenAI Images API using DALL-E 2, DALL-E 3, or GPT image models. Produces random-but-structured prompts, renders them, and outputs a browsable `index.html` gallery. Use when the user asks to generate AI images, create pictures with DALL-E, batch-produce image assets, render AI art, or build an image gallery from text prompts.
21skill-creator
Creates, updates, and packages AgentSkills with proper SKILL.md frontmatter, bundled scripts, references, and assets. Provides guidance on skill naming, progressive disclosure, and context-efficient design. Use when building a new skill from scratch, restructuring an existing skill, writing or improving SKILL.md files, organizing skill resources into scripts/references/assets folders, packaging skills for distribution, or iterating on skill quality after testing.
21apple-reminders
Manage Apple Reminders via the `remindctl` CLI on macOS (list, add, edit, complete, delete). Supports lists, date filters, and JSON/plain output. Use when the user asks about reminders, todos, tasks, to-do lists, "remind me", scheduling tasks, checking what is due today, completing or deleting reminders, or managing reminder lists on macOS.
19