API
Everything the dashboard does is available over HTTPS. Create an API token in the dashboard and send it as Authorization: Bearer <token>. Tokens act as you, on your plan.
Publish from Claude instead
New here? The step-by-step guide walks through every route below.
The same platform is a remote MCP server. Add https://myminiapp.dev/mcp as a custom connector in Claude.ai, or run claude mcp add --transport http myminiapp https://myminiapp.dev/mcp, sign in, and ask Claude to publish.
Sites
| GET | /api/me | Your account, plan and quota. |
| GET | /api/sites | Your sites. |
| POST | /api/sites | Claim a slug. Body {"slug": "my-app"}. |
| GET | /api/sites/:slug | State and recent deployments. |
| DELETE | /api/sites/:slug | Delete the site and all its files. |
| POST | /api/sites/:slug/deploy | Upload a zip body (Content-Type: application/zip). Claims the slug if new. Returns the deployment id, URL and any warnings. |
| POST | /api/sites/:slug/rollback/:deployId | Make an earlier deployment live. |
| GET | /api/sites/:slug/analytics?days=N | Views and visitors. Days are clamped to your plan. |
| POST | /api/sites/:slug/listing | Show in the gallery. Body {"listed": true, "title": "...", "description": "..."}. |
| POST | /api/sites/:slug/password | Premium. Body {"password": "..."} or {"password": null}. |
| GET, POST | /api/sites/:slug/domains | Premium. Attach a hostname: body {"hostname": "app.example.com"}, then CNAME it to origin.myminiapp.dev. |
| DELETE | /api/sites/:slug/domains/:hostname | Detach a hostname. |
Public
| GET | /api/gallery | Listed sites with ratings and favourite counts. |
| POST | /api/report | Report a site. Body {"site": "slug", "reason": "phishing|malware|adult|spam|copyright|other", "details": "..."}. |
| GET | /api/status | Health of the database and storage. |
Example
zip -r site.zip index.html curl -X POST https://myminiapp.dev/api/sites/my-app/deploy \ -H "Authorization: Bearer mah_..." \ -H "Content-Type: application/zip" \ --data-binary @site.zip
Rules
An upload must have index.html at the top level and stay within your plan's size and file limits. Scripts may only load from well-known CDNs. Content that looks like phishing or a forced redirect is rejected; see the acceptable use rules. Errors come back as JSON with an error field and, for validation, an errors list.
Limits
Each account gets a number of deploys per day (30 on free, 100 on Premium; /api/me reports yours). The allowance refills continuously rather than resetting, so after a burst the next deploy is back within minutes, and a rejected upload costs nothing. A site keeps the files of its newest deployments only (3 on free, 10 on Premium): older ones stay in the history but cannot be made live again. Writes are also limited per address, and an account used from more than a few countries in one day has its writes paused for that day while reads keep working. Over a limit, the API answers 429 with an exact retryAfterSeconds.