Appearance
Disconnect your site
- Method:
POST - Path:
/v1/me/sites/{site_id}/disconnect - Operation ID:
disconnectSite - Tags: Connected sites
Send an empty JSON object using the site's own key. Revokes that key and marks its site revoked, just like Disconnect site in show.fm. Existing WordPress posts are retained. Another site's id is 404. A subsequent call with the revoked key returns the normal 401 invalid_api_key response. The usual IP and per-user rate limits apply; no podcast access or paid plan is required to disconnect.
Scope: sites:write.
Make a request
Set these environment variables before running a sample. Each language reads the same values; no identifier needs replacing inside the code.
| Variable | Value to supply |
|---|---|
SHOWFM_API_KEY | Your API key. Keep it on your server. |
SITE_ID | Your site id, returned by the code exchange or WP-CLI registration. |
Samples run on your server: curl 7.76+, Node.js 22+ (TypeScript via your TypeScript runner), Python 3, or PHP 8 with the cURL extension. Never put your API key in browser code.
bash
: "${SHOWFM_API_KEY:?Set SHOWFM_API_KEY in your environment}"
: "${SITE_ID:?Set SITE_ID in your environment}"
curl --fail-with-body --silent --show-error --request POST \
"https://api.show.fm/v1/me/sites/${SITE_ID}/disconnect" \
--header "Authorization: Bearer ${SHOWFM_API_KEY}" \
--header "Content-Type: application/json" \
--data "{}"ts
function env(name: string): string {
const value = process.env[name];
if (!value) throw new Error(`Set ${name} in your environment`);
return value;
}
async function main() {
const url = new URL(`https://api.show.fm/v1/me/sites/${encodeURIComponent(env("SITE_ID"))}/disconnect`);
const response = await fetch(url, {
method: "POST",
headers: {
Authorization: `Bearer ${env("SHOWFM_API_KEY")}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
}),
signal: AbortSignal.timeout(30_000)
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
console.log(JSON.stringify(await response.json(), null, 2));
}
main().catch(error => {
console.error(error);
process.exitCode = 1;
});js
function env(name) {
const value = process.env[name];
if (!value) throw new Error(`Set ${name} in your environment`);
return value;
}
async function main() {
const url = new URL(`https://api.show.fm/v1/me/sites/${encodeURIComponent(env("SITE_ID"))}/disconnect`);
const response = await fetch(url, {
method: "POST",
headers: {
Authorization: `Bearer ${env("SHOWFM_API_KEY")}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
}),
signal: AbortSignal.timeout(30_000)
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
console.log(JSON.stringify(await response.json(), null, 2));
}
main().catch(error => {
console.error(error);
process.exitCode = 1;
});python
import os
import json
from urllib.parse import quote, urlencode
from urllib.request import Request, urlopen
from urllib.error import HTTPError
url = f'https://api.show.fm/v1/me/sites/{quote(os.environ["SITE_ID"], safe="")}/disconnect'
body = json.dumps({
}).encode()
request = Request(url, data=body, method="POST", headers={
"Authorization": "Bearer " + os.environ["SHOWFM_API_KEY"],
"Content-Type": "application/json"
})
try:
with urlopen(request, timeout=30) as response:
print(json.dumps(json.load(response), indent=2))
except HTTPError as error:
raise RuntimeError(f"HTTP {error.code}: {error.read().decode()}") from errorphp
<?php
function requiredEnv(string $name): string {
$value = getenv($name);
if ($value === false || $value === '') {
throw new RuntimeException("Set $name in your environment");
}
return $value;
}
$url = "https://api.show.fm" . "/v1/me/sites/" . rawurlencode(requiredEnv("SITE_ID")) . "/disconnect";
$curl = curl_init($url);
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . requiredEnv("SHOWFM_API_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode((object) [
], JSON_THROW_ON_ERROR),
]);
$body = curl_exec($curl);
if ($body === false) {
throw new RuntimeException(curl_error($curl));
}
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($status < 200 || $status >= 300) {
throw new RuntimeException("HTTP $status: $body");
}
echo json_encode(json_decode($body, false, 512, JSON_THROW_ON_ERROR), JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . PHP_EOL;Base URL
https://api.show.fm
Authentication
apiKey: HTTP bearer
An API key from Settings → API keys.
showfm_live_in production.
Path parameters
site_id(required):string, format:uuidYour site's id (UUID), from the code exchange or WP-CLI registration. Only the calling site key's own site.
Request body
Required: true
Content type: application/json
object, schema: DisconnectSiteRequest, no additional properties
Send an empty JSON object. The authenticated site key and the site ID in the path select the connection to disconnect; no identity or options are accepted in the body.
Responses
Browse the documented response statuses, headers and body fields.
200 OK
Response headers
RateLimit-PolicyThe bucket that applied, e.g.
"account";q=60;w=60.stringRateLimitRequests left and seconds to reset, e.g.
"account";r=59;t=42.string
Response body
Content type: application/json
no additional properties
data(required): DisconnectedSite
400, 401, 403, 404, 500, 503
400invalid_request: a bad body (seeerror.details), or a key sent in the URL.401unauthorized(no Bearer key) orinvalid_api_key.403insufficient_scope,forbidden(role or team-key setting) orplan_upgrade_required.404not_found: the key cannot reach this resource.500internal_error. Retry; quoteX-Request-Idif it persists.503service_unavailable. Retry shortly.
Response body
Content type: application/json
schema: Error, no additional properties
error(required):object, no additional propertiescode(required):string, possible values:"invalid_request", "not_found", "unavailable", "unauthorized", "invalid_api_key", "insufficient_scope", "forbidden", "plan_upgrade_required", "rate_limited", "service_unavailable", "internal_error", "not_implemented"message(required):stringdetails:arrayItems:
no additional properties
field(required):stringmessage(required):stringreason:stringA stable reason a client may branch on, for example
outside_retention.
docs_url:stringrequest_id:string
429 rate_limited. Wait for Retry-After seconds.
rate_limited. Wait for Retry-After seconds. Response headers
Retry-AfterintegerRateLimit-PolicyThe bucket that applied, e.g.
"account";q=60;w=60.stringRateLimitRequests left and seconds to reset, e.g.
"account";r=59;t=42.string
Response body
Content type: application/json
Uses the shared Error schema. View response fields.