---
title: "Demote project admin to regular user"
method: POST
path: "/projects/v1/admin/{project_id}/demote-user"
tags: ["Functions"]
---

# Demote project admin to regular user

`POST /projects/v1/admin/{project_id}/demote-user`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/projects/v1/admin/{project_id}/demote-user`
- Auth: HTTP bearer

Set is_admin = false for a user by email. Lifecycle-gated for non-active projects. The user's next JWT will have role: authenticated (RLS-enforced).

## Path parameters

- `project_id` string, required: Run402 project ID. Public IDs are not UUIDs.

## Request body

- object
  - `email` string, email, required

## Response `200`

User demoted

- object
  - `status` string
  - `email` string

## Other responses

- `403`: Project is past_due/frozen/dormant — control-plane gated
- `404`: User not found

---

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