Documentation
Documentation
https://developers.kit.com/docs
Authentication
https://developers.kit.com/api-reference/authentication
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=<end_cursor>`
in: query
required: false
schema:
nullable: true
- name: before
description: To fetch previous page of results, use `?before=<start_cursor>`
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: '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<!-- -->
'
'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