Charming API
Public HTTP surface for the Charming app runtime. The narrative agent guide lives at https://usecharming.com/llms-full.txt; this spec is the machine-readable source of truth for routes, request/response shapes, and error kinds.
Timeout SLAs (info["x-charming-sla"] + per-operation x-charming-timeout-ms) are documentation only — they describe the targets the server tries to hit, not enforced ceilings. Use them to set sensible client read timeouts, not as hard guarantees. The x-buildy-* aliases are deprecated compatibility keys.
Version 0.1.0
Base URL
https://charm.ingOperations
- GETList the authenticated user's apps — owned plus shared-with-them (newest first)
- POSTCreate an app (anonymous or authenticated upsert)
- PUTUpdate an existing app
- DELETEDelete an app
- POSTCall an operation defined inside the app's `fetch` handler
- POSTClaim an unclaimed app for the authenticated user
- GETPer-app OpenAPI document derived from `export const routes`
- GETCanonical per-app agent descriptor (side-effect-free)
- GETOwner-only metadata + storage key inventory
- GETRead the exact persisted source for an app
- PATCHApply exact-string find/replace edits to the persisted source
- PUTToggle whether visitors auto-fork their own copy of the app
- PUTToggle whether anyone can open the app with no login
- PUTSet or clear the authored chat-with-app starter prompt
- PUTSet the home-screen / favicon icon (emoji + bg)
- DELETEClear the icon and fall back to the default Charming mark
- GETList the app secret NAMES (never values)
- PUTCreate or replace a secret value
- POSTCreate a new secret value
- DELETEDelete a secret by name
- GETRead the app's durable runtime-failure events
- GETSubscribe to the live-state SSE stream for an app
- GETRead the per-app runtime error ring buffer
- POSTReport a runtime error from the in-page shell (anonymous)
- POSTReport a caught app load failure from the in-page bridge (anonymous)
- POSTSubmit durable feedback for an app
- GETList assets for an app
- POSTUpload an asset for an app
- DELETEDelete an asset
- GETResolve a manifestId to an appId in the caller’s scope
- POSTMint a device_code for an unauthenticated agent (RFC 8628-shaped)
- POSTPoll a device_code until the user approves
- POSTApprove a pairing (browser-side, signed-in user)
- GETList the caller’s tokens (no plaintext, no hash)
- POSTMint a personal access token (`bld_user_*`)
- DELETERevoke a token
- GETFetch the canonical Charming authoring guide as Markdown
- GETFetch the Charming design guide as Markdown
- GETThis document
- GETOAuth/MCP discovery metadata (delegated to better-auth)
- GETWeb Bot Auth signing-key directory (RFC 9421)
- GETOAuth protected-resource metadata (delegated to better-auth)