---
title: "Request Account Deletion"
method: POST
path: "/me/deletion"
tags: ["me"]
---

# Request Account Deletion

`POST /me/deletion`

Schedule this account for deletion.

JWT-only, matching ``POST /me/export``: an API key is a machine credential
that tends to outlive the person who minted it and sits in CI config, and
closing the account is not something it should be able to do. The gate is
the same one the export uses for the same reason.

## Request body

- AccountDeletionRequest — Body for POST /me/deletion. ``reason`` is required. Not to make leaving harder — the flow is one dialog either way — but because a deletion with no reason attached is a number on a chart nobody can act on, and this is the only moment the answer is ever available. The accepted values are Dodo's ``CancellationFeedback`` vocabulary verbatim, so the same string is forwarded to Dodo when the account carries a subscription. Validated against ``account_deletion_service.REASONS`` in the handler rather than by a ``Literal`` here, so the list lives in one place next to the code that forwards it.
  - `reason` string, required
  - `comment` string, nullable

## Response `200`

Successful Response

- AccountDeletionResponse — Pending-deletion state, returned by POST /me/deletion. There is no status-read endpoint to pair with this: once the deletion lands, every authenticated route 403s, so the client learns the state from ``deleted_at`` on the ``POST /auth/sync`` response instead — the one route that still answers for a locked-out account.
  - `deletion_requested_at` string, date-time, required
  - `purge_scheduled_at` string, date-time, required
  - `grace_period_days` integer, required

## Other responses

- `422` — Unprocessable Entity

---

[API](https://skmtc.dev/repowise/apis/repowise-hosted-api.md) · [All operations](https://skmtc.dev/repowise/apis/repowise-hosted-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/repowise/repowise-hosted-api/revisions/1e57283a9737/schema)
