Uninstall
DELETE/app_installs/:id
In one transaction: the install is uninstalled (with the optional reason), unexchanged codes
are burned, refresh and access tokens revoked, its source switched off (kept for a reinstall),
its events held while paused are errored, integration.disconnected is queued to its webhook
(signed, retried), and its subscription retired. Optionally revokes the legacy token it replaced
and deletes the recording copies KudosCRM made for its calls (files people attached stay). Links to
records are kept.
integrations.manage. Throttle: app_installs/write/minute, 30 a minute.
Revoking the legacy token also needs settings.manage_api_tokens (the token-admin key). Without
it the uninstall still succeeds, the token stays active, meta.legacy_token.reason is
needs_token_admin, and the workspace's token admins are notified.
A signed-in session or the person's own personal access token; an app's OAuth token is refused
(403 resource_not_grantable).
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
Uninstalled — the install as it now reads, and what became of the legacy token.
No session or token, or one that is no longer valid. A request that presented a token gets
WWW-Authenticate: Bearer realm="KudosCRM", error="invalid_token" (refresh it); one with no
credentials and no session cookie gets the bare challenge.
Response Headers
Bearer realm="KudosCRM", error="invalid_token"Not allowed: the permission this route needs is missing, the Integrations module is off
(code: module_disabled, meta.module_key, meta.blocked_at_layer), or the caller is an app's
own OAuth token (code: resource_not_grantable).
Not found in this workspace — or not something the caller may know exists.
The install's lifecycle refused the change: not_installed / already_uninstalled (an uninstalled
install), already_paused / not_paused, invalid_decision / nothing_pending (re-consent),
install_paused / app_suspended / no_subscription (retries), not_replayable /
payload_gone / subscription_inactive / not_granted / not_subscribed (replays), test_unavailable.
A throttle refused the request. Wait Retry-After seconds — the time left in the refusing window
plus 0–3 s of jitter. The X-RateLimit-* headers describe the bucket that refused it.
Response Headers
Seconds until the window rolls.