Every request carries your API key (minted by the site owner):
Authorization: Bearer dk_your_key_here
curl -X POST https://demos.jason.com/v1/build \
-H "Authorization: Bearer dk_..." -H "content-type: application/json" \
-d '{"prompt":"A pomodoro timer with a tomato that ripens as the session progresses",
"webhook":"https://yourapp.com/hooks/demos"}'
→ {"slug":"ab12cd3","editToken":"...","status":"building","url":"https://demos.jason.com/d/ab12cd3", ...}
Builds take 2–6 minutes: concept storyboard → design sheet → code → review → real-browser act verification → live, with a themed agent character (avatar + spoken intro) generated in parallel.
curl https://demos.jason.com/v1/status/ab12cd3 -H "Authorization: Bearer dk_..."
→ {"status":"live","title":"...","cost_usd":0.21,"agent":{"name":"Flip","gender":"male"},"events":[...]}
Pass an https webhook on build; on completion we POST once (one retry):
{"event":"build.live","slug":"ab12cd3","title":"...","status":"live","cost_usd":0.21,
"url":"https://demos.jason.com/d/ab12cd3"} // header: x-demos-event
curl -X POST https://demos.jason.com/v1/edit -H "Authorization: Bearer dk_..." \
-H "content-type: application/json" \
-d '{"slug":"ab12cd3","instruction":"add a dark mode toggle"}'
The previous version is kept, the storyboard re-verifies, and your webhook will not fire (edits are synchronous-pollable via status).
Ask the agents about an app you built — they answer, they never change code:
curl -X POST https://demos.jason.com/v1/agent -H "Authorization: Bearer dk_..." \
-H "content-type: application/json" \
-d '{"slug":"ab12cd3","agent":"debugger","message":""}' // debugger | reviewer | designer | seo
curl -X POST https://demos.jason.com/v1/suggest -H "Authorization: Bearer dk_..." \
-H "content-type: application/json" -d '{"slug":"ab12cd3"}'
→ {"suggestions":[{"by":"developer","text":"..."},{"by":"designer","text":"..."}]}
curl https://demos.jason.com/v1/apps -H "Authorization: Bearer dk_..."
Shipped apps can call their own same-origin AI (POST /d/<slug>/ai with kinds chat, image, video) — house-metered at 60 calls/day per app, or unlimited with the end user's own key via each app's Settings panel.