---
title: "Email yourself a fresh API key"
method: POST
path: "/v1/keys/resend"
tags: ["Account"]
---

# Email yourself a fresh API key

`POST /v1/keys/resend`

## Request

- Base URL: `https://api.puntersedge.online`
- URL: `https://api.puntersedge.online/v1/keys/resend`
- Auth: API key in header `X-API-Key`

Rotate this account's key and mail the new one to its own verified address.

Keys are sha256-hashed on insert and cannot be read back, /v1/keys/rotate needs the key
you have lost, and the only regenerate UI is gated behind plan == "members" (the tips
subscription), which no API customer holds. So there was no self-serve recovery at all:
to 2026-08-25, 22 distinct IPs reached /account against 45 that minted a key.

⛔ ALWAYS 202, WHATEVER HAPPENS — unknown address, unverified account, rate-limited,
mail failure. The response is byte-identical in every case. An endpoint that says
"no such account" is an account-existence oracle for anyone with a list of emails, and
this one names a mailbox that receives credentials.

The key goes ONLY to the address already stored and verified on the row. Nothing the
caller sends is used as a destination, so submitting someone else's address mails that
person their own key and tells the requester nothing.

Cost: 0 credits. Unauthenticated by necessity — the credential is the thing that is lost.

⚠️ KNOWN, ACCEPTED: response time is longer when the address does exist, because the send
is awaited (see below). That leaks account existence to an attacker who can measure it.
Accepted deliberately — the alternative is committing a rotation before knowing the mail
went, which strands a real customer with a dead key. A timing signal on account existence
is worth less than a customer's working credential, and the per-IP cap bounds sampling.

## Request body

- KeyResendIn
  - `email` string, email, required

## Response `202`

Successful Response

- unknown

## Other responses

- `401`: Missing or invalid API key. Send `X-API-Key`. See https://puntersedge.online/developers/errors
- `402`: Monthly credit allowance exhausted for this plan. Upgrade at https://puntersedge.online/api/pricing
- `422`: Validation Error
- `429`: Rate limit exceeded for this plan. Honour the `Retry-After` header (seconds) before retrying. See https://puntersedge.online/developers/rate-limits
- `500`: Unexpected server error. Safe to retry with backoff.

---

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