---
title: "Create a non-enumerating paid-key recovery challenge"
method: POST
path: "/v1/keys/recovery/challenge"
tags: ["Keys"]
---

# Create a non-enumerating paid-key recovery challenge

`POST /v1/keys/recovery/challenge`

## Request

- Base URL: `https://api.m2msentinel.com`
- URL: `https://api.m2msentinel.com/v1/keys/recovery/challenge`
- Auth: none required

Returns the same 202 envelope for known and unknown wallets. An optional original subscription txHash bootstraps legacy paid keys. Free and revoked keys cannot be recovered.

## Request body

- object
  - `userWallet` string, required
  - `txHash` string: Original subscription payment; needed only for a legacy key without a wallet index.

## Response `202`

Structurally identical real or decoy challenge

- RecoveryIntent
  - `status` 'ACCEPTED'
  - `intent` object
    - `id` string, required
    - `userWallet` string, required
    - `expiresAt` string, date-time, required
    - `messageToSign` string, required
  - `next` string[]

## Other responses

- `400`: Malformed input
- `429`: A plan burst limit or bounded public/intent retry limit was exceeded
- `503`: A required dependency is unavailable; the request failed closed

---

[API](https://skmtc.dev/m2msentinel/apis/m2m-sentinel-base-contract-capability-checks-before-you-sign.md) · [All operations](https://skmtc.dev/m2msentinel/apis/m2m-sentinel-base-contract-capability-checks-before-you-sign/llms.txt) · [OpenAPI document](https://skmtc.dev/m2msentinel/apis/m2m-sentinel-base-contract-capability-checks-before-you-sign/revisions/2dadd4e704fd?raw)
