---
title: "Read an entry as it was"
method: GET
path: "/api/entity/{vhid}/revisions/{ref}"
tags: ["Proposing changes"]
---

# Read an entry as it was

`GET /api/entity/{vhid}/revisions/{ref}`

## Request

- Base URL: `https://verifiedhandles.org`
- URL: `https://verifiedhandles.org/api/entity/{vhid}/revisions/{ref}`
- Auth: HTTP bearer

The whole entry as it was at one revision made on Verified Handles, for proposing to put it back. History kept from the old wiki is wikitext, not fields: `not_restorable`. A hidden revision is `not_found`. An email address is masked, as in the editor’s context, for an account that may not edit the entry live.

## Path parameters

- `vhid` string, required
- `ref` string, required

## Response `200`

The entry as it was.

- RevisionState: An entry as it was at one revision, as a revert would put it back.
  - `vhid` string, required
  - `revision` object, required
    - `ref_id` string, required
    - `ts` string, date-time, required
    - `summary` string, nullable, required
    - `hidden` boolean, required
  - `fields` object, required: The fields as they were.
    - `title` string, required
    - `subtitle` string, nullable, required
    - `description` string, nullable, required
    - `short` string, nullable, required
    - `image_id` string, nullable, required
    - `gallery` string[], required
    - `image_links` object, required
    - `custom_handle_order` boolean, required
  - `handles` object[], required: The handles as they were, in order.
    - `platform_id` string, required
    - `value` string, nullable, required: Null for an email address when the caller may not edit the entry live.
    - `display` string, nullable, required
    - `masked` true: Present on a masked email: the address is kept but not shown.
    - `ref` string, nullable: On a masked email: which stored handle it is (null when the entry no longer has it). Send it back as `{platform_id, value: null, ref}` to keep that address; leave it out of the list to remove it.
  - `unavailable_images` string[], required: Images it showed that may not be proposed again (withdrawn or gone since).

## Other responses

- `400`: The revision is not one made on Verified Handles (`not_restorable`). 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`: The account may not propose to this entry. A read-only key tried to change something (`read_only_key`), or the account is blocked (`forbidden`).
- `404`: No public entry has that VHID, or no visible revision has that id.
- `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)
