---
title: "Reauthorize Account"
method: POST
path: "/v1/accounts/{account_id}/reauthorize"
tags: ["accounts"]
---

# Reauthorize Account

`POST /v1/accounts/{account_id}/reauthorize`

## Request

- Base URL: `https://api.usekeel.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.usekeel.io/v1/accounts/{account_id}/reauthorize`
- Auth: none declared

Stage a replacement agent key and return the EIP-712 payload to sign.

C9 (incident 2026-08-03 follow-up 1): this endpoint used to ROTATE the
active signing key (disabling the live KMS signer) and drop the account to
'pending_authorization' BEFORE any wallet signature existed — abandoning
the wallet prompt stranded a previously healthy account on a dead signer.

Now nothing about the live identity changes here. A replacement key is
minted in 'pending' status ALONGSIDE the active one (it cannot sign), its
identity + fresh nonces are staged under meta.pending_reauth, and the swap
(venue approval → key activation → account row update) happens atomically
in /authorize only AFTER the new approveAgent signature succeeds. An
abandoned or failed reauth leaves the account fully functional on its
previous agent; re-entering the flow reuses the staged pending key with
fresh nonces.

The body runs inside the account-flow boundary (Q-2614,
services/account_flow_events.py, flow ``reauthorize``): every refusal is
recorded once, there.

## Path parameters

- `account_id` string, required

## Headers

- `Authorization` string, nullable
- `X-Org-Id` string, nullable

## Response `200`

Successful Response

- ReauthorizeResponse
  - `account_id` string, required
  - `new_agent_address` string, required
  - `eip712_approve_agent` object, required
  - `displacement_warning` DisplacementWarning: Informed-evict nudge (Q-0324): approving this wallet's agent will displace the wallet's existing Keel agent. Cross-org rows never carry the other org's data — scope + live impact only; strategy_name is same-org only.
    - `scope` 'other_org' | 'same_org', required
    - `live_strategy_affected` boolean, required
    - `strategy_name` string, nullable

## Other responses

- `422`: Validation Error

---

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