---
title: "Get an entry’s history, at its history page’s address"
method: GET
path: "/{key}/history.json"
tags: ["History"]
---

# Get an entry’s history, at its history page’s address

`GET /{key}/history.json`

## Request

- Base URL: `https://verifiedhandles.org`
- URL: `https://verifiedhandles.org/{key}/history.json`
- Auth: one of:
  - none
  - HTTP bearer

The entry’s public revision history as its history page shows it: newest first, 50 to a page, by page number. `GET /api/v1/entities/{vhid}/history` gives the same revisions with `limit` and `offset` instead. An old name redirects (301) to the same address under the entry’s canonical key, query kept. A merged entry’s key answers with that entry’s own history, and `merged_into` names the entry it became. An entry whose history has been hidden answers 403 `history_hidden`, saying how to ask for it through the contact page.

Same-origin only: it sends no CORS headers. A key is not needed. One that is sent is checked: a bad one is refused (400 or 401) before the route runs, and a good one makes the answer private (`Cache-Control: no-store`, `Vary: Authorization`).

## Path parameters

- `key` string, required

## Query parameters

- `p` integer

## Response `200`

A page of the history.

- EntityHistoryPage: A page of an entry’s public history, as its history page shows it: 50 a page, by page number.
  - `vhid` string, required: The entry’s VHID: 11 digits, permanent.
  - `key` string, required: The entry’s canonical key: its short name, or its VHID when it has none.
  - `merged_into` string: Present when the entry was merged into another: that entry’s VHID. The history is still the merged entry’s own.
  - `page` integer, required: The page, 50 revisions each.
  - `hasMore` boolean, required: There is a next page (`?p=` one more).
  - `history` Revision[], required: Newest first.
    - `ref_id` string, required: The revision’s id: `a<n>` for the history kept from the old wiki, `r<n>` for an edit made since.
    - `kind` 'archive' | 'forward', required: `archive`: from the old wiki. `forward`: made on Verified Handles.
    - `ts` string, date-time, nullable, required: When it was made.
    - `actor` string, nullable, required: Who made it, as they chose to be named in public; null when they keep their name private.
    - `summary` string, nullable, required: The edit summary.
    - `is_bot` boolean, nullable, required: Made by an automated process (the Wikidata sync, an import).
    - `source` 'import' | 'mediawiki' | 'sync' | 'admin' | 'trusted' | 'submission' | 'claim', required: How the edit was made.
    - `hidden` false, required: Always false here: a hidden revision is never in the public history.
    - `deleted` false, required: Always false here: a deleted revision is never in the public history.
    - `proposer` string, nullable, required: For an approved proposal, who proposed it, as they chose to be named; null otherwise.

## Other responses

- `301`: The key is an old name: the same request under the entry’s canonical key.
- `400`: A key and a session cookie were both sent.
- `401`: The key sent was refused.
- `403`: The entry’s history is hidden: not public, and how to ask for it.
- `404`: No public entry answers to that key.
- `429`: Too many requests from this IP address in the last minute (at a route that takes a key, an admin key’s are counted per key instead, at the limits 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)
