---
title: "Revoke Grant"
method: POST
path: "/api/v1/admin/users/{user_id}/revoke-grant"
tags: ["admin"]
---

# Revoke Grant

`POST /api/v1/admin/users/{user_id}/revoke-grant`

## Request

- Base URL: `https://api.peil.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.peil.app/api/v1/admin/users/{user_id}/revoke-grant`
- Auth: OAuth 2 (password, token URL `/api/v1/auth/jwt/login`)

Withdraw a Pro grant (reverse-trial, founder, or admin comp) immediately.

Scoped deliberately narrow. This ends *granted* Pro — it does not touch a
paid subscription, deactivate the account, or delete anything, so the worst
case of a wrong call is a user who has to be re-granted.

Note on what a grant does *not* expose: outbound mail is separately gated on
`is_verified` at every send path (invoices.py — manual send, reminders,
scheduled send), so an unverified account cannot mail anyone whatever its
plan says. Revoking is therefore plan hygiene — reclaiming an entitlement
that was handed out automatically — not an incident response.

`is_founder` is left set on purpose. It is a durable historical marker of
who registered in the launch window, not an entitlement — it gates *price*
eligibility, which only matters if they ever pay. Clearing it would rewrite
the record of what happened; expiring the grant is what changes access.

## Path parameters

- `user_id` integer, required

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/peil/apis/peil-api.md) · [All operations](https://skmtc.dev/peil/apis/peil-api/llms.txt) · [OpenAPI document](https://skmtc.dev/peil/apis/peil-api/revisions/ee3ca1246dde?raw)
