# Create project post

> Create a post under a specific project id. API key auth uses the full CLI payload; session auth creates a manual draft.

HTML version: https://blogizi.com/docs/api-create-project-post
Markdown version: https://blogizi.com/docs/api-create-project-post.md

## Request

```http
POST /api/projects/{projectId}/posts
Authorization: Bearer YOUR_ACCOUNT_API_KEY
Content-Type: application/json
```

## API key body

Same fields as [Create or upsert post](/docs/api-create-post) (`title`, `slug`, optional `description`, `keyword`, `content`, `status`). This path does not support `upsert` — use `POST /api/posts` for upsert-by-slug.

```json
{
  "title": "How we built our auth flow",
  "slug": "how-we-built-our-auth-flow",
  "description": "≤160 char meta description",
  "keyword": "indie app authentication",
  "content": "Markdown body…",
  "status": "draft"
}
```

## Response

Returns `{ data: post, project: { slug } }` on API key create so clients can build the public blog URL without a second request.
