This tab documents the Orchestrator HTTP API — the brain that runs editor sessions, calls the LLMs, and serves draft state to integrated sites. The same API is what the editor app, theDocumentation Index
Fetch the complete documentation index at: https://avocadostudioai.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
avocado-register CLI, the Onboarding agent, and any Bring Your Own Coding Agent workflow all talk to.
Status
What the orchestrator exposes (high level)
The public surface groups into nine areas, mirroring the OpenAPI tags:| Tag | What it covers | Used by |
|---|---|---|
| Sites | Site registration and listing — POST /sites/register, GET /sites | The editor on mount, avocado-register CLI |
| Chat | AI chat / planning — POST /chat, POST /chat/start, GET /chat/stream, POST /chat/cancel | Editor’s per-edit chat panel |
| Sites Agent | Site onboarding agent (migrate / integrate / create modes) — POST /sites-agent/start, GET /sites-agent/stream, POST /sites-agent/respond, POST /sites-agent/cancel | Editor’s Onboarding agent FAB |
| Draft | Draft content read endpoints — GET /draft/pages, GET /draft/slugs, GET /draft/site-config, POST /draft/bootstrap | The integrated site (called from fetchEditorPage / createSitePage) |
| Publish | Publishing endpoints — POST /publish, GET /publish/status, GET /publish/content | Editor’s publish flow |
| History | Undo / redo / version log — GET /history/log, GET /history/status, POST /history/undo, POST /history/redo, POST /history/restore | Editor’s history panel |
| Auth | Optional access password gate — POST /auth/verify, GET /auth/status | Editor login screen if ACCESS_PASSWORD_HASH is set |
| Media | Image upload, generation, search — POST /image/upload, POST /image/generate, POST /image/generate/chat, POST /image/interpret, GET /unsplash/search, GET /generated-images/:fileName | Editor’s Asset Manager |
| Health | Service health and readiness — GET /health, GET /docs/json | Container health checks, this docs site |
Auth model
Most orchestrator routes are unauthenticated today. The orchestrator is designed to be reachable from your editor and from your integrated sites — both of which run inside your trust boundary. There are two optional gates:- Access password (editor-facing) — set
ACCESS_PASSWORD_HASHon the orchestrator and the editor will prompt for a password before letting users in. Verified viaPOST /auth/verify. Off by default. - Publish token (integration-facing) — set
PUBLISH_TOKENon the orchestrator andPOST /publishrequests must includex-publish-token: <token>in headers. Off by default; recommended for production.
Regenerating this spec
The spec file atdocs-site/api-reference/orchestrator.openapi.json is generated by a one-shot script that imports the orchestrator’s app, waits for all routes to register, then dumps the @fastify/swagger reflection.
NODE_ENV=test so the orchestrator does not actually start listening on port 4200 — it only registers route plugins, which is enough for @fastify/swagger to introspect them. Output goes to docs-site/api-reference/orchestrator.openapi.json and counts the operations exported.
Run this any time after adding, removing, or renaming a route on the orchestrator. The Mintlify docs site will pick up the new spec on its next reload.
Reporting issues with the spec
If an operation here is missing, mislabeled, or you need a request/response shape that isn’t documented:- For missing schemas (the placeholder situation above): file an issue at github.com/yu7321/avocado describing which route you need and your use case. This helps prioritize the Zod-schema upgrade work.
- For outright bugs (an endpoint listed here doesn’t exist on the running orchestrator): the spec is stale — either the orchestrator changed without re-running
export-openapi, or there’s a bug in the route filter. Open an issue with[api-reference]in the title. - For internal routes that shouldn’t be public: the route filter at
apps/orchestrator/src/index.ts(INTERNAL_ROUTE_PREFIXES) decides what’s filtered. Add your prefix there and re-run the export.