The EziBreezy public API is a versioned REST surface at /v1. Eleven controllers, 150 endpoints, every route scoped to a workspace. Authenticate with a 64-character ezb_live_ key, send JSON, get a structured envelope back. The same NestJS app, the same Postgres, the same audit log. If the web UI can do it, an integration can too.
Routes are versioned and consistent. /v1/workspaces/:workspaceId/content for the publishing lifecycle. /media for upload via signed URLs. /inbox for replies and moderation. /analytics for summaries, demographics, and post-level performance. /grid-planner, /workbench, /boost, /hashtags, /taxonomy, /integrations. Throttling lives per route, so the rate budget you have is published in the same OpenAPI doc you read the schemas from.
The spec is generated from the source, not authored alongside it. JSON at /docs/openapi.json. Interactive Scalar reference at /docs. The @ezibreezy/cli is generated from it. The MCP server wraps a curated subset of it. Point your own codegen at the same URL and you get a typed client in any language. Pair it with the scheduler for the human side of the same data.