---
title: "Get an entry’s handles"
method: GET
path: "/api/v1/entities/{vhid}/handles"
tags: ["Entries"]
---

# Get an entry’s handles

`GET /api/v1/entities/{vhid}/handles`

## Request

- Base URL: `https://verifiedhandles.org`
- URL: `https://verifiedhandles.org/api/v1/entities/{vhid}/handles`
- Auth: none required

Just the entry’s handles, in the order its page shows them: the same list as `handles` in the entry. An email address is listed with its value, label and URL all null.

Any origin may read it: `Access-Control-Allow-Origin: *`, methods GET and OPTIONS, no credentials. An `OPTIONS` preflight answers 204. No key is needed. A request that sends one (`Authorization: Bearer`) has it checked, so a wrong, revoked or expired key is refused 401, and is counted against the key’s read limit; it gets the same answer, marked `no-store`.

## Path parameters

- `vhid` string, required

## Response `200`

The entry’s handles.

- EntityHandles: An entry’s handles alone: the same list as the entry’s `handles`.
  - `vhid` string, required: The entry’s VHID: 11 digits, permanent.
  - `handles` Handle[], required
    - `platform` string, required: The platform’s id (`twitter`, `instagram`, `wikidata`, …).
    - `name` string, required: The platform’s display name.
    - `category` 'social' | 'messaging' | 'website' | 'identifier', required: How the entry page groups it.
    - `value` string, nullable, required: The handle as stored (a username, an id, a URL). Null for an email address, which is never published as data.
    - `display` string, nullable, required: The label the entry page shows instead of the value, if an editor set one. Null for email.
    - `url` string, nullable, required: The profile’s address, built from the platform’s URL pattern. Null for email.
    - `verified` boolean, required: Verified Handles has checked that this account belongs to the entry.
    - `checked` object: What Verified Handles’ own handle checker found when it last looked at this account, from the platform’s official API: only on YouTube (channel and handle), Deezer and GitHub, and only for a look at most 7 days old. Absent otherwise. The entry page shows it only for `dead` (“Not found when checked …”) and `renamed`.
      - `verdict` 'live' | 'dead' | 'renamed' | 'unknown', required: `live`: the profile was there. `dead`: the platform did not find it. `renamed`: it answers under another name. `unknown`: the platform gave no answer a rule could read.
      - `at` string, required: When it looked (ISO 8601, UTC).
      - `now` string: For `renamed`, the name it answers to now, when the platform gave one. A YouTube handle’s is lowercase.

## Other responses

- `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)
