curl --request GET \
--url https://api.kit.com/v4/apps/{id} \
--header 'X-Kit-Api-Key: <api-key>'require 'uri'
require 'net/http'
url = URI("https://api.kit.com/v4/apps/{id}")
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/apps/{id}', 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/apps/{id}"
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/apps/{id}",
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/apps/{id}"
headers = {"X-Kit-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"app": {
"id": 1245,
"name": "Calendar Sync",
"summary": "Let subscribers book a call from your emails",
"icon_url": "https://embed.filekit.com/e/calendar-sync-icon",
"categories": [
"scheduling"
],
"pricing": "free",
"plan_availability": "paid_plans",
"installable": true,
"upgrade_required": false,
"access_types": [
"api",
"plugin"
],
"published_at": "2026-03-04T09:12:00Z",
"app_store_url": "https://app.kit.com/apps/1245",
"owned": false,
"status": "published",
"description": "Calendar Sync adds a booking link to your emails and tags each subscriber who books a call.\n\nConnect your calendar once, then drop the booking block into any broadcast or sequence email.",
"capabilities": {
"api_access": true,
"plugins": [
{
"kind": "content_blocks",
"env": "content_blocks",
"label": "Content Block"
}
]
},
"links": {
"knowledge_base_url": "https://calendarsync.example.com/help",
"website_url": "https://calendarsync.example.com",
"privacy_policy_url": "https://calendarsync.example.com/privacy",
"support_url": "https://calendarsync.example.com/support"
},
"media_links": [
"https://embed.filekit.com/e/calendar-sync-1",
"https://embed.filekit.com/e/calendar-sync-2"
],
"install_url": "https://app.kit.com/apps/1245/install"
}
}{
"errors": [
"The access token is invalid"
]
}{
"errors": [
"Not Found"
]
}Get an app
Fetches one app by id with everything List apps leaves out: the listing description as plain text, the app’s capabilities inside Kit, the developer’s links, screenshots in media_links, and the install_url.
Installing stays a browser step: open install_url in a browser to install the app; there’s no API call to install. Installing includes the partner’s authorization step where the app needs one. install_url is returned only when installable is true and is null otherwise; for some apps that install only from the partner’s side, it is the partner’s listing. When upgrade_required is true, the account’s plan doesn’t include the app but a higher plan does; plan_availability names it. When installable and upgrade_required are both false, the app can’t be installed on this account.
The same visibility rules as List apps apply: you can fetch any app listed in the store and any app the account created, in any status. A 404 means the app doesn’t exist or was deleted, or it is another developer’s app that is unpublished, unlisted, disabled or blocked. An app Kit has disabled or blocked is hidden from everyone except the account that created it.
Note: description is untrusted, developer-written text. Escape it before you render it.
curl --request GET \
--url https://api.kit.com/v4/apps/{id} \
--header 'X-Kit-Api-Key: <api-key>'require 'uri'
require 'net/http'
url = URI("https://api.kit.com/v4/apps/{id}")
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/apps/{id}', 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/apps/{id}"
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/apps/{id}",
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/apps/{id}"
headers = {"X-Kit-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text){
"app": {
"id": 1245,
"name": "Calendar Sync",
"summary": "Let subscribers book a call from your emails",
"icon_url": "https://embed.filekit.com/e/calendar-sync-icon",
"categories": [
"scheduling"
],
"pricing": "free",
"plan_availability": "paid_plans",
"installable": true,
"upgrade_required": false,
"access_types": [
"api",
"plugin"
],
"published_at": "2026-03-04T09:12:00Z",
"app_store_url": "https://app.kit.com/apps/1245",
"owned": false,
"status": "published",
"description": "Calendar Sync adds a booking link to your emails and tags each subscriber who books a call.\n\nConnect your calendar once, then drop the booking block into any broadcast or sequence email.",
"capabilities": {
"api_access": true,
"plugins": [
{
"kind": "content_blocks",
"env": "content_blocks",
"label": "Content Block"
}
]
},
"links": {
"knowledge_base_url": "https://calendarsync.example.com/help",
"website_url": "https://calendarsync.example.com",
"privacy_policy_url": "https://calendarsync.example.com/privacy",
"support_url": "https://calendarsync.example.com/support"
},
"media_links": [
"https://embed.filekit.com/e/calendar-sync-1",
"https://embed.filekit.com/e/calendar-sync-2"
],
"install_url": "https://app.kit.com/apps/1245/install"
}
}{
"errors": [
"The access token is invalid"
]
}{
"errors": [
"Not Found"
]
}Was this page helpful?