GovTube · Schema

CoverageInfo

Shown on every results page (coverage transparency). Video and official transcripts are counted apart (ORTH-207): read video and documents (or collections) for display. videos, first/last_event_date, awaiting_review and total_* are over everything, video and documents together, and stay for compatibility.

SearchGovernmentVideoFree

Properties

Name Type Description
videos integer Every item in the archive, video sessions and official transcripts together. For display use video.sessions and documents.count.
first_event_date object Earliest item of either kind. Video only: video.first_event_date.
last_event_date object Latest item of either kind. Video only: video.last_event_date.
sources array
last_ingested_at object
awaiting_review integer Items of either kind with an unconfirmed speaker label. Video only: video.awaiting_review.
known_gaps array
total_hours number Sum of sessions[].duration_ms in hours, one decimal. Includes last-word estimates where duration_measured is false; official documents (no duration) add nothing.
total_words integer Sum of sessions[].words, video and official transcripts together. Words transcribed: video.words.
video object Totals over video only.
documents object Totals over official transcripts (no timing) only.
collections array One entry per kind of material per source: video first (most items first), then documents. Build source lines from these.
sessions array One entry per video or official transcript, newest first, except the items of a collection counted by day (see collections[].days).
revised integer Items of every collection (the ones counted by day included) whose current transcript revision is above 1.
corrections array The corrections log, newest first: records hidden from search, coverage and their pages, or restored (decision 12), and words corrected at the next transcript revision, itemized (action corrected, ORT
View JSON Schema on GitHub

JSON Schema

govtube-us-coverage-info-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/govtube-us/json-schema/govtube-us-coverage-info-schema.json",
  "title": "CoverageInfo",
  "description": "Shown on every results page (coverage transparency). Video and official transcripts are counted apart\n(ORTH-207): read video and documents (or collections) for display. videos, first/last_event_date,\nawaiting_review and total_* are over everything, video and documents together, and stay for compatibility.",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/govtube-us-openapi.json#/components/schemas/CoverageInfo",
  "properties": {
    "videos": {
      "type": "integer",
      "title": "Videos",
      "description": "Every item in the archive, video sessions and official transcripts together. For display use video.sessions and documents.count."
    },
    "first_event_date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "First Event Date",
      "description": "Earliest item of either kind. Video only: video.first_event_date."
    },
    "last_event_date": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Event Date",
      "description": "Latest item of either kind. Video only: video.last_event_date."
    },
    "sources": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Sources"
    },
    "last_ingested_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Last Ingested At"
    },
    "awaiting_review": {
      "type": "integer",
      "title": "Awaiting Review",
      "description": "Items of either kind with an unconfirmed speaker label. Video only: video.awaiting_review.",
      "default": 0
    },
    "known_gaps": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "title": "Known Gaps"
    },
    "total_hours": {
      "type": "number",
      "title": "Total Hours",
      "description": "Sum of sessions[].duration_ms in hours, one decimal. Includes last-word estimates where duration_measured is false; official documents (no duration) add nothing.",
      "default": 0.0
    },
    "total_words": {
      "type": "integer",
      "title": "Total Words",
      "description": "Sum of sessions[].words, video and official transcripts together. Words transcribed: video.words.",
      "default": 0
    },
    "video": {
      "$ref": "#/$defs/VideoCoverage",
      "description": "Totals over video only."
    },
    "documents": {
      "$ref": "#/$defs/DocumentCoverage",
      "description": "Totals over official transcripts (no timing) only."
    },
    "collections": {
      "items": {
        "$ref": "#/$defs/CoverageCollection"
      },
      "type": "array",
      "title": "Collections",
      "description": "One entry per kind of material per source: video first (most items first), then documents. Build source lines from these."
    },
    "sessions": {
      "items": {
        "$ref": "#/$defs/CoverageSession"
      },
      "type": "array",
      "title": "Sessions",
      "description": "One entry per video or official transcript, newest first, except the items of a collection counted by day (see collections[].days)."
    },
    "revised": {
      "type": "integer",
      "minimum": 0.0,
      "title": "Revised",
      "description": "Items of every collection (the ones counted by day included) whose current transcript revision is above 1.",
      "default": 0
    },
    "corrections": {
      "items": {
        "$ref": "#/$defs/CorrectionEntry"
      },
      "type": "array",
      "title": "Corrections",
      "description": "The corrections log, newest first: records hidden from search, coverage and their pages, or restored (decision 12), and words corrected at the next transcript revision, itemized (action corrected, ORTH-146). Other revisions (respacing, speaker names) are counted in revised, not listed."
    }
  },
  "type": "object",
  "required": [
    "videos",
    "first_event_date",
    "last_event_date",
    "sources"
  ],
  "$defs": {
    "CitationCounts": {
      "properties": {
        "probes": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Probes",
          "description": "Quotes resolved (each one-turn quote of 1 to 5 words that includes a corrected word, at most 200 in all)."
        },
        "reanchored": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Reanchored",
          "description": "Still found at that moment."
        },
        "moved": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Moved",
          "description": "Found once elsewhere in the video; the link follows it."
        },
        "superseded": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Superseded",
          "description": "Replaced: the quoted words are no longer there; the link shows the original quote and the words now at that time."
        },
        "capped": {
          "type": "boolean",
          "title": "Capped",
          "description": "True when there were more than 200 such quotes and only the first 200 were resolved.",
          "default": false
        }
      },
      "type": "object",
      "required": [
        "probes",
        "reanchored",
        "moved",
        "superseded"
      ],
      "title": "CitationCounts",
      "description": "What a correction did to links quoting the corrected words (ORTH-146). GovTube keeps no list of the links\npeople shared (a citation is a self-contained token), so these count probes: every quote of 1 to 5 words that\nincludes a corrected word, as it read before, resolved against the corrected revision exactly as a shared link\nwould be. Links to unchanged words elsewhere in the video all re-anchor (same words, same time)."
    },
    "CorrectionChange": {
      "properties": {
        "start_ms": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Start Ms",
          "description": "Where the corrected words start in the video, in the revision before."
        },
        "end_ms": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "End Ms",
          "description": "Where they end."
        },
        "word": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Word",
          "description": "Position of the first corrected word in the revision before (0-based)."
        },
        "before": {
          "type": "string",
          "title": "Before",
          "description": "The words as they read before, exactly as shown."
        },
        "after": {
          "type": "string",
          "title": "After",
          "description": "The words as they read now. Empty when the words were removed."
        }
      },
      "type": "object",
      "required": [
        "start_ms",
        "end_ms",
        "word",
        "before",
        "after"
      ],
      "title": "CorrectionChange",
      "description": "One corrected span of words (``govtube-corrections fix``): what it read and what it reads now."
    },
    "CorrectionEntry": {
      "properties": {
        "id": {
          "type": "integer",
          "title": "Id",
          "description": "Increasing entry number."
        },
        "at": {
          "type": "string",
          "title": "At",
          "description": "When the change was made (ISO 8601, UTC)."
        },
        "action": {
          "type": "string",
          "enum": [
            "hidden",
            "restored",
            "corrected"
          ],
          "title": "Action",
          "description": "hidden: taken out of search, coverage, its pages and its citations (they answer 410). restored: put back exactly as it was. corrected: words changed at the next transcript revision (from_rev -> rev); see changes and citations."
        },
        "video_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Video Id",
          "description": "The record's id. Null when the title is withheld (e.g. a legal request), so the entry does not identify the record."
        },
        "title": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Title",
          "description": "The record's title. Null when withheld."
        },
        "event_date": {
          "type": "string",
          "format": "date",
          "title": "Event Date",
          "description": "The record's event date."
        },
        "source_id": {
          "type": "string",
          "title": "Source Id",
          "description": "Key into the source policy registry."
        },
        "source_name": {
          "type": "string",
          "title": "Source Name",
          "description": "The source, for display, e.g. 'U.S. House Clerk'."
        },
        "rev": {
          "type": "integer",
          "title": "Rev",
          "description": "The transcript revision that was hidden or restored; for corrected, the new revision."
        },
        "reason": {
          "type": "string",
          "title": "Reason",
          "description": "Why, in plain words, as published."
        },
        "from_rev": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "From Rev",
          "description": "corrected only: the revision the words were corrected from (rev - 1)."
        },
        "changes": {
          "items": {
            "$ref": "#/$defs/CorrectionChange"
          },
          "type": "array",
          "title": "Changes",
          "description": "corrected only: each corrected span, before and after, in transcript order. Empty while the record is hidden (its words are in no public read)."
        },
        "citations": {
          "anyOf": [
            {
              "$ref": "#/$defs/CitationCounts"
            },
            {
              "type": "null"
            }
          ],
          "description": "corrected only: what the correction did to links quoting the corrected words."
        }
      },
      "type": "object",
      "required": [
        "id",
        "at",
        "action",
        "video_id",
        "title",
        "event_date",
        "source_id",
        "source_name",
        "rev",
        "reason"
      ],
      "title": "CorrectionEntry",
      "description": "One entry of the public corrections log (decision 12): a record hidden from search, coverage and its pages, or\nrestored; or its words corrected at the next transcript revision (ORTH-146). Written by the admin hide, unhide\nand fix routes in the same transaction as the change itself."
    },
    "CoverageCollection": {
      "properties": {
        "key": {
          "type": "string",
          "title": "Key",
          "description": "Stable key, e.g. 'house_floor', 'senate_committees', 'govinfo_dcpd'."
        },
        "kind": {
          "type": "string",
          "enum": [
            "video",
            "document"
          ],
          "title": "Kind",
          "description": "video: recorded sessions with word timing. document: official transcripts without timing (ADR 0004); they are not video."
        },
        "source_id": {
          "type": "string",
          "title": "Source Id",
          "description": "Key into the source policy registry."
        },
        "label": {
          "type": "string",
          "title": "Label",
          "description": "What the collection holds, for display: 'U.S. Senate committee hearings'."
        },
        "unit": {
          "type": "string",
          "title": "Unit",
          "description": "One item, for display with a count: 'session', 'hearing', 'transcript'."
        },
        "units": {
          "type": "string",
          "title": "Units",
          "description": "Several items: 'sessions', 'hearings', 'transcripts'."
        },
        "short_name": {
          "type": "string",
          "title": "Short Name",
          "description": "The source's short name, e.g. 'Senate.gov'."
        },
        "rights_short": {
          "type": "string",
          "title": "Rights Short",
          "description": "The source's rights in a few words, e.g. 'public record'."
        },
        "items": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Items",
          "description": "Sessions (video) or documents (document) in the collection."
        },
        "first_event_date": {
          "anyOf": [
            {
              "type": "string",
              "format": "date"
            },
            {
              "type": "null"
            }
          ],
          "title": "First Event Date"
        },
        "last_event_date": {
          "anyOf": [
            {
              "type": "string",
              "format": "date"
            },
            {
              "type": "null"
            }
          ],
          "title": "Last Event Date"
        },
        "hours": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "title": "Hours",
          "description": "Hours of video, one decimal; null for documents."
        },
        "words": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Words",
          "description": "Words in the current transcripts: transcribed by GovTube for video, as printed for documents."
        },
        "speaker_labels": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Speaker Labels",
          "description": "Speaker labels: voice clusters for video; for documents, the speakers the record itself names."
        },
        "speakers_confirmed": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Speakers Confirmed",
          "description": "Speaker labels a person has confirmed."
        },
        "awaiting_review": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Awaiting Review",
          "description": "Items with at least one speaker label nobody has confirmed."
        },
        "days": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CoverageDay"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "title": "Days",
          "description": "Set only for a collection counted by day (the Congressional Record: one item per speech, ORTH-209): its days, newest first. Its items are then not listed one by one in CoverageInfo.sessions. Null for every other collection."
        }
      },
      "type": "object",
      "required": [
        "key",
        "kind",
        "source_id",
        "label",
        "unit",
        "units",
        "short_name",
        "rights_short",
        "items",
        "first_event_date",
        "last_event_date",
        "hours",
        "words",
        "speaker_labels",
        "speakers_confirmed",
        "awaiting_review"
      ],
      "title": "CoverageCollection",
      "description": "One kind of material from one source, e.g. U.S. House floor sessions or White House official transcripts\n(ORTH-207). Every session counts in exactly one collection; the video collections add up to CoverageInfo.video\nand the document collections to CoverageInfo.documents."
    },
    "CoverageDay": {
      "properties": {
        "event_date": {
          "type": "string",
          "format": "date",
          "title": "Event Date"
        },
        "items": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Items",
          "description": "Items that day (for the Congressional Record: speeches)."
        },
        "words": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Words",
          "description": "Words in those items, as printed."
        },
        "parts": {
          "additionalProperties": {
            "type": "integer"
          },
          "type": "object",
          "title": "Parts",
          "description": "Items per part of the day's record, e.g. {'House': 120, 'Senate': 85}."
        },
        "url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Url",
          "description": "The day's whole record at its source, e.g. the Congressional Record issue on GovInfo."
        }
      },
      "type": "object",
      "required": [
        "event_date",
        "items",
        "words"
      ],
      "title": "CoverageDay",
      "description": "One day of a collection counted by day (CoverageCollection.days)."
    },
    "CoverageSession": {
      "properties": {
        "video_id": {
          "type": "string",
          "title": "Video Id"
        },
        "title": {
          "type": "string",
          "title": "Title"
        },
        "event_date": {
          "type": "string",
          "format": "date",
          "title": "Event Date"
        },
        "duration_ms": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "title": "Duration Ms",
          "description": "Length in milliseconds: VideoMeta.duration_ms when measured at ingest, else the last word's end_ms (see duration_measured). Null for an official document (timing_granularity document)."
        },
        "duration_measured": {
          "type": "boolean",
          "title": "Duration Measured",
          "description": "True when duration_ms is the measured audio length. False means it is the last word's end, which can fall short of the real length (trailing silence or recess), or null."
        },
        "timing_granularity": {
          "type": "string",
          "enum": [
            "word",
            "segment",
            "sentence",
            "turn",
            "chunk",
            "document"
          ],
          "title": "Timing Granularity",
          "description": "What the timing is attached to (ORTH-177): word = every word has a time (our transcripts); document = no timing at all, the words come from an official document (ADR 0004). Times are null exactly when this is document.",
          "default": "word"
        },
        "fidelity": {
          "type": "string",
          "enum": [
            "verbatim",
            "clean",
            "edited"
          ],
          "title": "Fidelity",
          "description": "verbatim: what was said, as said (our transcripts). edited: revised after the fact, e.g. a White House transcript; label it 'Official transcript · edited · no timing' and never certify it as spoken.",
          "default": "verbatim"
        },
        "words": {
          "type": "integer",
          "title": "Words",
          "description": "Words in the current transcript revision."
        },
        "playable": {
          "type": "boolean",
          "title": "Playable",
          "description": "A playback asset exists and its alignment with the transcript is verified."
        },
        "playback_kind": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "youtube",
                "hls",
                "mp4"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Playback Kind",
          "description": "Kind of playback asset, or null when there is none. Set with playable false means the asset's alignment is not verified yet."
        },
        "speaker_labels": {
          "type": "integer",
          "title": "Speaker Labels",
          "description": "Distinct speaker labels (diarization clusters) in the video."
        },
        "speakers_confirmed": {
          "type": "integer",
          "title": "Speakers Confirmed",
          "description": "Speaker labels a person has confirmed against the official record."
        },
        "transcript_rev": {
          "type": "integer",
          "title": "Transcript Rev",
          "description": "Current transcript revision (1 = first transcript, no corrections)."
        },
        "collection": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Collection",
          "description": "Key of the coverage collection this session counts in (CoverageInfo.collections[].key)."
        },
        "verification": {
          "anyOf": [
            {
              "$ref": "#/$defs/SessionVerification"
            },
            {
              "type": "null"
            }
          ],
          "description": "Timed transcripts: how much of it is on hold (ORTH-176). Null for official documents and for a session not republished or checked against its captions since the rule shipped."
        }
      },
      "type": "object",
      "required": [
        "video_id",
        "title",
        "event_date",
        "duration_ms",
        "duration_measured",
        "words",
        "playable",
        "playback_kind",
        "speaker_labels",
        "speakers_confirmed",
        "transcript_rev"
      ],
      "title": "CoverageSession",
      "description": "One indexed video, as the coverage page's sessions table shows it (handoff §5.7)."
    },
    "DocumentCoverage": {
      "properties": {
        "count": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Count",
          "description": "Official transcripts in the archive.",
          "default": 0
        },
        "words": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Words",
          "description": "Words as printed in the official transcripts (not transcribed by GovTube).",
          "default": 0
        },
        "first_event_date": {
          "anyOf": [
            {
              "type": "string",
              "format": "date"
            },
            {
              "type": "null"
            }
          ],
          "title": "First Event Date"
        },
        "last_event_date": {
          "anyOf": [
            {
              "type": "string",
              "format": "date"
            },
            {
              "type": "null"
            }
          ],
          "title": "Last Event Date"
        }
      },
      "type": "object",
      "title": "DocumentCoverage",
      "description": "Totals over official transcripts without timing (ORTH-207), all document sources together. Per source:\nCoverageInfo.collections with kind document."
    },
    "SessionVerification": {
      "properties": {
        "words": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Words",
          "description": "Words in the transcript."
        },
        "words_scored": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Words Scored",
          "description": "Words with a speech-recognizer score (0 for a transcript made before scores were kept)."
        },
        "words_checked": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Words Checked",
          "description": "Words the official captions agree with."
        },
        "words_held": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Words Held",
          "description": "Words the rule holds (low_confidence)."
        },
        "sentences": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Sentences",
          "description": "Sentences (a word ending in . ? or !, or the last word)."
        },
        "sentences_held": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Sentences Held",
          "description": "Sentences with at least one held word."
        },
        "held_share": {
          "type": "number",
          "maximum": 1.0,
          "minimum": 0.0,
          "title": "Held Share",
          "description": "sentences_held / sentences, rounded to 4 places."
        },
        "caption_source": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "house_captions",
                "senate_captions",
                "dvids_captions",
                "reviewer",
                "asr_word_confidence"
              ]
            },
            {
              "type": "null"
            }
          ],
          "title": "Caption Source",
          "description": "The captions compared (house_captions, ...); null when none are stored."
        },
        "conf_source": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Conf Source",
          "description": "What the word scores are, e.g. phonon2_token_posterior_min; null when no word has one."
        },
        "computed_at": {
          "type": "string",
          "title": "Computed At",
          "description": "When these counts were made (ISO 8601, UTC)."
        }
      },
      "type": "object",
      "required": [
        "words",
        "words_scored",
        "words_checked",
        "words_held",
        "sentences",
        "sentences_held",
        "held_share",
        "computed_at"
      ],
      "title": "SessionVerification",
      "description": "How much of one session's transcript the ORTH-176 rule puts on hold (MEASURED, scope: this transcript revision\nand its stored caption check), so a hold can't silently swallow a whole session."
    },
    "VideoCoverage": {
      "properties": {
        "sessions": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Sessions",
          "default": 0
        },
        "hours": {
          "type": "number",
          "title": "Hours",
          "description": "Hours of video, one decimal (includes last-word estimates where sessions[].duration_measured is false).",
          "default": 0.0
        },
        "words": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Words",
          "description": "Words transcribed by GovTube.",
          "default": 0
        },
        "first_event_date": {
          "anyOf": [
            {
              "type": "string",
              "format": "date"
            },
            {
              "type": "null"
            }
          ],
          "title": "First Event Date"
        },
        "last_event_date": {
          "anyOf": [
            {
              "type": "string",
              "format": "date"
            },
            {
              "type": "null"
            }
          ],
          "title": "Last Event Date"
        },
        "speaker_labels": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Speaker Labels",
          "description": "Speaker labels (voice clusters) across the videos.",
          "default": 0
        },
        "speakers_confirmed": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Speakers Confirmed",
          "description": "Of those, the labels a person has confirmed.",
          "default": 0
        },
        "awaiting_review": {
          "type": "integer",
          "minimum": 0.0,
          "title": "Awaiting Review",
          "description": "Videos with at least one unconfirmed speaker label, or none at all.",
          "default": 0
        }
      },
      "type": "object",
      "title": "VideoCoverage",
      "description": "Totals over video only (ORTH-207): no official transcript counts here."
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/govtube-us-coverage-info"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.