Publish, domains & rollback
Preview vs production
Section titled “Preview vs production”Every app has two deploy targets:
- Preview —
https://p1.exepad.com/a/preview-{app_id}/, redeployed on every completed edit (POST /v1/apps/{id}/deploy/previewforces one). Viewing requires an authenticated session — it is not a public URL. - Production — the public release at
https://{subdomain}.exepad.app, updated only when you publish.
Publishing
Section titled “Publishing”curl -X POST https://api.exepad.com/v1/apps/{id}/deploy/publish \ -H "Authorization: Bearer $EXEPAD_KEY" -d '{}'{ "status": "publishing", "mode": "production", "published_url": "https://field-notes.exepad.app" }Publishing snapshots the current preview configuration as an immutable release and deploys it. A subdomain is allocated automatically from the app’s alias on first publish. Poll GET /v1/apps/{id}/deploy/status until production.status: deployed (usually under two minutes), or subscribe to the app.deployed webhook.
Republish any time — each publish creates a new release version; your subdomain stays stable.
Custom subdomains
Section titled “Custom subdomains”curl -X PUT https://api.exepad.com/v1/apps/{id}/domains \ -H "Authorization: Bearer $EXEPAD_KEY" \ -H "Content-Type: application/json" \ -d '{"subdomain": "field-notes"}'# → { "subdomain": { "domain": "https://field-notes.exepad.app", "status": "active" } }Labels are lowercase a–z0–9-. Fully custom domains (your own hostname) are managed from the Studio.
Release history & rollback
Section titled “Release history & rollback”curl https://api.exepad.com/v1/apps/{id}/deployments -H "Authorization: Bearer $EXEPAD_KEY"Each production publish appears with its id, config_version, and is_active flag. Roll back to any previous release:
curl -X POST https://api.exepad.com/v1/apps/{id}/rollback \ -H "Authorization: Bearer $EXEPAD_KEY" \ -H "Content-Type: application/json" \ -d '{"deployment_id": "271029f5-..."}'# → { "status": "rolling_back", "target_version": 5, "poll": "GET /v1/apps/{id}/deploy/status" }Rollback redeploys the selected release; it does not modify your preview/working configuration.
Unpublishing
Section titled “Unpublishing”curl -X POST https://api.exepad.com/v1/apps/{id}/deploy/unpublish \ -H "Authorization: Bearer $EXEPAD_KEY" -d '{}'Takes the production site offline immediately; the preview environment and all your configuration remain intact, so you can republish later.
Publish limits
Section titled “Publish limits”Publishing is throttled at 30 deploy operations/hour per key, and accounts are subject to a publish-velocity cap on *.exepad.app as an anti-abuse measure — hitting it returns 429 with a Retry-After.