---
title: "Check a claim’s proof"
method: POST
path: "/api/claims/{id}/verify"
tags: ["Claiming an entry"]
---

# Check a claim’s proof

`POST /api/claims/{id}/verify`

## Request

- Base URL: `https://verifiedhandles.org`
- URL: `https://verifiedhandles.org/api/claims/{id}/verify`
- Auth: HTTP bearer

Checks the claim’s proof by its method: the token on the page the entry lists (`url`, fetched once, through the same guard as every fetch the site makes), in a DNS TXT record (`dns`), or your account’s verified email being an address the entry lists or a role address (admin@, administrator@, webmaster@, hostmaster@, postmaster@) at a domain it lists (`email`). Found, the entry is claimed at once: it is yours, and the Wikidata sync stops changing it (unless it is locked to admins). Found on an entry someone else holds: 202 `{"review":"transfer"}`, and an administrator decides the transfer in the review queue; nothing changes until then. Any other address at a domain the entry lists is not proof, but evidence: 202 `{"review":"domain"}`, for an administrator to decide. Either way the claimant is emailed the decision, and checking again answers the same 202. Not found: 422, with what was seen, and the claim stays open to check again until it expires. Its submitter may check it, and so may a reviewer.

## Path parameters

- `id` string, required

## Response `200`

The proof was found: the entry is claimed.

- object
  - `ok` true, required
  - `vhid` string, required

## Other responses

- `202`: Filed for an administrator: a passing proof on an entry someone else holds (`transfer`), or an ordinary address at a listed domain (`domain`).
- `400`: The claim’s entry is gone (`no_entity`) or its proof is unusable (`bad_evidence`). Or the request sent a key and a session cookie together (`bearer_with_cookie`): send one.
- `401`: No key was sent (`auth_required`), or the key was refused: unknown, revoked or expired, its holder may no longer use keys, or this instance takes none. Carries `WWW-Authenticate: Bearer`. After 60 refused keys from one IP address in a minute, every key from there is answered `429` (text, with `Retry-After`) until the minute is up.
- `403`: Not your claim and not a reviewer (`forbidden`), or the entry takes no claims now (`closed`). A read-only key tried to change something (`read_only_key`), or the account is blocked (`forbidden`).
- `404`: No such claim.
- `409`: Already decided (`already_decided`), or decided or deleted while the proof ran (`conflict`).
- `410`: The token expired: start the claim again.
- `422`: The token was not found: `detail` says what was seen. Put it in place and check again.
- `429`: Too many changes in the last minute: counted per IP address, per account and per key (an admin key’s per key alone, at the limit set on Console → Rate limits). Wait the number of seconds `Retry-After` gives.
- `503`: The site is down for maintenance. The body is the maintenance page, as HTML. Try again later: `Retry-After` gives the seconds.

---

[API](https://skmtc.dev/verifiedhandles/apis/verified-handles-api.md) · [All operations](https://skmtc.dev/verifiedhandles/apis/verified-handles-api/llms.txt) · [OpenAPI document](https://skmtc.dev/verifiedhandles/apis/verified-handles-api/revisions/40720de2e0ec?raw)
