`DELETE /installations/{id}` — revoke everything one installation conferred: its grants, the App's OAuth credentials, then the row.
curl -X DELETE "https://example.com/installations/string"`POST /apps/{id}/installations` — install an App into the caller's acting team, conferring one grant per approved permission. POST
The request carries **no team**: the installing team is the acting team the extractor has already validated is one of the caller's own.
`GET /installations` — every installation held by a team the caller belongs to (ADR-0050 §6). GET
**No team parameter, deliberately.** The set is `auth.team_ids`, so a caller cannot name a team they are not on — the bound is the permission scope rather than an argument to be validated. A caller on two teams gets the union of both. One synthetic page, like every list on this surface: the cost scales with the caller's team count rather than the org's install count, because there is no per-row join.