Kit

Kit API V4

Kit API V4 supports OAuth 2.0 and API key authentication. It provides cursor-based pagination, bulk requests, and async processing across subscribers, broadcasts, sequences, tags, custom fields, forms, purchases, and webhook subscriptions. It supersedes the deprecated V3 API.

OpenAPI Specification

kit-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Kit API V4
  description: >-
    Kit (formerly ConvertKit) API V4 for email marketing and the creator
    economy. Manage subscribers, broadcasts, tags, custom fields, forms, and
    account-level statistics. Supports OAuth 2.0 and API key authentication.
  version: v4
  contact:
    name: Kit Developer Support
    url: https://developers.kit.com/v4/api-reference
servers:
  - url: https://api.kit.com/v4
    description: Kit API V4 production server
security:
  - ApiKeyAuth: []
  - OAuth2: []
tags:
  - name: Account
    description: Account, creator profile, and account-level statistics
  - name: Subscribers
    description: Subscriber records and lifecycle
  - name: Broadcasts
    description: One-off email broadcasts
paths:
  /account:
    get:
      operationId: getAccount
      summary: Get Account
      description: Retrieve the current Kit account and associated user information.
      tags:
        - Account
      responses:
        '200':
          description: Successful response with account details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /account/colors:
    get:
      operationId: getAccountColors
      summary: Get Account Colors
      description: List configured color preferences for the account.
      tags:
        - Account
      responses:
        '200':
          description: Successful response with color preferences
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ColorsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    put:
      operationId: updateAccountColors
      summary: Update Account Colors
      description: Update the color preferences for the account.
      tags:
        - Account
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ColorsRequest'
      responses:
        '200':
          description: Updated color preferences
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ColorsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /account/email_stats:
    get:
      operationId: getAccountEmailStats
      summary: Get Email Stats
      description: Retrieve email statistics for the last 90 days.
      tags:
        - Account
      responses:
        '200':
          description: Successful response with email statistics
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /account/growth_stats:
    get:
      operationId: getAccountGrowthStats
      summary: Get Growth Stats
      description: Retrieve subscriber growth metrics for a specified period.
      tags:
        - Account
      parameters:
        - name: starting
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Start of the reporting window (YYYY-MM-DD)
        - name: ending
          in: query
          required: false
          schema:
            type: string
            format: date
          description: End of the reporting window (YYYY-MM-DD)
      responses:
        '200':
          description: Successful response with growth statistics
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatsResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /subscribers:
    get:
      operationId: listSubscribers
      summary: List Subscribers
      description: List subscribers in the Kit account with cursor-based pagination.
      tags:
        - Subscribers
      parameters:
        - name: after
          in: query
          required: false
          schema:
            type: string
          description: Cursor returned by a previous page response
        - name: before
          in: query
          required: false
          schema:
            type: string
          description: Cursor returned by a previous page response
        - name: per_page
          in: query
          required: false
          schema:
            type: integer
            default: 500
          description: Number of records per page
      responses:
        '200':
          description: Successful response with subscriber list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriberListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createSubscriber
      summary: Create Subscriber
      description: Create a subscriber. Behaves as an upsert based on email address.
      tags:
        - Subscribers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriberRequest'
      responses:
        '201':
          description: Subscriber created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriberResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /broadcasts:
    get:
      operationId: listBroadcasts
      summary: List Broadcasts
      description: List all broadcasts, including drafts, scheduled, and sent.
      tags:
        - Broadcasts
      responses:
        '200':
          description: Successful response with broadcast list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BroadcastListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createBroadcast
      summary: Create Broadcast
      description: Create a new broadcast as a draft or scheduled send.
      tags:
        - Broadcasts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BroadcastRequest'
      responses:
        '201':
          description: Broadcast created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BroadcastResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Kit-Api-Key
      description: Personal API key issued from the Kit developer portal
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://app.kit.com/oauth/authorize
          tokenUrl: https://api.kit.com/oauth/token
          scopes: {}
  responses:
    Unauthorized:
      description: Missing or invalid credentials
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  schemas:
    ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            type: string
    Account:
      type: object
      properties:
        name:
          type: string
        plan_type:
          type: string
        primary_email_address:
          type: string
    AccountResponse:
      type: object
      properties:
        account:
          $ref: '#/components/schemas/Account'
    ColorsRequest:
      type: object
      properties:
        colors:
          type: array
          items:
            type: string
    ColorsResponse:
      type: object
      properties:
        colors:
          type: array
          items:
            type: string
    StatsResponse:
      type: object
      properties:
        stats:
          type: object
          additionalProperties: true
    Subscriber:
      type: object
      properties:
        id:
          type: integer
        first_name:
          type: string
        email_address:
          type: string
        state:
          type: string
        created_at:
          type: string
          format: date-time
        fields:
          type: object
          additionalProperties: true
    SubscriberRequest:
      type: object
      required:
        - email_address
      properties:
        email_address:
          type: string
        first_name:
          type: string
        state:
          type: string
        fields:
          type: object
          additionalProperties: true
    SubscriberResponse:
      type: object
      properties:
        subscriber:
          $ref: '#/components/schemas/Subscriber'
    SubscriberListResponse:
      type: object
      properties:
        subscribers:
          type: array
          items:
            $ref: '#/components/schemas/Subscriber'
        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
    Broadcast:
      type: object
      properties:
        id:
          type: integer
        subject:
          type: string
        preview_text:
          type: string
        description:
          type: string
        content:
          type: string
        public:
          type: boolean
        published_at:
          type: string
          format: date-time
          nullable: true
        send_at:
          type: string
          format: date-time
          nullable: true
        created_at:
          type: string
          format: date-time
    BroadcastRequest:
      type: object
      required:
        - subject
      properties:
        subject:
          type: string
        preview_text:
          type: string
        description:
          type: string
        content:
          type: string
        public:
          type: boolean
        send_at:
          type: string
          format: date-time
          nullable: true
    BroadcastResponse:
      type: object
      properties:
        broadcast:
          $ref: '#/components/schemas/Broadcast'
    BroadcastListResponse:
      type: object
      properties:
        broadcasts:
          type: array
          items:
            $ref: '#/components/schemas/Broadcast'