openapi: 3.0.3 info: title: Kit Accounts Posts API version: '4.0' servers: - url: https://api.kit.com tags: - name: Posts paths: /v4/posts: get: summary: List posts tags: - Posts security: - API Key: [] - OAuth2: [] parameters: - name: after description: To fetch next page of results, use `?after=` in: query required: false schema: nullable: true - name: before description: To fetch previous page of results, use `?before=` in: query required: false schema: nullable: true - name: include_content in: query required: false schema: type: boolean example: false description: To include the `content` field on each post in the response, use `true`. Omitted by default because it significantly increases response size and latency for large collections. - name: include_total_count description: Set to `true` to include the `total_count` in the response. This option can cause slow responses; if paging through results, request it only on the first page and reuse the value for subsequent pages. in: query required: false schema: type: boolean example: false - name: per_page description: Number of results per page. Default 500, maximum 1000. in: query required: false schema: nullable: true responses: '200': description: Returns a paginated list of all posts for your account content: application/json: schema: type: object properties: posts: type: array items: type: object properties: id: type: integer publication_id: type: integer description: Identifier of the underlying publication. Posts that were also sent as broadcasts share the same `publication_id` — use it to match a post to its broadcast via `GET /v4/broadcasts`. created_at: type: string title: type: string slug: type: string nullable: true description: nullable: true meta_description: nullable: true status: type: string published_at: type: string nullable: true sent_at: type: string nullable: true thumbnail_alt: nullable: true thumbnail_url: nullable: true is_paid: type: boolean public_url: type: string nullable: true required: - id - publication_id - created_at - title - slug - description - meta_description - status - published_at - sent_at - thumbnail_alt - thumbnail_url - is_paid - public_url pagination: type: object properties: has_previous_page: type: boolean has_next_page: type: boolean start_cursor: type: string end_cursor: type: string per_page: type: integer required: - has_previous_page - has_next_page - start_cursor - end_cursor - per_page required: - posts - pagination example: posts: - id: 3 publication_id: 127 created_at: '2026-06-11T16:15:02Z' title: Draft Post slug: null description: null meta_description: null status: draft published_at: null sent_at: null thumbnail_alt: null thumbnail_url: null is_paid: false public_url: null - id: 2 publication_id: 126 created_at: '2026-06-11T16:15:02Z' title: Email and Web Post slug: email-and-web-post description: null meta_description: null status: published published_at: '2026-06-09T16:15:02Z' sent_at: '2026-06-11T16:15:02Z' thumbnail_alt: null thumbnail_url: null is_paid: false public_url: https://asdf.kit.com/posts/email-and-web-post - id: 1 publication_id: 125 created_at: '2026-06-11T16:15:02Z' title: Web Only Post slug: web-only-post description: null meta_description: null status: published published_at: '2026-06-10T16:15:02Z' sent_at: null thumbnail_alt: null thumbnail_url: null is_paid: false public_url: https://asdf.kit.com/posts/web-only-post pagination: has_previous_page: false has_next_page: false start_cursor: WzNd end_cursor: WzFd per_page: 500 x-mcp: enabled: true /v4/posts/{id}: get: summary: Get a post tags: - Posts security: - API Key: [] - OAuth2: [] parameters: - name: id in: path required: true schema: type: integer example: 29 responses: '200': description: Returns the post details content: application/json: schema: type: object properties: post: type: object properties: id: type: integer publication_id: type: integer description: Identifier of the underlying publication. Posts that were also sent as broadcasts share the same `publication_id` — use it to match a post to its broadcast via `GET /v4/broadcasts`. created_at: type: string title: type: string slug: type: string description: nullable: true meta_description: nullable: true status: type: string published_at: type: string sent_at: nullable: true thumbnail_alt: nullable: true thumbnail_url: nullable: true is_paid: type: boolean public_url: type: string content: type: string required: - id - publication_id - created_at - title - slug - description - meta_description - status - published_at - sent_at - thumbnail_alt - thumbnail_url - is_paid - public_url - content required: - post example: post: id: 25 publication_id: 149 created_at: '2026-06-11T16:15:07Z' title: My Newsletter Post slug: my-newsletter-post description: null meta_description: null status: published published_at: '2026-06-10T16:15:07Z' sent_at: null thumbnail_alt: null thumbnail_url: null is_paid: false public_url: https://asdf.kit.com/posts/my-newsletter-post content: ' ' '404': description: Returns a 404 when the provided id does not exist content: application/json: schema: type: object properties: errors: type: array items: type: string required: - errors example: errors: - Not Found x-mcp: enabled: true components: securitySchemes: API Key: description: Authenticate API requests via an API Key type: apiKey in: header name: X-Kit-Api-Key OAuth2: description: Authenticate API requests via an OAuth token type: oauth2 flows: authorizationCode: authorizationUrl: https://api.kit.com/v4/oauth/authorize tokenUrl: https://api.kit.com/v4/oauth/token refreshUrl: https://api.kit.com/v4/oauth/token scopes: read: Read access to Kit API v4 write: Write access to Kit API v4 x-mint: mcp: enabled: true