---
title: "Labels an identity as a store-review identity: from now on `POST /v1/keys` issues it a **verified, non-expiring** key rather than a provisional one, and sends no verification mail."
method: POST
path: "/admin/identities/{email}/reviewer"
tags: ["admin"]
---

# Labels an identity as a store-review identity: from now on \`POST /v1/keys\` issues it a \*\*verified, non-expiring\*\* key rather than a provisional one, and sends no verification mail.

`POST /admin/identities/{email}/reviewer`

## Request

- Base URL: `https://api.mapmap.ai`
- URL: `https://api.mapmap.ai/admin/identities/{email}/reviewer`
- Auth: HTTP bearer

This is the whole of the App Review exemption. It exists because the
MapMap Nav app has no sign-in. Its only route to a key is typing an
email at first run, and a reviewer cannot click a verification link
sent to an inbox nobody gave them, so without it a reviewer can use the
app online but cannot install an offline territory, which is the
capability the store listing leads with. See
`migrations/0034_reviewer_identity.sql` for the full reasoning and the
residual risk, and `docs/RUNBOOK-APP-REVIEW.md` for the procedure.

Deliberately NOT a config flag. It is one named row, it carries a
written reason, it is listed by `GET /admin/identities/reviewer`, every
key issued against it logs at WARN, and `DELETE` revokes it. No other
identity's behaviour changes, and verification is not weakened for
anybody.

## Path parameters

- `email` string, required

## Request body

- SetReviewerRequest: Body for `POST /admin/identities/{email}/reviewer`.
  - `note` string, required: Why this identity exists, who made it and when it can be cleared, e.g. `"App Store submission 1.0.0, Matt, clear after review"`. Required, and stored: it is the audit trail, and it is what stops this becoming a permanently verified account nobody remembers.

## Response `200`

Identity labelled for store review

- ReviewerResponse: Response for the reviewer-identity endpoints.
  - `email` string, required: Canonical (lowercased) identity email.
  - `note` string, nullable: The note now recorded, or `null` when the label has been cleared.

## Other responses

- `400`: Missing or over-long note
- `401`: Missing or wrong admin token
- `404`: Unknown identity email (mint it with POST /v1/keys first)

---

[API](https://skmtc.dev/mapmap/apis/sn-gateway.md) · [All operations](https://skmtc.dev/mapmap/apis/sn-gateway/llms.txt) · [OpenAPI document](https://skmtc.dev/mapmap/apis/sn-gateway/revisions/2293be8b4c38?raw)
