curl --request GET \
--url https://api.kit.com/v4/subscribers \
--header 'X-Kit-Api-Key: <api-key>'require 'uri'
require 'net/http'
url = URI("https://api.kit.com/v4/subscribers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Kit-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_bodyconst options = {method: 'GET', headers: {'X-Kit-Api-Key': '<api-key>'}};
fetch('https://api.kit.com/v4/subscribers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kit.com/v4/subscribers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Kit-Api-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kit.com/v4/subscribers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Kit-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import requests
url = "https://api.kit.com/v4/subscribers"
headers = {"X-Kit-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"subscribers": [
{
"id": 204,
"state": "active",
"first_name": "Alice",
"email_address": "alice@convertkit.dev",
"created_at": "2023-01-27T11:43:55Z",
"fields": {
"category": "One"
},
"attribution": {
"referrer": "https://t.co/abc123",
"utm_source": "twitter",
"utm_medium": "cpc",
"utm_campaign": "spring_launch",
"utm_term": "newsletter+for+creators",
"utm_content": "hero_cta",
"source_type": "form_subscription",
"source_name": "Welcome Form",
"source_mechanism": "landing_page",
"source_mechanism_id": null
},
"tags": [
{
"id": 1,
"name": "VIP"
}
],
"location": {
"city": "Portland",
"state": "OR",
"country": "US",
"latitude": 45.5,
"longitude": -122.6,
"timezone": "America/Los_Angeles"
}
},
{
"id": 205,
"state": "active",
"first_name": "Benito",
"email_address": "benito@convertkit.dev",
"created_at": "2023-02-03T11:43:55Z",
"fields": {},
"attribution": {
"referrer": "https://creator.kit.com/jane-smith",
"utm_source": "kit",
"utm_medium": "referral",
"utm_campaign": null,
"utm_term": null,
"utm_content": null,
"source_type": "form_subscription",
"source_name": "Jane Smith's Recommendations",
"source_mechanism": "recommendations",
"source_mechanism_id": null
},
"tags": [
{
"id": 2,
"name": "Newsletter"
}
],
"location": {
"city": "Austin",
"state": "TX",
"country": "US",
"latitude": 30.27,
"longitude": -97.74,
"timezone": "America/Chicago"
}
},
{
"id": 206,
"state": "active",
"first_name": "Camille",
"email_address": "camille@convertkit.dev",
"created_at": "2023-02-10T11:43:55Z",
"fields": {},
"attribution": {
"referrer": null,
"utm_source": null,
"utm_medium": null,
"utm_campaign": null,
"utm_term": null,
"utm_content": null,
"source_type": "api_subscription",
"source_name": "Partner Integration",
"source_mechanism": "api",
"source_mechanism_id": 12345
},
"tags": [],
"location": null
},
{
"id": 207,
"state": "active",
"first_name": "Elliot",
"email_address": "elliot@convertkit.dev",
"created_at": "2023-02-13T11:43:55Z",
"fields": {},
"attribution": {
"referrer": null,
"utm_source": null,
"utm_medium": null,
"utm_campaign": null,
"utm_term": null,
"utm_content": null,
"source_type": null,
"source_name": null,
"source_mechanism": null,
"source_mechanism_id": null
},
"tags": [
{
"id": 3,
"name": "Imported"
}
],
"location": {
"city": null,
"state": null,
"country": null,
"latitude": null,
"longitude": null,
"timezone": null
}
}
],
"pagination": {
"has_previous_page": false,
"has_next_page": false,
"start_cursor": "MjAyMy0wMS0yNyAxMTo0Mzo1NSBVVEM=",
"end_cursor": "MjAyMy0wMi0xMyAxMTo0Mzo1NSBVVEM=",
"per_page": 500
}
}{
"errors": [
"The access token is invalid"
]
}{
"errors": [
"The status param must be `cancelled` if sort_field is `cancelled_at`"
]
}List subscribers
Returns a cursor-paginated list of subscribers in the account. By default only active subscribers are returned — use status (active, inactive, bounced, complained, cancelled, or all) to widen the search. Look a subscriber up by exact email_address, filter by created_after/created_before and updated_after/updated_before, and order with sort_field (id, created_at, updated_at, cancelled_at, or an engagement__<metric>) and sort_order.
Use include (comma-separated: attribution, tags, location, canceled_at) to embed extra fields on each subscriber — including canceled_at without status=cancelled returns a 422. Set slim=true to omit the fields object (custom field values) for a faster, smaller response.
Ordering by an engagement metric (opens, clicks, sends over the trailing 90 days) is supported here via sort_field=engagement__<metric>, but cannot be combined with an email_address filter. To filter subscribers by engagement, use Filter subscribers by engagement instead.
Results are eventually consistent and may briefly lag very recent changes — see Eventual consistency.
curl --request GET \
--url https://api.kit.com/v4/subscribers \
--header 'X-Kit-Api-Key: <api-key>'require 'uri'
require 'net/http'
url = URI("https://api.kit.com/v4/subscribers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Kit-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_bodyconst options = {method: 'GET', headers: {'X-Kit-Api-Key': '<api-key>'}};
fetch('https://api.kit.com/v4/subscribers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kit.com/v4/subscribers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Kit-Api-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kit.com/v4/subscribers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Kit-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import requests
url = "https://api.kit.com/v4/subscribers"
headers = {"X-Kit-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"subscribers": [
{
"id": 204,
"state": "active",
"first_name": "Alice",
"email_address": "alice@convertkit.dev",
"created_at": "2023-01-27T11:43:55Z",
"fields": {
"category": "One"
},
"attribution": {
"referrer": "https://t.co/abc123",
"utm_source": "twitter",
"utm_medium": "cpc",
"utm_campaign": "spring_launch",
"utm_term": "newsletter+for+creators",
"utm_content": "hero_cta",
"source_type": "form_subscription",
"source_name": "Welcome Form",
"source_mechanism": "landing_page",
"source_mechanism_id": null
},
"tags": [
{
"id": 1,
"name": "VIP"
}
],
"location": {
"city": "Portland",
"state": "OR",
"country": "US",
"latitude": 45.5,
"longitude": -122.6,
"timezone": "America/Los_Angeles"
}
},
{
"id": 205,
"state": "active",
"first_name": "Benito",
"email_address": "benito@convertkit.dev",
"created_at": "2023-02-03T11:43:55Z",
"fields": {},
"attribution": {
"referrer": "https://creator.kit.com/jane-smith",
"utm_source": "kit",
"utm_medium": "referral",
"utm_campaign": null,
"utm_term": null,
"utm_content": null,
"source_type": "form_subscription",
"source_name": "Jane Smith's Recommendations",
"source_mechanism": "recommendations",
"source_mechanism_id": null
},
"tags": [
{
"id": 2,
"name": "Newsletter"
}
],
"location": {
"city": "Austin",
"state": "TX",
"country": "US",
"latitude": 30.27,
"longitude": -97.74,
"timezone": "America/Chicago"
}
},
{
"id": 206,
"state": "active",
"first_name": "Camille",
"email_address": "camille@convertkit.dev",
"created_at": "2023-02-10T11:43:55Z",
"fields": {},
"attribution": {
"referrer": null,
"utm_source": null,
"utm_medium": null,
"utm_campaign": null,
"utm_term": null,
"utm_content": null,
"source_type": "api_subscription",
"source_name": "Partner Integration",
"source_mechanism": "api",
"source_mechanism_id": 12345
},
"tags": [],
"location": null
},
{
"id": 207,
"state": "active",
"first_name": "Elliot",
"email_address": "elliot@convertkit.dev",
"created_at": "2023-02-13T11:43:55Z",
"fields": {},
"attribution": {
"referrer": null,
"utm_source": null,
"utm_medium": null,
"utm_campaign": null,
"utm_term": null,
"utm_content": null,
"source_type": null,
"source_name": null,
"source_mechanism": null,
"source_mechanism_id": null
},
"tags": [
{
"id": 3,
"name": "Imported"
}
],
"location": {
"city": null,
"state": null,
"country": null,
"latitude": null,
"longitude": null,
"timezone": null
}
}
],
"pagination": {
"has_previous_page": false,
"has_next_page": false,
"start_cursor": "MjAyMy0wMS0yNyAxMTo0Mzo1NSBVVEM=",
"end_cursor": "MjAyMy0wMi0xMyAxMTo0Mzo1NSBVVEM=",
"per_page": 500
}
}{
"errors": [
"The access token is invalid"
]
}{
"errors": [
"The status param must be `cancelled` if sort_field is `cancelled_at`"
]
}Authorizations
Authenticate API requests via an API Key
Query Parameters
To fetch next page of results, use ?after=<end_cursor>
To fetch previous page of results, use ?before=<start_cursor>
Filter subscribers who have been created after this date (format yyyy-mm-dd)
Filter subscribers who have been created before this date (format yyyy-mm-dd)
Comma-separated list of additional fields to include on each subscriber. Valid options: attribution, tags, location, canceled_at. canceled_at may only be used together with status=cancelled.
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.
Number of results per page. Default 500, maximum 1000.
When true, omits expensive optional fields from the response. Produces a faster, smaller response — useful when extra fields are not needed.
Field to order by. id (default), created_at, or updated_at order by that subscriber attribute. cancelled_at (alias canceled_at) orders by cancellation date and requires status=cancelled. engagement__<metric> orders by an engagement stat over the trailing 90 days: counts (sent, opens, clicks) and rates (open_rate, click_rate); subscribers with no sends order as 0. Engagement sorts cannot be combined with an email_address filter.
id, created_at, updated_at, cancelled_at, canceled_at, engagement__sent, engagement__opens, engagement__clicks, engagement__open_rate, engagement__click_rate asc, desc Filter subscribers who have this status (active, inactive, bounced, complained, cancelled or all). Defaults to active.
active, inactive, bounced, complained, cancelled, all Filter subscribers who have been updated after this date (format yyyy-mm-dd)
Filter subscribers who have been updated before this date (format yyyy-mm-dd)
Related topics
Upgrading to V4List subscribers for a sequenceList subscribers for a tagList subscribers for a formList tagsWas this page helpful?