Create & edit apps
Creating an app
Section titled “Creating an app”POST /v1/apps with a name and a natural-language description starts an AI generation:
curl -X POST https://api.exepad.com/v1/apps \ -H "Authorization: Bearer $EXEPAD_KEY" \ -H "Content-Type: application/json" \ -d '{"name": "Field Notes", "description": "A note-taking app with tags and full-text search. Persist notes in the backend."}'Write a description like a short product brief: what the app does, what data it stores, and what the user can do. If you mention persistent data (“store”, “backend”, “database”), the generator provisions a per-app backend with CRUD endpoints; otherwise you get a frontend-only site.
The response (202) contains the app (id, preview_url, status: draft) and the generation’s edit_id.
The edit lifecycle
Section titled “The edit lifecycle”Everything the AI does to an app — the initial generation and every subsequent change — is an edit:
| Start an edit | POST /v1/apps/{id}/edits {"prompt": "..."} → 202, status: processing |
| Check status | GET /v1/apps/{id}/edits/{edit_id} → processing → completed | failed | cancelled |
| Stream progress | GET /v1/apps/{id}/edits/{edit_id}/stream (SSE) |
| Build logs | GET /v1/apps/{id}/edits/{edit_id}/logs |
| Cancel | POST /v1/apps/{id}/edits/{edit_id}/cancel |
| History | GET /v1/apps/{id}/edits |
Timing expectations: a frontend-only site builds in ~3–6 minutes, a full-stack app in ~5–9. Poll every 10–15 seconds, or use a webhook on edit.completed / edit.failed instead of polling.
Inspecting what was built
Section titled “Inspecting what was built”GET /v1/apps/{id}— status, URLs, services, deploy state.GET /v1/apps/{id}/config— the app’s full JSON configuration (mode=previewfor the working copy,mode=publishedfor the live release).GET /v1/apps/{id}/logs,/health,/errors— runtime observability.
Knowledge-base files (RAG)
Section titled “Knowledge-base files (RAG)”Upload documents the app can search over (files:write):
curl -X POST https://api.exepad.com/v1/apps/{id}/files \ -H "Authorization: Bearer $EXEPAD_KEY" \ -F "files=@handbook.pdf"Upload returns 202 with a poll_url; files pass through extract → classify → save → sync stages before they’re queryable. Manage with GET /v1/apps/{id}/files and DELETE /v1/apps/{id}/files/{file_id}.
Cloning
Section titled “Cloning”POST /v1/apps/{id}/clone {"name": "My Copy"} duplicates an app’s configuration into a new draft — useful for templates and experiments.
Billing
Section titled “Billing”Creates and edits reserve an estimate from your USD wallet and settle to the final price on completion; if the settled amount exceeds the estimate cap, the overage is absorbed — you never pay more than the quoted cap. Failed generations are not charged. Every operation is a line item in GET /v1/billing/ledger.