Skip to content

POST/posts

Create post

Create a new post. Fields `id`, `createdAt`, `updatedAt` are auto-generated. Triggers `posts.created` webhook.

ReturnsPost

AcceptsPostInput

Bearer token required

Response examples

201Post created

application/json example derived from schema

{
  "id": 1,
  "userId": 1,
  "title": "Performance Optimization Tips",
  "slug": "web-security-fundamentals",
  "body": "Fusce commodo aliquam arcu. Nam commodo suscipit quam. Quisque id odio.\n\nCurabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra.",
  "excerpt": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliq...",
  "tags": [
    "ux"
  ],
  "status": "published",
  "views": 16848,
  "likes": 28,
  "featured": false,
  "coverImage": "https://picsum.photos/seed/1/800/400",
  "readingTime": 7,
  "createdAt": "2026-01-21T19:36:04.116Z",
  "updatedAt": "2026-01-21T19:36:04.116Z"
}
400400 — invalid input or malformed JSON

application/json

{
  "error": {
    "status": 400,
    "message": "Request body required"
  }
}
413413 — body exceeds 64 KB

application/json

{
  "error": {
    "status": 413,
    "message": "Request body too large",
    "details": {
      "maxSize": "64 KB"
    }
  }
}
429429 — rate limit exceeded (120/60s)

application/json

{
  "error": {
    "status": 429,
    "message": "Too many requests",
    "details": {
      "retryAfter": 45
    }
  }
}

Released under the MIT License.