> ## Documentation Index
> Fetch the complete documentation index at: https://developers.kit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Developer platform updates and new features.

<Update label="July 9 2026 — Accounts" tags={["API"]}>
  ## 🚀 New `plan` object on `GET /v4/account`

  The current account endpoint now returns a nested **`plan`** object with plan and trial details, so integrations can tell paying accounts apart from trialing ones without extra lookups:

  * **`plan_type`** — the account's plan type; the same value as the existing top-level `plan_type`, duplicated for convenience.
  * **`interval`** — the plan's billing interval (`month` or `year`).
  * **`subscriber_limit`** — the plan's subscriber tier; `null` means unlimited.
  * **`on_trial`** — `true` while the account is on an active free trial.
  * **`trial_lapse_date`** — when the account's most recent trial ends or ended; `null` if the account never had a trial.
  * **`renews_at`** — when the subscription will renew; only set while the subscription is active and will actually renew.
  * **`cancels_at`** — when a cancelled-but-still-paid-up subscription's access ends; only set while a cancellation is pending. At most one of `renews_at` / `cancels_at` is non-null.

  All existing fields are unchanged, so no integration updates are required.

  Full reference: [Get current account](https://developers.kit.com/api-reference/accounts/get-current-account)
</Update>

<Update label="July 9 2026" tags={["Kit App Store"]}>
  ## 🚀 Preview your app listing before saving

  The app details editor now has a **Preview** button (next to **Save**) that renders your App Store listing with your current unsaved changes — name, summary, icon, images, video, categories, and the markdown description — exactly as creators will see it. It uses the same server-side markdown rendering as the live page, so it's also the quickest way to check which formatting is supported. You can save directly from the preview; published apps still get the go-live confirmation.

  Rolling out to app developers now.

  More: [App details page](https://developers.kit.com/kit-app-store/app-details-page)
</Update>

<Update label="July 7 2026 — Sequence Emails" tags={["API"]}>
  ## 🔧 Sequence email `position` is now guaranteed unique

  Positions within a sequence are now enforced as unique at every write path, so two active emails can no longer share a slot:

  * **Explicit collisions are rejected** — `POST` and `PUT` on `/v4/sequences/{sequence_id}/emails` return **422** if the requested `position` is already taken by another email in that sequence.
  * **Omit `position` to append** — leaving `position` out (or sending `null`) now allocates the next available slot at the end of the sequence instead of writing an empty position.

  Full reference: [Create a sequence email](https://developers.kit.com/api-reference/sequence-emails/create-a-sequence-email) · [Update a sequence email](https://developers.kit.com/api-reference/sequence-emails/update-a-sequence-email)
</Update>

<Update label="June 30 2026 — Subscribers" tags={["API"]}>
  ## 🚀 `POST /v4/subscribers/filter` gains custom fields, location, attribution, and includes

  The subscriber filter endpoint picked up a series of upgrades across June, making it a much more capable segmentation tool:

  * **`custom_field` filter** — match subscribers on any custom field value.
  * **`location` filter** — match subscribers by location.
  * **Attribution filter** — match subscribers by the form or landing page they were attributed to.
  * **`counting_mode` on engagement filters** — choose `raw` (every engagement event) or `unique_email` (one per email) when filtering on opens/clicks.
  * **`include` body parameter** — request extra data alongside each match, including `stats` (engagement stats) and `custom_fields` (custom field values).

  These compose with the existing engagement, `subscribed`, `subscriber_state`, and `tags` filters in the same request. Default behaviour is unchanged — the new conditions and includes are all opt-in.

  Full reference: [Filter subscribers](https://developers.kit.com/api-reference/subscribers/filter-subscribers-by-engagement-sign-up-date-state-and-tags)
</Update>

<Update label="June 30 2026 — Purchases" tags={["API", "Commerce"]}>
  ## 🚀 Purchases now expose `source` and include subscription & tip line items

  Two additions to the v4 Purchases API:

  * Every purchase response now includes a **`source`** field — the name of the originating integration or connected app (e.g. `Gumroad`, `Stripe`, `Teachable`) — on `GET /v4/purchases`, `GET /v4/purchases/{id}`, and the create response.
  * Purchase responses now **include subscription and tip line items** alongside standard product items, so recurring-revenue and tip transactions are fully represented.

  Full reference: [List purchases](https://developers.kit.com/api-reference/purchases/list-purchases) · [Create a purchase](https://developers.kit.com/api-reference/purchases/create-a-purchase)
</Update>

<Update label="June 18 2026" tags={["API"]}>
  ## 🚀 New endpoint: `DELETE /v4/bulk/tags`

  You can now delete multiple tags in a single request with the new bulk endpoint, mirroring the existing bulk create/tag patterns.

  Full reference: [Bulk delete tags](https://developers.kit.com/api-reference/tags/bulk-delete-tags)
</Update>

<Update label="June 11 2026" tags={["API"]}>
  ## 🚀 Opt-in `subscriber_count` on `GET /v4/tags` and `GET /v4/forms`

  Both index endpoints can now return an active **`subscriber_count`** per record when you request it with **`?include=subscriber_count`**. It's opt-in so default responses stay fast — pass the include only when you need the counts.

  Full reference: [List tags](https://developers.kit.com/api-reference/tags/list-tags) · [List forms](https://developers.kit.com/api-reference/forms/list-forms)
</Update>

<Update label="May 29 2026" tags={["API", "Analytics"]}>
  ## 🚀 Engagement rates on `GET /v4/account/email_stats`

  The account email stats endpoint now returns four calculated rates alongside the raw counts: **`open_rate`**, **`click_rate`**, **`unsubscribe_rate`**, and **`bounce_rate`**. You no longer need to derive these client-side from the underlying totals.

  Full reference: [Get email stats](https://developers.kit.com/api-reference/accounts/get-email-stats)
</Update>

<Update label="May 26 2026 — Authentication" tags={["Authentication"]}>
  ## 🔧 `POST /oauth/revoke` now performs full partner-side cleanup

  When a partner revokes a Kit-issued OAuth token, Kit now tears down the linked install state in the same request:

  * Any partner credentials Kit had stored for that account are queued for deletion.
  * The Kit-side installation record is marked uninstalled, so the app no longer appears as installed for that account.

  Previously, revoking a token only invalidated the access grant — installation state and stored credentials lingered until the next sync. App developers who treat `/oauth/revoke` as a clean teardown signal can now rely on it as a single call.

  The HTTP contract of `/oauth/revoke` is unchanged; both the request and the success response remain identical.

  Full reference: [OAuth token revocation](https://developers.kit.com/api-reference/oauth-token-revocation)
</Update>

<Update label="May 26 2026 — Broadcasts" tags={["API"]}>
  ## 🚀 Broadcast `status` field and `?status=` filter on broadcast list endpoints

  Every V4 broadcast response now includes a `status` field with one of `draft`, `scheduled`, `sending`, `completed`, or `aborted`. This removes the need to infer broadcast state from a mix of `send_at`, `published_at`, and other fields.

  `GET /v4/broadcasts` and `GET /v4/broadcasts/stats` also accept a new optional `?status=` query parameter that filters to broadcasts in the given lifecycle state. Passing an unknown value returns `422 Unprocessable Entity` with the list of accepted statuses. Omitting `status` preserves existing behaviour.

  Full reference: [List broadcasts](https://developers.kit.com/api-reference/broadcasts/list-broadcasts) · [Get stats for a list of broadcasts](https://developers.kit.com/api-reference/broadcasts/get-stats-for-a-list-of-broadcasts)
</Update>

<Update label="May 21 2026 — Subscribers" tags={["API"]}>
  ## 🚀 `slim` query parameter on `/v4/subscribers` and `/v4/forms/:form_id/subscribers`

  Two more list endpoints now accept `?slim=true`, extending the slim mode introduced for `GET /v4/broadcasts` and `GET /v4/tags/:tag_id/subscribers` on May 20. In slim mode, the `fields` object (custom field values) is omitted from each subscriber record and the underlying query skips the custom field join entirely, making large list responses noticeably faster.

  Default behaviour is unchanged — pass `slim=true` explicitly to opt in. On `/v4/subscribers`, slim composes with the existing `include=` parameter — the requested includes still resolve, slim only skips the `fields` block. `/v4/forms/:form_id/subscribers` doesn't accept `include=`.

  Full reference: [List subscribers](https://developers.kit.com/api-reference/subscribers/list-subscribers) · [List subscribers for a form](https://developers.kit.com/api-reference/forms/list-subscribers-for-a-form)
</Update>

<Update label="May 21 2026 — Filters" tags={["API"]}>
  ## 🚀 New `subscriber_state` filter on `/v4/subscribers/filter`

  `POST /v4/subscribers/filter` accepts a new filter `type`: `subscriber_state`. Provide a `states` array of one or more lifecycle values — `active`, `inactive`, `bounced`, `cancelled`, or `complained` — and the filter returns subscribers whose current state matches any value in the array.

  `subscriber_state` composes with engagement, `subscribed`, and `tags` filters in the same request. `since` / `before` and `any` don't apply to this type and are ignored when present.

  Most workflows want `states: ["active"]` — that mirrors the default scope of most other subscriber-facing queries in Kit.

  Full reference: [Filter subscribers based on engagement](https://developers.kit.com/api-reference/subscribers/filter-subscribers-based-on-engagement)
</Update>

<Update label="May 20 2026 — Authentication" tags={["Authentication"]}>
  ## 🔧 OAuth refresh token rotation

  Refresh tokens are now single-use. Each call to `POST /oauth/token` with `grant_type=refresh_token` issues a new refresh token and revokes the previous one. Reusing an old refresh token returns `invalid_grant`.

  This affects every OAuth client connected to Kit — including App Store integrations and MCP clients. If you store the refresh token from the original authorisation flow and reuse it across multiple sessions, update your client to store and use the latest refresh token from each refresh response instead. Mainstream OAuth clients handle rotation natively; custom integrations that cache refresh tokens will need a small update.

  ## 🔧 OAuth consent screen — DCR response now RFC 7591-aligned

  Public OAuth clients (Dynamic Client Registration with `confidential: false`) no longer receive `client_secret` or `client_secret_expires_at` in the DCR registration response. The `token_endpoint_auth_method` field is now `none` for public clients. The `.well-known/oauth-authorization-server` discovery document now advertises `token_endpoint_auth_methods_supported: ["client_secret_post", "none"]`. Existing well-formed DCR clients work without changes — this aligns the response with what the server already accepted.

  Full reference: [OAuth refresh token flow](https://developers.kit.com/api-reference/oauth-refresh-token-flow)
</Update>

<Update label="May 20 2026 — API" tags={["API"]}>
  ## 🚀 New fields on V4 sequence responses

  `GET /v4/sequences` and `GET /v4/sequences/{id}` now return two new fields: `email_count` and `subscriber_count`. `email_count` reflects published email templates only (drafts don't count); `subscriber_count` reflects active subscribers. Both are available to all V4 callers (API key and OAuth) — no changes required on your end.

  ## 🚀 New `slim` query parameter on heavy list endpoints

  `GET /v4/broadcasts` and `GET /v4/tags/:tag_id/subscribers` now accept `?slim=true` to skip expensive fields and database queries. For broadcasts, slim mode omits `content`, `public_url`, `email_address`, `email_template`, and `subscriber_filter`. For tag subscribers, it omits custom field values. Default behaviour is unchanged — pass `slim=true` explicitly to opt in.

  Full reference: [List broadcasts](https://developers.kit.com/api-reference/broadcasts/list-broadcasts) · [List subscribers for a tag](https://developers.kit.com/api-reference/tags/list-subscribers-for-a-tag) · [Get a sequence](https://developers.kit.com/api-reference/sequences/get-a-sequence)
</Update>

<Update label="May 14 2026" tags={["Kit App Store", "Automation"]}>
  ## 🚀 Visual Automation templates for all app developers

  App developers can now build, submit, and publish **Visual Automation templates** directly from the developer portal — pre-built automations that creators preview and adopt the moment they install your app.

  * Templates move through *Draft → In review → Approved → Published* states, managed from your app's **Templates** tab.
  * Template review runs alongside [app review](/kit-app-store/going-live) — bundled with app review for unpublished apps, template-only for published apps.
  * Editing a published template's name, description, feature labels, or source automation auto-unpublishes it and sends it back for re-review. The last-approved version stays live for creators until re-approval.
  * Deleting a template removes it from your catalogue; creators who've already adopted it keep their working copy.
  * Once a creator adopts a published template, the automation editor is locked — they can see it but can't change it.

  [Visual Automation templates](/kit-app-store/va-templates)
</Update>

<Update label="May 13 2026" tags={["Plugins", "Automation"]}>
  ## 🚀 Dynamic content blocks and Visual Automation context are now available to all developers

  Two related capabilities are out of limited release and available to every Kit app developer.

  **Dynamic content blocks** — content block plugins that return a Liquid template instead of static HTML, so the rendered output is personalized per subscriber at send time. Configure your event plugin's **Sample data** JSON on the Context card, link a content block to it via `related_plugin_id`, and reference subscriber data in Liquid as `{{ automation.<app>.<event>.* }}`. Full guide: [Dynamic content blocks](/plugins/content-blocks/dynamic-blocks/overview).

  **Visual Automation context** — event plugins can now attach an optional `context` object to each event, and Kit makes that context available everywhere downstream:

  * In **sequence email** Liquid (body, button URLs, links): `{{ automation.<app>.<event>.<field> }}`.
  * On **dynamic content block** previews and per-subscriber renders.
  * On **action plugin** request bodies as `subscribers[].context.apps.<app>.<event>.*` — your action endpoint receives the same context your event plugin (or another app's event plugin) attached upstream, with no extra lookup.

  **Limits:** 64 KB per subscriber context row, 32 distinct app namespaces, 64 keys per app. Over-limit data is dropped silently rather than blocking the VA.

  See [automation node plugin configuration → Event context](/plugins/automation-nodes/plugin-configuration#event-context) and [Receiving VA context on action payloads](/plugins/automation-nodes/plugin-configuration#receiving-va-context-on-action-payloads).
</Update>

<Update label="May 8 2026 — Broadcast Stats" tags={["API"]}>
  ## 🚀 `GET /v4/broadcasts/stats` — enriched response and date filtering

  `GET /v4/broadcasts/stats` now returns `subject` and `send_at` on every row by default. This eliminates the need for a follow-up `GET /v4/broadcasts/:id` call per row when building subject-line or send-time analyses.

  The endpoint also accepts two new optional query parameters:

  * `sent_after` — filter to broadcasts sent after this ISO 8601 datetime
  * `sent_before` — filter to broadcasts sent before this ISO 8601 datetime

  Omitting both preserves existing response behaviour — no breaking change. Cursor pagination via `per_page` / `after` continues to work as documented.

  **Plan gating:** this endpoint requires a Pro plan or special developer authorisation. Requests from free accounts return `403`.

  Full reference: [/api-reference/broadcasts/get-stats-for-a-list-of-broadcasts](https://developers.kit.com/api-reference/broadcasts/get-stats-for-a-list-of-broadcasts)
</Update>

<Update label="May 8 2026" tags={["API"]}>
  ## 🚀 Sequence Emails CRUD API

  Full CRUD for the individual emails inside a sequence is now available on the V4 API:

  * `GET /v4/sequences/:sequence_id/emails` — list emails in send order. `content` is omitted by default; pass `include_content=true` to include it.
  * `GET /v4/sequences/:sequence_id/emails/:id` — fetch a single email, always with full content.
  * `POST /v4/sequences/:sequence_id/emails` — create an email (`published: false` by default so it doesn't go out until you flip it).
  * `PUT /v4/sequences/:sequence_id/emails/:id` — update subject, content, timing, send days, position, or publish state.
  * `DELETE /v4/sequences/:sequence_id/emails/:id` — remove an email; subscribers already queued for it will skip it.

  Two delay modes: `delay_unit: "days"` follows the sequence schedule, `delay_unit: "hours"` bypasses it and fires once the delay elapses (checked every 15 minutes). Per-email `send_days` overrides the sequence-level schedule (days mode only) — pass `send_days: null` to revert to inheriting it.

  Snippets are referenced inside `content` via `{{ snippet.<key> }}` and resolve at send time, so editing a snippet automatically updates every email referencing it without re-publishing.

  Full reference: [/api-reference/sequence-emails/list-sequence-emails](https://developers.kit.com/api-reference/sequence-emails/list-sequence-emails) · [/api-reference/sequence-emails/get-a-sequence-email](https://developers.kit.com/api-reference/sequence-emails/get-a-sequence-email) · [/api-reference/sequence-emails/create-a-sequence-email](https://developers.kit.com/api-reference/sequence-emails/create-a-sequence-email) · [/api-reference/sequence-emails/update-a-sequence-email](https://developers.kit.com/api-reference/sequence-emails/update-a-sequence-email) · [/api-reference/sequence-emails/delete-a-sequence-email](https://developers.kit.com/api-reference/sequence-emails/delete-a-sequence-email)
</Update>

<Update label="April 29 2026" tags={["API"]}>
  ## 🚀 `GET /v4/subscribers` now supports opt-in enrichment via `include=`

  `GET /v4/subscribers` now accepts an `include=` query parameter that returns additional fields alongside the base subscriber record. Pass a comma-separated list of any of the following values:

  * `include=attribution` — referrer, UTM parameters, and Kit source data per subscriber
  * `include=tags` — array of `{id, name}` tag objects
  * `include=location` — city, state, country, lat, and lng
  * `include=canceled_at` — ISO 8601 cancellation timestamp; requires `status=cancelled` (returns `422` otherwise)

  Values can be combined (e.g. `include=tags,location,canceled_at`). Omitting `include=` leaves existing response shape and performance unchanged. Invalid values return `422` with the full list of accepted options.

  Full reference: [/api-reference/subscribers/list-subscribers](https://developers.kit.com/api-reference/subscribers/list-subscribers)
</Update>

<Update label="April 28 2026" tags={["API"]}>
  ## 🚀 Snippets CRUD API

  Snippets are now available on the V4 API:

  * `GET /v4/snippets` — list snippets, with `snippet_type` and `archived` filters. `content` and `document` are omitted by default — pass `include_content=true` to include them.
  * `GET /v4/snippets/:id` — fetch a single snippet (always includes content).
  * `POST /v4/snippets` — create a snippet.
  * `PUT /v4/snippets/:id` — rename, update content, or archive/restore (pass `archived: true` / `false` in the body).

  Snippets come in two types: *inline* snippets store plain text with Liquid variable support in `content`, and *block* snippets store rich HTML in `document_attributes[value_html]`. A snippet's type is set on creation and cannot be changed via `PUT`.

  Each response includes a `key` field — that's the identifier used to reference a snippet from a broadcast or sequence email via Liquid (`{{ snippet.key }}`). The API also rejects circular references (a snippet nesting itself) with a clear validation error.

  Full reference: [/api-reference/snippets/list-snippets](https://developers.kit.com/api-reference/snippets/list-snippets) · [/api-reference/snippets/get-a-snippet](https://developers.kit.com/api-reference/snippets/get-a-snippet) · [/api-reference/snippets/create-a-snippet](https://developers.kit.com/api-reference/snippets/create-a-snippet) · [/api-reference/snippets/update-a-snippet](https://developers.kit.com/api-reference/snippets/update-a-snippet)
</Update>

<Update label="April 23 2026" tags={["Plugins"]}>
  ## 🚀 Help Text Hyperlinks

  You can now use markdown formatting in the help field of all plugin component library. The following formatting is supported:

  * Hyperlinks: [link text](https://example.com)
  * Bold: **bold**
  * Italic: *italic*

  [Plugin Component Library](https://developers.kit.com/plugins/component-library/overview)
</Update>

<Update label="April 2026" tags={["API"]}>
  ## 🚀 Newsletter posts on the V4 API

  Two new read-only endpoints expose newsletter posts on the V4 API — including drafts and web-only posts that weren't reachable through broadcasts:

  * `GET /v4/posts` — cursor-paginated list (up to 1000 per page). Pass `include_content=true` to return the full HTML body (off by default to keep responses small).
  * `GET /v4/posts/{id}` — fetch a single post, always includes `content`.

  Each response includes `id`, `publication_id`, `title`, `slug`, `description`, `status`, `published_at`, `sent_at`, `thumbnail_url`, `is_paid`, and `public_url`. Use `publication_id` to join a post back to its broadcast via `GET /v4/broadcasts`. Supports API key and OAuth2.

  Full reference: [/api-reference/posts/list-posts](https://developers.kit.com/api-reference/posts/list-posts) · [/api-reference/posts/get-a-post](https://developers.kit.com/api-reference/posts/get-a-post)
</Update>

<Update label="April 2026" tags={["API"]}>
  ## 🚀 Sending addresses on the Account endpoint

  The `GET /v4/account` response now includes a `sending_addresses` array listing every sending address configured on the account. Each entry contains `email_address`, `from_name`, `status`, `is_default`, `is_verified`, and `is_dmarc_configured`. These addresses can be used when creating or updating any email via the API. Unverified addresses are included and marked with `is_verified: false`.

  Full reference: [/api-reference/accounts/get-current-account](https://developers.kit.com/api-reference/accounts/get-current-account)
</Update>

<Update label="April 2026" tags={["API"]}>
  ## 🚀 Sequences CRUD API

  Full CRUD support for sequences is now available on the V4 API. Five endpoints shipped:

  * `GET /v4/sequences` — expanded to return the full sequence object (13 fields including `send_days`, `time_zone`, `email_address`, `exclude_subscriber_sources`)
  * `GET /v4/sequences/:id` — fetch a single sequence by ID
  * `POST /v4/sequences` — create a sequence programmatically
  * `PUT /v4/sequences/:id` — update sequence settings
  * `DELETE /v4/sequences/:id` — soft delete with background cleanup

  Previously, the API only supported listing sequences with minimal fields and managing subscribers. Alongside the soon to be released sequence email endpoints, you can build full sequence management workflows — abandoned checkout flows, upsell journeys, automated templating — without manual intervention in the Kit UI.

  Docs: [developers.kit.com/api-reference/sequences/list-sequences](https://developers.kit.com/api-reference/sequences/list-sequences)
</Update>

<Update label="April 2026" tags={["API"]}>
  ## 🚀 Broadcast date filtering

  `GET /v4/broadcasts` now supports `sent_after` and `sent_before` query parameters for server-side date filtering. Use both together to define a date range, or omit both to preserve existing unfiltered behaviour. Filters are applied before pagination, so page sizes and cursor behaviour remain consistent. Invalid date values return `422` with descriptive error messages.

  This enables incremental sync patterns — instead of fetching your full broadcast history and filtering client-side, call `GET /v4/broadcasts?sent_after=2026-04-16` to retrieve only what's changed since your last run.

  Full reference: [developers.kit.com/api-reference/broadcasts/list-broadcasts](https://developers.kit.com/api-reference/broadcasts/list-broadcasts)
</Update>

<Update label="April 2026" tags={["Plugins"]}>
  ## 🚀 Default values now supported across all plugin settings components

  All plugin settings components now support an optional `default` property that pre-fills the setting value when a creator first adds the component. Previously only available on [Radio Group](/plugins/component-library/radio-group), [Slider](/plugins/component-library/slider), [Toggle](/plugins/component-library/toggle), and [Textarea](/plugins/component-library/textarea), it is now also supported on:

  * [Color Picker](/plugins/component-library/color-picker) (string)
  * [Text Input](/plugins/component-library/text-input) (string)
  * [Numerical Input](/plugins/component-library/numerical-input) (number)
  * [Font Picker](/plugins/component-library/font-picker) (object with `fontFamily` and `fontWeight`)
  * [Select Input](/plugins/component-library/select-input) (string)
  * [Date Picker](/plugins/component-library/date-picker) (string, UTC ISO8601)

  The property is optional and nullable. Existing settings without `default` continue working unchanged.
</Update>

<Update label="March 2026" tags={["Kit App Store"]}>
  ## 🔧 Going-live checklist prompt added to app submission

  The Submit for Approval modal now displays a pre-submission checklist when you click "Submit for approval" in the Distribution tab, with a direct link to the [going-live checklist](https://developers.kit.com/kit-app-store/going-live#app-review-checklist). No changes to the submission API or review process.
</Update>

<Update label="March 2026" tags={["Kit App Store"]}>
  ## 🚀 App Store Search

  The Kit App Store now has free-text search. Creators can search by app name, category, or description with real-time debounced results and fuzzy/partial matching. The category filter has moved into a dropdown co-located with the search input. No API changes — this is an in-product UI feature available at `app.kit.com` under Automate > Apps. See the [App Store overview](https://developers.kit.com/kit-app-store/overview) and [app details page](https://developers.kit.com/kit-app-store/app-details-page) for context on the App Store surface.
</Update>

<Update label="February 2026" tags={["API", "Commerce"]}>
  ## 🔧 Purchases endpoints now return subscriber\_id

  The [List Purchases](https://developers.kit.com/api-reference/purchases/list-purchases) and [Get Purchase](https://developers.kit.com/api-reference/purchases/get-a-purchase) endpoints now include `subscriber_id` in the response, eliminating the need for an extra API call to map a purchase to a subscriber.
</Update>

<Update label="February 2026" tags={["Documentation"]}>
  ## 🚀 Kit Developer Docs MCP server

  Connect your AI coding agent directly to Kit's developer documentation using the [Kit Developer Docs MCP server](https://developers.kit.com/mcp/kit-developer-docs-mcp). Supported clients can query the full API reference on demand, make live API calls on your behalf, and spin up local OAuth servers for testing.
</Update>

<Update label="February 2026" tags={["API", "Webhooks"]}>
  ## 🚀 Custom Field Webhooks & Bulk Updates

  * Introduced 3 new webhook events for custom fields: `custom_field.field_created`, `custom_field.field_deleted`, and `custom_field.field_value_updated`, enabling real-time sync with third-party apps.
  * Added a bulk update endpoint (`POST /v4/bulk/custom_fields/subscribers`) to update multiple custom field values for multiple subscribers in a single API call.
  * [Learn more about webhooks](https://developers.kit.com/api-reference/webhooks/create-a-webhook) and [bulk updates](https://developers.kit.com/api-reference/custom-fields/bulk-update-subscriber-custom-field-values).
</Update>

<Update label="January 2026" tags={["Plugins"]}>
  ## 🚀 Transparent color option now available in color picker

  The [color picker component](https://developers.kit.com/plugins/component-library/color-picker) now supports an `allow_transparent` property that displays a "Transparent" toggle, allowing creators to set colors to transparent.
</Update>

<Update label="December 2025" tags={["Kit App Store"]}>
  ## 🚀 App Settings now live in Kit App Store

  Developers can now set an external "App Settings" URL in their app settings, allowing Creators to be able to customize their app setup post-installation, reducing account bloat by controlling data creation and sync. Read about best practices of how to implement this [here](https://developers.kit.com/kit-app-store/app-details-page#how-to-configure).
</Update>

<Update label="November 2025" tags={["Kit App Store"]}>
  ## 🔧 Improved Kit App Store Sorting

  * Default sorting now highlights the most popular apps by all-time installations.
  * Introduced a "Trending" category for apps gaining traction across our creators.
  * Renamed "Last added" to "Newest" for clarity.
</Update>

<Update label="October 2025" tags={["API", "Analytics"]}>
  ## 🚀 New API endpoints: "List stats for a subscriber" and "Filter subscribers based on engagement"

  Developers can now use Kit's API to filter subscribers by events like `opened`, `clicked`, `sent`, `delivered`, and `subscribed` with customizable date ranges and event counts. [Explore the API](https://developers.kit.com/api-reference/subscribers/filter-subscribers-based-on-engagement) to enhance subscriber engagement tracking. Additionally, the `List stats` endpoint now supports specifying date ranges for subscriber engagement data. [Learn more](https://developers.kit.com/api-reference/subscribers/list-stats-for-a-subscriber).
</Update>

<Update label="October 2025" tags={["Automation", "Plugins"]}>
  ## 🚀 Automation nodes app plugin environment launched

  Developers can now integrate third-party apps with [Kit Visual Automations](https://kit.com/features/automations) using action and event nodes. This opens up powerful new ways for developers to build with Kit, and for creators to automate their workflows.

  * [Event nodes](https://developers.kit.com/plugins/automation-nodes/plugin-flow#event-node) trigger automations on conditions like "call booked" or "survey completed".
  * [Action nodes](https://developers.kit.com/plugins/automation-nodes/plugin-flow#action-node) perform tasks in external systems such as "send an SMS" or "enroll a subscriber in a course".
  * Apps like [Shopify](https://app.kit.com/apps/330), [Thinkific](https://app.kit.com/apps/1451), and [Calendly](https://app.kit.com/apps/2063) are already utilizing these nodes.

  Explore more in our [documentation](https://developers.kit.com/plugins/automation-nodes/overview).
</Update>

<Update label="October 2025" tags={["Kit App Store", "Authentication"]}>
  ## 🚀 Dynamic return URLs for app installations

  Developers can now redirect users back to specific pages after completing an app install using the `return_to` query parameter in [installation flows](https://developers.kit.com/kit-app-store/authentication#externally-initiating-installations), enabling smoother integration experiences that originate from partner sites.
</Update>

<Update label="September 2025" tags={["Documentation"]}>
  ## 📖 Developer changelog now live

  <Frame>
    <img src="https://mintcdn.com/kit-314e57c1/i-AvK0JCWNO96-y6/images/changelog/2025-09-changelog.png?fit=max&auto=format&n=i-AvK0JCWNO96-y6&q=85&s=03d99b89af1c56bf2563463e7546f321" alt="Developer changelog interface" width="2880" height="1450" data-path="images/changelog/2025-09-changelog.png" />
  </Frame>

  Stay up to date with Kit's latest developer platform updates through our new changelog featuring:

  * **Emoji categories**: 🚀 Added, 🔧 Changed, 🐛 Fixed, ⚠️ Breaking Changes
  * **RSS subscription**: Never miss an update with the RSS feed button
  * **Smart filtering**: Filter by product area including Kit App Store, Plugins, API, Authentication, and more
  * **Copy functionality**: Easily share updates with the copy page feature

  [Subscribe to updates](https://developers.kit.com/changelog/rss.xml) to stay informed about the latest changes.
</Update>

<Update label="September 2025" tags={["API"]}>
  ## 🚀 New subscriber stats endpoint available

  Get comprehensive engagement metrics for individual subscribers including sends, opens, clicks, bounce rates, and timestamps via the new [subscriber stats API endpoint](https://developers.kit.com/api-reference/subscribers/list-stats-for-a-subscriber).
</Update>

<Update label="August 2025" tags={["Plugins"]}>
  ## 🚀 New plugin components and dependency support now available

  * New plugin components: [Radio Group](https://developers.kit.com/plugins/component-library/radio-group), [Slider](https://developers.kit.com/plugins/component-library/slider), [Textarea](https://developers.kit.com/plugins/component-library/textarea), [Toggle](https://developers.kit.com/plugins/component-library/toggle), [Numerical Input](https://developers.kit.com/plugins/component-library/numerical-input)
  * New plugin capabilities: [Group](https://developers.kit.com/plugins/component-library/group), [Dependencies](https://developers.kit.com/plugins/component-library/dependencies)
  * Plugin enhancements: Transparency and weights in [Font Picker](https://developers.kit.com/plugins/component-library/font-picker), a11y improvements across all components
</Update>

<Update label="August 2025" tags={["Kit App Store"]}>
  ## 🔧 Kit App Store and app management UX improvements

  * [Entire app cards](https://app.kit.com/apps) now clickable with streamlined navigation and consistent button hierarchy
  * New install button directly on [Build tab](https://app.kit.com/apps?is=created) for faster app testing workflows
  * In app settings (`https://app.kit.com/apps/:app_id/auth`), API and Plugin Authentication separated into distinct sections with clearer plugin type display
</Update>

<Update label="August 2025" tags={["Kit App Store", "Authentication"]}>
  ## 🚀 App Versioning now available for seamless authentication updates

  Developers can now ensure creators have access to their latest functionality through [app versioning](https://developers.kit.com/kit-app-store/app-versioning):

  * Apps automatically create new versions when authentication requirements change
  * Creators receive smart notifications and can update permissions without reinstalling
  * Plugin-level scope control with cumulative permission tracking across all plugins
</Update>

<Update label="August 2025" tags={["Authentication", "API"]}>
  ## 🔧 OAuth flow now starts from api.kit.com

  Kit's OAuth flow [is now initiated](https://developers.kit.com/api-reference/authentication) from `api.kit.com/v4/oauth` for consistency with other API endpoints, replacing the previous `app.kit.com` requirement.
</Update>

<Update label="June 2025" tags={["Kit App Store"]}>
  ## 🚀 Direct app installation URLs now available

  Developers can now [drive app installations directly from their websites](https://developers.kit.com/kit-app-store/authentication#externally-initiating-installations) using `https://app.kit.com/apps/:app_id/install?k_app_id=k_:app_id` without requiring users to first visit Kit App Store.
</Update>

<Update label="June 2025" tags={["Kit App Store"]}>
  ## 🔧 App icons now display consistently across the Kit App Store

  App thumbnails now display as uniform squares (60x60px on detail pages, 40x40px elsewhere) with proper cropping and centering, ensuring professional appearance regardless of original image dimensions.
</Update>

<Update label="June 2025" tags={["Kit App Store", "Plugins"]}>
  ## 🚀 Plugin deletion now available for developers

  Developers can now permanently [delete plugins from their Kit apps](https://developers.kit.com/plugins/managing-plugins#deleting-plugins) to better manage their plugin inventory.
</Update>

<Update label="June 2025" tags={["Documentation", "API", "Kit App Store"]}>
  ## 🚀 Brand new developer documentation platform

  We've completely rebuilt our developer documentation from the ground up, centralizing all developer resources in one comprehensive hub at [developers.kit.com](https://developers.kit.com).

  ### Key improvements include:

  * **Unified resource center**: All guides, tutorials, and API documentation now live in one carefully structured location
  * **Updated content**: Every piece of documentation has been refreshed and expanded, from app creation guides to OAuth implementation tutorials
  * **Enhanced navigation**: Improved site structure makes finding relevant information faster and more intuitive

  ## 🚀 New interactive features

  ### API Sandbox

  * Test Kit's V4 API directly in the documentation
  * Input your API key and make live requests without leaving the docs
  * Perfect for rapid prototyping and testing

  ### Advanced Search & AI Support

  * Full-text search across all documentation
  * Built-in "Ask AI" functionality for instant answers
  * Industry-standard llms.txt and llms-full.txt support for AI integrations

  ## 🔧 Developer experience improvements

  * **Dark mode support**: Documentation now adapts to your preferred viewing mode
  * **SEO optimized**: Better discoverability for developers searching for Kit integration help
  * **Quick action CTAs**: Streamlined paths to sign up, join the developer community, and contact support
  * **Mobile responsive**: Optimized experience across all devices
</Update>
