# info.description
Programmatic interface to the Exepad platform console

# paths./v1/a2a/.well-known/agent-card.json.get.description
GET /.well-known/agent-card.json (and the legacy /.well-known/agent.json).

The A2A spec's discovery mechanism: the AgentCard served UNAUTHENTICATED at a
well-known URI so a client can discover the agent (and its authenticated
endpoints) before it holds any credentials. The card carries no secrets. On
a2a.exepad.com the host dispatcher rewrites /.well-known/* to this route; the
a2a feature flag still gates it (404 when off), and the Cloudflare WAF
rate-limit on a2a.exepad.com covers abuse.

# paths./v1/a2a/.well-known/agent.json.get.description
GET /.well-known/agent-card.json (and the legacy /.well-known/agent.json).

The A2A spec's discovery mechanism: the AgentCard served UNAUTHENTICATED at a
well-known URI so a client can discover the agent (and its authenticated
endpoints) before it holds any credentials. The card carries no secrets. On
a2a.exepad.com the host dispatcher rewrites /.well-known/* to this route; the
a2a feature flag still gates it (404 when off), and the Cloudflare WAF
rate-limit on a2a.exepad.com covers abuse.

# paths./v1/a2a/agent-card.get.description
Base view for all dev service API endpoints.

# paths./v1/a2a/message/send.post.description
Base view for all dev service API endpoints.

# paths./v1/apps.get.description
GET  /v1/apps — List apps for the authenticated user.
POST /v1/apps — Create a new app (template, prompt, or prompt + files).

# paths./v1/apps.post.description
GET  /v1/apps — List apps for the authenticated user.
POST /v1/apps — Create a new app (template, prompt, or prompt + files).

# paths./v1/apps/{app_id}.get.description
GET    /v1/apps/{id} — Get app details.
PATCH  /v1/apps/{id} — Update app name or alias.
DELETE /v1/apps/{id} — Archive (soft-delete) an app.

# paths./v1/apps/{app_id}.patch.description
GET    /v1/apps/{id} — Get app details.
PATCH  /v1/apps/{id} — Update app name or alias.
DELETE /v1/apps/{id} — Archive (soft-delete) an app.

# paths./v1/apps/{app_id}.delete.description
GET    /v1/apps/{id} — Get app details.
PATCH  /v1/apps/{id} — Update app name or alias.
DELETE /v1/apps/{id} — Archive (soft-delete) an app.

# paths./v1/apps/{app_id}/auth.put.description
PUT /v1/apps/{id}/auth — Configure auth settings.

# paths./v1/apps/{app_id}/clone.post.description
POST /v1/apps/{id}/clone — Clone an app's preview config.

# paths./v1/apps/{app_id}/deploy/preview.post.description
POST /v1/apps/{id}/deploy/preview — Trigger a preview deployment.

# paths./v1/apps/{app_id}/deploy/publish.post.description
POST /v1/apps/{id}/deploy/publish — Publish app to production.

# paths./v1/apps/{app_id}/deploy/status.get.description
GET /v1/apps/{id}/deploy/status — Get current deploy status.

# paths./v1/apps/{app_id}/deploy/unpublish.post.description
POST /v1/apps/{id}/deploy/unpublish — Unpublish app from production.

# paths./v1/apps/{app_id}/deployments.get.description
GET /v1/apps/{id}/deployments — List the published-release lineage.

# paths./v1/apps/{app_id}/discover.get.description
Base view for all dev service API endpoints.

# paths./v1/apps/{app_id}/domains.put.description
PUT /v1/apps/{id}/domains — Set subdomain and/or custom domain.

# paths./v1/apps/{app_id}/edits.get.description
GET  /v1/apps/{id}/edits — List edits for an app.
POST /v1/apps/{id}/edits — Create an edit (prompt or structured).

# paths./v1/apps/{app_id}/edits.post.description
GET  /v1/apps/{id}/edits — List edits for an app.
POST /v1/apps/{id}/edits — Create an edit (prompt or structured).

# paths./v1/apps/{app_id}/edits/{edit_id}.get.description
GET /v1/apps/{id}/edits/{edit_id} — Get edit details.

# paths./v1/apps/{app_id}/edits/{edit_id}/logs.get.description
GET /v1/apps/{id}/edits/{edit_id}/logs — Retrieve the build-log tail.

# paths./v1/apps/{app_id}/edits/{edit_id}/stream.get.description
GET /v1/apps/{id}/edits/{edit_id}/stream — SSE stream for edit progress.

Delegates to existing AgentSSEBridge for Redis-based streaming.

# paths./v1/apps/{app_id}/errors.get.description
GET /v1/apps/{id}/errors — Get recent app errors.

# paths./v1/apps/{app_id}/execute.post.description
Base view for all dev service API endpoints.

# paths./v1/apps/{app_id}/files.get.description
GET  /v1/apps/{id}/files — List files for an app.
POST /v1/apps/{id}/files — Upload files (multipart).

# paths./v1/apps/{app_id}/files.post.description
GET  /v1/apps/{id}/files — List files for an app.
POST /v1/apps/{id}/files — Upload files (multipart).

# paths./v1/apps/{app_id}/files/{file_id}.get.description
GET    /v1/apps/{id}/files/{file_id} — File detail with processing status.
DELETE /v1/apps/{id}/files/{file_id} — Delete a file.

# paths./v1/apps/{app_id}/files/{file_id}.delete.description
GET    /v1/apps/{id}/files/{file_id} — File detail with processing status.
DELETE /v1/apps/{id}/files/{file_id} — Delete a file.

# paths./v1/apps/{app_id}/health.get.description
GET /v1/apps/{id}/health — Get app health status.

# paths./v1/apps/{app_id}/hosting-usage.get.description
GET /v1/apps/{id}/hosting-usage — per-app hosting meters (Phase 4/5
dashboard source). Daily worker-counter snapshots for the current month
plus per-meter totals, published/preview split. Ownership enforced via
DevAppService.get_app_for_user (404 on someone else's app).

Scope: `apps:read`, enforced via `require_scope` like every other app
endpoint — a narrow-scoped key must NOT read another app's usage.
NOT billing_exempt: this is a per-app read, metered like GET /v1/apps/{id}
(a GET never hits RequirePositiveBalance, so an empty wallet still reads).

# paths./v1/apps/{app_id}/logs.get.description
GET /v1/apps/{id}/logs — Get app logs from AgentExecution records.

# paths./v1/apps/{app_id}/rollback.post.description
POST /v1/apps/{id}/rollback — Roll back to a prior published release.

# paths./v1/billing/auto-reload.put.description
PUT /v1/billing/auto-reload — configure the reload trigger.

# paths./v1/billing/ledger.get.description
GET /v1/billing/ledger — transparent line items, newest first.

# paths./v1/billing/limits.put.description
PUT /v1/billing/limits — the workspace hard monthly spend cap.

# paths./v1/billing/payment-method.post.description
POST /v1/billing/payment-method — Stripe setup Checkout (vault a card).

# paths./v1/billing/pricing.get.description
GET /v1/billing/pricing — the published card (fal.ai-style, public).

# paths./v1/billing/subscribe.post.description
POST /v1/billing/subscribe — Stripe Checkout (subscription mode) for the
Dev Pro $25/mo plan. Owner-auth only (a leaked developer key must not be
able to start a subscription). The $25 monthly wallet credit is granted on
each invoice.paid via the webhook, not here.

# paths./v1/billing/topup.post.description
POST /v1/billing/topup — Stripe Checkout for a wallet top-up.

# paths./v1/billing/usage.get.description
GET /v1/billing/usage — current-period spend, grouped by surface.

# paths./v1/billing/wallet.get.description
GET /v1/billing/wallet — balance, credit, auto-reload state.

# paths./v1/capabilities.get.description
GET /v1/capabilities — Platform capabilities for AI agent discovery.

# paths./v1/keys.get.description
GET  /v1/keys — List all developer keys for the authenticated user.
POST /v1/keys — Create a new developer key.

# paths./v1/keys.post.description
GET  /v1/keys — List all developer keys for the authenticated user.
POST /v1/keys — Create a new developer key.

# paths./v1/keys/{key_id}.get.description
GET    /v1/keys/{id} — Get a single developer key.
PATCH  /v1/keys/{id} — Update key name, scopes, or expires_at.
DELETE /v1/keys/{id} — Revoke (deactivate) a developer key.

# paths./v1/keys/{key_id}.patch.description
GET    /v1/keys/{id} — Get a single developer key.
PATCH  /v1/keys/{id} — Update key name, scopes, or expires_at.
DELETE /v1/keys/{id} — Revoke (deactivate) a developer key.

# paths./v1/keys/{key_id}.delete.description
GET    /v1/keys/{id} — Get a single developer key.
PATCH  /v1/keys/{id} — Update key name, scopes, or expires_at.
DELETE /v1/keys/{id} — Revoke (deactivate) a developer key.

# paths./v1/keys/{key_id}/rotate.post.description
POST /v1/keys/{id}/rotate — Rotate a key with a grace period.

# paths./v1/services.get.description
GET /v1/services — List available platform services.

# paths./v1/webhooks.get.description
GET /v1/webhooks — list | POST /v1/webhooks — create.

# paths./v1/webhooks.post.description
GET /v1/webhooks — list | POST /v1/webhooks — create.

# paths./v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retry.post.description
POST /v1/webhooks/{id}/deliveries/{did}/retry — retry a failed delivery.

# paths./v1/webhooks/{webhook_id}/test.post.description
POST /v1/webhooks/{id}/test — send a test event.