Skip to content

Create & edit apps

POST /v1/apps with a name and a natural-language description starts an AI generation:

Terminal window
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.

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.

  • GET /v1/apps/{id} — status, URLs, services, deploy state.
  • GET /v1/apps/{id}/config — the app’s full JSON configuration (mode=preview for the working copy, mode=published for the live release).
  • GET /v1/apps/{id}/logs, /health, /errors — runtime observability.

Upload documents the app can search over (files:write):

Terminal window
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}.

POST /v1/apps/{id}/clone {"name": "My Copy"} duplicates an app’s configuration into a new draft — useful for templates and experiments.

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.