---
title: "Download everything the site holds about you"
method: GET
path: "/management-console/account/data.json"
tags: ["Your account"]
---

# Download everything the site holds about you

`GET /management-console/account/data.json`

## Request

- Base URL: `https://verifiedhandles.org`
- URL: `https://verifiedhandles.org/management-console/account/data.json`
- Auth: HTTP bearer

Your account, preferences, submissions, comments, notes, API keys (never a secret), your entries in the audit log, the edits you made, proposed or hid, what you reviewed, claimed and uploaded, your permission history, your Wikidata changes, the emails queued to you and when your sessions began, as one JSON file. Each download is audited (row counts only). 5 an hour per account. A blocked account may download its own too.

## Response `200`

The file, with `Content-Disposition: attachment`.

- AccountData: Everything the site holds about one account.
  - `format` 'verifiedhandles-account-data', required
  - `version` integer, required: Bumped when a field changes meaning or goes; a new field does not bump it.
  - `exported_at` string, date-time, required
  - `account` object, required
    - `id` string, required: Your account’s id (its OIDC `sub`).
    - `email` string, nullable, required
    - `display_name` string, nullable, required
    - `role` 'registered' | 'trusted_editor' | 'admin', required
    - `blocked` boolean, required
    - `created_at` string, date-time, required
    - `last_sign_in` string, date-time, nullable, required
    - `role_granted_at` string, date-time, nullable, required
    - `capability_overrides` object, required: Capabilities granted (true) or taken away (false) beyond your role’s.
    - `preferences` object, required
      - `copy_handle_only` boolean, required
      - `email_notifications` boolean, required
      - `save_recent_searches` boolean, required
      - `name_visibility` 'public' | 'trusted' | 'admins', required
  - `submissions` object[], required
    - `id` string, required
    - `kind` 'new_entity' | 'correction' | 'claim' | 'report' | 'application', required
    - `status` 'pending' | 'needs_info' | 'approved' | 'rejected' | 'merged' | 'spam' | 'superseded' | 'retracted' | 'resolved', required
    - `entry_vhid` string, nullable, required
    - `entry_title` string, nullable, required
    - `qid` string, nullable, required
    - `payload` object, required: What it asks for, in its kind’s shape: for `correction`, `new_entity` and `application`, an `EditPayload` (the fields to set, and for a revert or an approval the server’s own); for `report`, `{reason, note?, media_id?, link?}`; for `claim`, `{method}`.
    - `evidence` object, nullable, required: The case it carries, in its kind’s shape: an application’s eligibility case, a claim’s proof; null for the rest.
    - `review_notes` string, nullable, required
    - `ip` string, nullable, required: The address you sent it from; erased after a year.
    - `created_at` string, date-time, required
    - `decided_at` string, date-time, nullable, required
  - `comments` object[], required: Every comment on your submissions, and those you wrote on anyone else’s.
    - `id` string, required
    - `submission_id` string, required
    - `on_your_submission` boolean, required
    - `body` string, required
    - `created_at` string, date-time, required
    - `author` string, required: `you`, or the writer as a signed-out visitor would see them.
  - `notes` object[], required: The internal notes you wrote.
    - `id` string, required
    - `entry_vhid` string, required
    - `body` string, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `api_keys` object[], required: Your keys, never a secret. Not your connected apps’ keys: they are under `connected_apps`.
    - `name` string, required
    - `prefix` string, required
    - `role_ceiling` 'registered' | 'trusted_editor' | 'admin', required
    - `read_only` boolean, required
    - `created_at` string, date-time, required
    - `expires_at` string, date-time, required
    - `last_used_at` string, date-time, nullable, required
    - `revoked_at` string, date-time, nullable, required
  - `connected_apps` object[], required: The apps you connected with OAuth (and consents not yet completed), never a token.
    - `client_id` string, required
    - `client_name` string, required
    - `redirect_uri` string, required
    - `resource` string, required
    - `role_ceiling` 'registered' | 'trusted_editor' | 'admin', required
    - `read_only` boolean, required
    - `days` integer, required
    - `created_at` string, date-time, required
    - `connected_at` string, date-time, nullable, required
    - `last_refreshed_at` string, date-time, nullable, required
    - `key_prefix` string, nullable, required
    - `expires_at` string, date-time, nullable, required
    - `revoked_at` string, date-time, nullable, required
  - `wikimedia_account` object, nullable, required: The Wikimedia account linked to yours (never its token), or null.
    - `wiki` 'wikidata' | 'testwikidata', required
    - `username` string, required
    - `grants` string[], required
    - `linked_at` string, date-time, required
    - `checked_at` string, date-time, nullable, required
  - `drafts` object[], required: Your unsaved entry drafts, each whole, as kept.
    - `entry_vhid` string, required
    - `entry_title` string, required
    - `base_revision_id` string, nullable, required
    - `draft` EntryDraft, required: An unsaved edit to an entry, in the editor’s own shape.
      - `vhid` string: The entry’s VHID. Optional when sending; it must be this entry’s.
      - `savedAt` number: When the draft was last changed, in milliseconds since 1970. Ignored when sending: the server keeps its own time.
      - `fields` object, required: The entry’s fields as edited. The description is HTML, kept through the same allowlist as a saved description.
        - `title` string
        - `subtitle` string
        - `description` string
        - `short` string
      - `handles` object[]
        - `platform_id` string, required
        - `value` string, required
        - `display` string, nullable
        - `kept` true: A masked email kept as stored.
        - `ref` string: Which stored email a kept one is.
      - `customOrder` boolean: The handles are in the entry’s own order.
      - `linkNames` object: VHID → name, for the entries the description links to.
      - `image` object, nullable: The lead image as picked: null when removed, absent when untouched.
        - `id` string, required: The image’s id.
        - `kind` 'commons' | 'local', required
        - `commons_filename` string, nullable, required
      - `gallery` object[]: The images after the lead, when changed.
        - `id` string, required: The image’s id.
        - `kind` 'commons' | 'local', required
        - `commons_filename` string, nullable, required
      - `imageLinks` object: Image id → link as typed, when changed.
      - `relinquish` string[]: Fields to hand to Wikidata on save.
      - `takeover` string[]: Fields to take back from Wikidata on save.
      - `dropCredit` true: Remove the Wikipedia credit on save.
      - `creditPage` string: A Wikipedia page named for the credit, as typed.
      - `creditManage` false: With `creditPage`: the description is not to go to the sync.
      - `handleTakeover` string[]
      - `handleRelinquish` string[]
      - `handleRelease` string[]
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `expires_at` string, date-time, required
  - `audit` object[], required: The audit rows by you or about you.
    - `id` string, required
    - `ts` string, date-time, required
    - `action` string, required
    - `target_type` string, required
    - `target_id` string, required
    - `detail` object, nullable, required: What changed, in the action’s own shape (lib/audit.ts names each action’s): it varies by action, and a row keeps the shape it was written with. A row written with an API key also carries `key` (its id), `via: "api_key"` where the writer named no surface, and `mcp_tool` when an MCP tool made the request.
    - `by` string, required: `you`, `Verified Handles (automatic)`, or the actor as a signed-out visitor would see them.
    - `ip` string, nullable: On your own rows only: the address it came from, until it is erased after a year.
    - `surface` 'editor' | 'console' | 'api' | 'mcp' | 'site' | 'worker' | 'migration', nullable: On your own rows only: what it came through (see the audit log).
    - `api_key_id` string, nullable: On your own rows only: your API key it was made with, if any.
    - `mcp_tool` string, nullable: On your own rows only: the MCP tool that made it, if one did.
    - `user_agent` string, nullable: On your own rows only: your browser or client, cut to 200 characters.
    - `request_id` string, nullable: On your own rows only: the request’s id.
  - `edits` object[], required: Every revision you made or proposed: its summary (the change itself is on the entry’s history).
    - `id` string, required
    - `entry_vhid` string, required
    - `entry_title` string, required
    - `ts` string, date-time, required
    - `source` string, required
    - `summary` string, nullable, required
    - `made_by_you` boolean, required
    - `proposed_by_you` boolean, required
    - `hidden` boolean, required
  - `hidden_revisions` object[], required: The revisions you hid.
    - `kind` 'revision' | 'legacy_revision', required
    - `id` string, required
    - `entry_vhid` string, nullable, required
    - `hidden_at` string, date-time, nullable, required
    - `hidden_reason` string, nullable, required
  - `reviews` object[], required: The submissions you reviewed (never who sent them).
    - `id` string, required
    - `kind` 'new_entity' | 'correction' | 'claim' | 'report' | 'application', required
    - `status` 'pending' | 'needs_info' | 'approved' | 'rejected' | 'merged' | 'spam' | 'superseded' | 'retracted' | 'resolved', required
    - `entry_vhid` string, nullable, required
    - `decided_at` string, date-time, nullable, required
  - `claimed_entries` object[], required: The entries you have claimed.
    - `entry_vhid` string, required
    - `entry_title` string, required
  - `uploads` object[], required: The images you uploaded.
    - `id` string, required
    - `mime` string, nullable, required
    - `width` integer, nullable, required
    - `height` integer, nullable, required
    - `license` string, nullable, required
    - `attribution` string, nullable, required
    - `source_url` string, nullable, required
    - `created_at` string, date-time, required
    - `withdrawn_at` string, date-time, nullable, required
  - `permission_history` object[], required: Changes to your permissions, and the permission changes you made.
    - `id` string, required
    - `ts` string, date-time, required
    - `change` string, required
    - `about` string, nullable, required
    - `by` string, required
  - `wikidata_changes` object[], required: The Wikidata changes you proposed, approved or snoozed.
    - `id` string, required
    - `state` string, required
  - `wikipedia_link_reviews` object[], required: The proposed Wikipedia links you took or left.
    - `id` string, required
    - `status` string, required
  - `sync_requests` object[], required: The Wikidata syncs you asked for (forgotten after a year).
    - `qid` string, required
    - `requested_at` string, date-time, required
  - `emails` object[], required: The emails queued to your address in the last 30 days, sent or not.
    - `id` string, required
    - `kind` string, required
    - `subject` string, required
    - `body_text` string, required
    - `created_at` string, date-time, required
    - `sent_at` string, date-time, nullable, required
  - `email_suppression` object, nullable, required: Why we stopped emailing your address, or null.
    - `reason` 'bounce' | 'complaint', required
    - `detail` string, nullable, required
    - `reports` integer, required
    - `first_at` string, date-time, required
    - `last_at` string, date-time, required
  - `sessions` object[], required: When each of your live sign-in sessions began.
    - `started_at` string, date-time, required

## Other responses

- `302`: No key was sent: the console sends a browser to sign in. A script should send its key.
- `400`: The request sent a key and a session cookie together (`bearer_with_cookie`): send one.
- `401`: The key was refused: unknown, revoked or expired, its holder may no longer use keys, or this instance takes none. Carries `WWW-Authenticate: Bearer`.
- `403`: The key’s account lacks the capability, or is blocked: the body is the word `Forbidden`.
- `429`: More than 5 downloads in the last hour: wait a while.
- `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)
