# API Overview

> HTTP API for drafting and publishing posts, listing projects, and building custom clients.

HTML version: https://blogizi.com/docs/public-api
Markdown version: https://blogizi.com/docs/public-api.md

Blogizi exposes a small REST API used by the [CLI](/docs/cli-publishing), [Obsidian plugin](/docs/obsidian), and any custom client you build. For agent tool calling, see the [MCP](/docs/mcp) docs. Base URL: `https://blogizi.com`.

## Start here

- [Authentication](/docs/api-authentication) — account API keys and project selection
- [Create or upsert post](/docs/api-create-post) — `POST /api/posts`
- [List projects](/docs/api-list-projects) — `GET /api/account/projects`

## Endpoint groups

- **Posts** — create, upsert, and list posts with an account API key
- **Projects** — list blogs for the authenticated account
- **Public blog** — unauthenticated routes used by the live blog UI

## Not covered here

Dashboard-only routes (domains, themes, billing, upload, and post `PATCH` / `DELETE` by id) require a signed-in session cookie and are not part of the public API key surface.

## CORS

Account API key routes used by the Obsidian plugin respond to `OPTIONS` preflight and allow browser clients. Prefer the CLI or Obsidian's `requestUrl` for production tooling.

> **Prefer the CLI when possible:** For repo-based workflows, agents should write markdown and shell out to `blogizi draft` / `blogizi update` / `blogizi publish` instead of hand-rolling HTTP — unless you are integrating the API into your own app.
