---
title: "Hard Delete User"
method: DELETE
path: "/admin/users/{user_id}"
tags: ["admin"]
---

# Hard Delete User

`DELETE /admin/users/{user_id}`

## Request

- Base URL: `https://api.iridiumhqmcp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.iridiumhqmcp.com/admin/users/{user_id}`
- Auth: none declared. Required headers: `x-admin-key`

Permanently remove a user and everything that hangs off them. No grace period.

Deliberately NOT shared_account.delete_user: that soft-deletes into the 30-day reactivate
window, which is right for a person leaving and wrong for both callers here — the smoke
suite tearing down its own fixture, and pruning seeded or junk accounts off the roster.

A row-level DELETE lets the ondelete="CASCADE" foreign keys do the work, so this also
removes the user's audit rows and consent record. That is the trade: PP §8 says audit logs
survive deletion and _PURGE_MODELS preserves them, so reach for this only when there is no
real user relationship to document — a test fixture, a duplicate, a fake address. Use
delete_user for an actual person.

One admin_hard_delete row with user_id=NULL survives as the record, since anything keyed to
the user cascades away with them.

## Path parameters

- `user_id` string, uuid, required

## Query parameters

- `force` boolean: Delete even if a Stripe subscription exists

## Headers

- `x-admin-key` string, required

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/iridiumhqmcp/apis/iridium-linkedin-for-ai-agents.md) · [All operations](https://skmtc.dev/iridiumhqmcp/apis/iridium-linkedin-for-ai-agents/llms.txt) · [OpenAPI document](https://skmtc.dev/iridiumhqmcp/apis/iridium-linkedin-for-ai-agents/revisions/b9f5e020543c?raw)
