Registry entry

California Voter Registration

Register to vote, update an existing voter registration record, or pre-register (ages 16-17) in California, administered by the California Secretary of State through the state's online voter registration system (covr.sos.ca.gov, publicly linked from registertovote.ca.gov). Unlike au/aec/voter-enrolment, which models a single national electoral roll, voter registration in the United States is state-administered — this document models California's own state-run process specifically, not a national US process. Models the wizard's classification/eligibility step, personal information (name, date and place of birth, identity-proofing via a California driver license/ID number or the last four digits of a Social Security number, ethnicity, and language preference), home and mailing address (including a no-street-address branch for applicants without a conventional street address), a previous-registration/name-change recall section, political party preference, election-materials mailing preferences, poll-worker volunteering, accessibility, and third-party-assistance disclosure, ending with a penalty-of-perjury affirmation. Does not model the confirmation/electronic-signature step that follows the application review page, and does not submit an application; the live covr.sos.ca.gov source is always authoritative (see VERIFICATION.md).

Registry entry

us/ca/sos/voter-registration

Jurisdiction
United States · California (subnational)
Version
1.0.0
Verification
draft

GovSchema spec v0.3

Authoritative source California Online Voter Registration wizard (live application at covr.sos.ca.gov, linked from registertovote.ca.gov's 'Register to Vote Now'); Steps 1-4 of 5 (Classification, Personal Information, Additional Information/Consent, Review) walked live via direct HTTP form submission with mock data, stopping before the final Submit action on the Review page.

Machine access

Schema document
registry/us/ca/sos/voter-registration/1.0.0/schema.jsonapplication/schema+json
Registry catalog
registry/index.jsonone record per schema id

Field reference

64 fields across 11 steps, read from the published schema.json — names, types, requiredness, and validation as the document states them. The live government form remains the authoritative source.

Classification

  • classification enum required

    Which of seven eligibility categories the applicant registers under. This schema models the domestic in-state civilian path (us_citizen_ca_resident) in full; the six UOCAVA/military/overseas categories share this same classification field and wizard, but were not walked in this verification pass and may surface additional fields (e.g. an overseas mailing address, unit/rank) not modeled here — see VERIFICATION.md 'Out of scope'.

    enum: 7 values

Qualifications

  • isUSCitizen boolean required

    Eligibility attestation checkbox; must be checked to proceed.

  • registrationChoice enum required

    Whether the applicant is registering as an adult or pre-registering as a 16- or 17-year-old (California allows pre-registration from age 16, with automatic activation to a registered voter at 18). The wizard's own date-of-birth validator enforces a minimum age of 16 regardless of this choice.

    enum: adult_18_or_older | pre_register_16_or_17

Personal information

  • prefix enum optional

    Optional name prefix.

    enum: mr | mrs | miss | ms
  • firstName string required

    Applicant's legal first name.

    patternlength: 1–32classification: sensitive-pii
  • middleName string optional

    Applicant's legal middle name.

    patternlength: 0–32classification: sensitive-pii
  • lastName string required

    Applicant's legal last name.

    patternlength: 1–32classification: sensitive-pii
  • suffix enum optional

    Optional name suffix.

    enum: 11 values
  • emailAddress string optional

    Optional contact email address. The wizard's own client-side script compares this against confirmEmailAddress for a match, but this is not enforced by the server model unconditionally; a consumer SHOULD still ensure the two match when both are supplied.

    patternlength: 0–100
  • confirmEmailAddress string optional

    Repeat of emailAddress for confirmation; see emailAddress's description.

    patternlength: 0–100
  • phoneNumber string optional

    Optional daytime phone number, digits only. The form notes phone numbers are posted at polling places on election day.

    patternlength: 0–10
  • dateOfBirth date required

    Full date of birth. The source form renders this as three separate month/day/year dropdowns/box (fields MonthOfBirth, DayOfBirth, YearOfBirth), collapsed here to one field per this registry's comb-field convention. The wizard's own validator enforces a minimum age of 16 as of the submission date (observed acceptable birth-year range: 1901-2010 against a 2026-07-02 access date).

    classification: sensitive-pii
  • placeOfBirthType enum optional

    Whether the applicant's place of birth is a U.S. state/territory or a foreign country/region. Presented on the form with a conditional-required visual indicator, but no server-side required validation was observed when this field and its dependents (statePlaceOfBirth, countryPlaceOfBirth) were left entirely blank.

    enum: us_state_or_territory | foreign_country
  • statePlaceOfBirth string optional

    U.S. state or territory of birth. The source presents a fixed 59-item dropdown (50 states, D.C., and 8 territories); modelled as free text per this registry's convention for large geographic dropdowns (e.g. us/dos/immigrant-visa-ds260's state/country fields) rather than embedding the full option list as an enum.

    length: 0–100
  • countryPlaceOfBirth string optional

    Foreign country or region of birth. The source presents a fixed ~200-item country dropdown; modelled as free text per this registry's large-geographic-dropdown convention.

    length: 0–100

Identification and demographics

  • californiaId string optional

    One letter followed by seven numeric digits. Required unless hasNoCaliforniaId is checked. New voters who supply neither this nor a Social Security number may have to show identification or proof of residency the first time they vote.

    patternclassification: sensitive-pii
  • hasNoCaliforniaId boolean optional

    Gates californiaId's requiredness. Checking this and hasNoSsn together is accepted by the wizard (the source site states such applicants 'may still apply but must take additional steps to complete your voter registration').

  • ssnLast4 string optional

    Last four digits only. Required unless hasNoSsn is checked.

    patternclassification: sensitive-pii
  • hasNoSsn boolean optional

    Gates ssnLast4's requiredness. See californiaId/hasNoCaliforniaId's description for the combined no-ID, no-SSN case.

  • ethnicity enum optional

    Optional self-reported ethnicity/race, collected for federal Voting Rights Act compliance reporting (not printed on this page, but standard practice for this data element).

    enum: 7 values
  • languagePreference enum optional

    Preferred language for election materials.

    enum: 11 values
  • otherLanguage string optional

    Free-text language name, collected when languagePreference is 'other'. Modelled here per the field's evident intent; the live server was observed to reject a submission that left this field blank even when languagePreference was 'english', which this schema treats as a form implementation quirk rather than the field's real requiredness rule — see VERIFICATION.md.

    patternlength: 0–50

Home and mailing address

  • homeAddressChoice enum required

    Whether the applicant has a conventional street address or must instead describe their residence (e.g. an unhoused applicant using cross-streets).

    enum: has_street_address | no_street_address
  • homeStreetAddress string optional

    Residential street address; not a P.O. Box or business address. Must clearly identify the residence, per the form.

    patternlength: 0–64classification: sensitive-pii
  • homeApartmentOrUnitNumber string optional

    Optional apartment or unit number for the home street address.

    patternlength: 0–12
  • homeCity string optional

    City of the home street address. The home address state is fixed to California by the source form and is not itself a collected field.

    patternlength: 0–40
  • homeZip string optional

    5-digit ZIP code of the home street address; the source form range-validates it between 90001 and 96162 (California's ZIP code range).

    pattern
  • homeNoStreetAddressDescription string optional

    Free-text description of the applicant's residence location, used instead of a conventional street address.

    patternlength: 0–64
  • homeNoStreetAddressCity string optional

    City corresponding to the no-street-address description.

    patternlength: 0–40
  • homeCounty string required

    County of residence. The source presents a fixed 58-item dropdown (California's own counties); modelled as free text per this registry's large-geographic-dropdown convention rather than embedding the full option list as an enum.

    length: 0–20
  • isMailingAddressDifferent boolean optional

    Gates the mailing-address fields; leave unchecked if mail should go to the home address.

  • mailingStreetAddress string optional

    Mailing street address or P.O. Box, if different from the home address. Unlike the home address, a P.O. Box is accepted here.

    patternlength: 0–64classification: sensitive-pii
  • mailingApartmentOrUnitNumber string optional

    Optional apartment or unit number for the mailing address.

    patternlength: 0–12
  • mailingCity string optional

    City of the mailing address.

    patternlength: 0–40
  • mailingState string optional

    State of the mailing address (not fixed to California, unlike the home address). The source presents the same fixed 59-item state/territory dropdown as statePlaceOfBirth; modelled as free text for the same reason.

    length: 0–100
  • mailingZip string optional

    ZIP code of the mailing address; unlike homeZip, not range-restricted to California.

    patternlength: 0–10

Previous registration

  • isPreviouslyRegistered boolean optional

    Gates the previous-registration recall fields below, used to help election officials locate an existing record (e.g. after a name or address change). None of the previous-registration fields are themselves server-enforced as required even when this is checked — they help officials find a prior record but are not a hard prerequisite.

  • previousFirstName string optional

    First name the applicant was previously registered under, if known.

    patternlength: 0–32classification: sensitive-pii
  • previousMiddleName string optional

    Middle name the applicant was previously registered under, if known.

    patternlength: 0–32classification: sensitive-pii
  • previousLastName string optional

    Last name the applicant was previously registered under, if known.

    patternlength: 0–32classification: sensitive-pii
  • previousStreetAddress string optional

    Street address the applicant was previously registered at, if known.

    patternlength: 0–28classification: sensitive-pii
  • previousApartmentOrUnitNumber string optional

    Apartment or unit number of the previous address, if known.

    patternlength: 0–12
  • previousCity string optional

    City of the previous address, if known.

    patternlength: 0–40
  • previousState string optional

    State of the previous address, if known. Presents the same fixed 59-item dropdown as statePlaceOfBirth/mailingState; modelled as free text for the same reason.

    length: 0–100
  • previousZip string optional

    ZIP code of the previous address, if known.

    patternlength: 0–10
  • previousPoliticalParty string optional

    Free-text previous political party preference, if known — distinct from the current politicalParty field below, which uses a fixed, closed list.

    patternlength: 0–32

Political party preference

  • politicalPartyPreferenceChoice enum required

    Whether the applicant registers with a party preference or as No Party/None. Choosing No Party/None may restrict which parties' candidates the voter can select in a primary election for U.S. President, or for a party's central committee.

    enum: has_preference | no_party_or_none
  • politicalParty enum optional

    Selected political party, when politicalPartyPreferenceChoice is has_preference.

    enum: 7 values
  • otherPoliticalParty string optional

    Free-text party name, when politicalParty is other_party.

    patternlength: 0–50

Election materials

  • wantsStateVoterGuideByMail boolean required

    If everyone in the applicant's household opts out, no state voter information guide is mailed to that address; the guide remains available online, and any other household member's opt-in still results in a mailed copy for the address.

  • wantsCountyVoterGuideByMail boolean required

    Opting out results in electronic notification instead, where the applicant's county supports it; otherwise the county voter information guide is mailed regardless.

  • electronicNotificationEmail string optional

    Optional email address for electronic notification when a county voter information guide is available online instead of by mail.

    patternlength: 0–100
  • confirmElectronicNotificationEmail string optional

    Repeat of electronicNotificationEmail for confirmation.

    patternlength: 0–100

Volunteer on election day and accessibility

  • wantsToBePollWorker boolean optional

    Gates spokenLanguages and canProvidePollingPlace.

  • spokenLanguages string optional

    Select-all-that-apply. Modelled as a comma-separated list of: english, chinese, japanese, korean, spanish, tagalog, vietnamese, hindi, khmer, thai, other — the same multi-select-as-string treatment as us/uscis/travel-document-i131's race field, pending the GSP-0009 repeating/multi-select gap.

    length: 0–100
  • otherSpokenLanguage string optional

    Free-text language name, meaningful only when spokenLanguages includes 'other' — a sub-condition on a comma-joined field the shared Condition grammar cannot express directly, so it is documented here in prose rather than encoded (the same class of gap as au/aec/voter-enrolment's citizenshipCertificateNumber exemption).

    length: 0–25
  • canProvidePollingPlace boolean optional

    Offer of a physical location to serve as a polling place.

  • wantsAccessibleMaterialFormat boolean optional

    Request for voting materials in an accessible format.

Help filling out this form

  • receivedThirdPartyHelp boolean optional

    Gates the third-party helper fields. The form's own instructions state the helper 'must fill out the questions below' if yes, but no server-side required validation was observed on the helper fields themselves.

  • thirdPartyHelperName string optional

    Name of the person who helped complete the form. Personal information of a third party; handle as sensitive data.

    length: 0–96classification: sensitive-pii
  • thirdPartyHelperAddress string optional

    Address of the person who helped complete the form. Personal information of a third party; handle as sensitive data.

    length: 0–200classification: sensitive-pii
  • thirdPartyHelperPhone string optional

    Phone number of the person who helped complete the form.

    length: 0–14
  • thirdPartyHelperOrganization string optional

    Organization the helper is affiliated with, if any, and its telephone number.

    length: 0–200

Affirmation

  • affirmation boolean required

    Final penalty-of-perjury affirmation and eligibility declaration; must be checked to submit. Applicants pre-registering at 16-17 are not yet held to the 'at least 18 years old' clause in practice, though the form presents one combined affirmation checkbox for both registrant and pre-registrant paths.

Verification record

This file is the source-review record for this document version, per the manual-source-review-v1 practice.

Current claim

  • status: draft
  • verification.method: manual-source-review-v1
  • verification.lastVerifiedAt: 2026-07-02

draft, not verified, because the walkthrough stopped at the Review page (Step 4 of 5) without pressing the final Submit action — no real application was filed, and the confirmation/electronic-signature step that would follow was never observed. See "What was not done" below.

Sources examined

  • Document (id, version): us/ca/sos/voter-registration / 1.0.0
  • Spec version: GovSchema 0.3.0
  • Authority: California Secretary of State (SOS), the office that administers California's online voter registration system under state election law.
  • https://registertovote.ca.gov/ — the SOS's public voter-registration landing page. Fetched live via WebFetch, 2026-07-02 (HTTP 200). Static informational page (confirmed by a direct curl fetch, not a JS SPA-shell): identifies the driver-license/ID-or-SSN identity-proofing model, the 16-17 pre-registration pathway, the 9 supported election-material languages, and links to the live application.
  • https://covr.sos.ca.gov/ — the live online voter registration application itself, reached via registertovote.ca.gov's "Register to Vote Now" link. This is a server-rendered ASP.NET MVC application (not a client-side SPA), confirmed by directly fetching it with curl and reading literal <form>/<input>/<select> HTML — the same technique that failed to reach content at FL's registertovoteflorida.gov (an Angular SPA requiring a real browser) and at AU's enrol.aec.gov.au (network-blocked entirely). This document is sourced by directly operating this live server: fetching each wizard page's own anti-forgery token (__RequestVerificationToken) and session cookies, then POSTing well-formed field data to /en/OnlineVoterRegistration/PostForm and reading the server's own re-rendered next-step HTML — not a headless browser, but the same practical effect of exercising the real, live, server-validated wizard end-to-end, with mock/placeholder applicant data throughout (Jane Doe, DOB 1990-06-15, address 123 Main St, Sacramento, CA 95814) and no real submission.
    • Step 1 — Classification. Fetched live, 2026-07-02. One field, ClassificationType, a 7-option radio group. Supplied option 1 ("A U.S. citizen and resident of California").
    • Step 2 — Personal Information. The single largest page in the wizard, combining four field groups: Qualifications, Personal Information (name, contact, date/place of birth, California driver-license-or-ID/last-4-SSN identity proofing, ethnicity, language preference), Home and Mailing Address (including a no-street-address branch and a previous-registration recall section), and Political Party Preference. Posted a complete, valid submission and received Step 3 back (HTTP 200), confirming server-side acceptance of every field modelled in this step.
    • Step 3 — Additional Information/Consent. Vote-by-Mail informational text (no field), State/County Voter Information Guide mail preferences, electronic notification email, poll-worker volunteering (with a spoken-languages sub-list), accessibility, third-party-assistance disclosure, and the final penalty-of-perjury Affirmation checkbox. Posted a complete, valid submission and received Step 4 (Review) back (HTTP 200).
    • Step 4 — Review. A read-only <dl> summary of every value submitted in Steps 1-3, confirming the server's own model of the data (echoed back correctly, including the county resolved from the numeric CountyId to its name, SACRAMENTO). Its own form has only Edit and Submit buttons; Submit was never pressed.

What was not done — the one honest gap

The final Submit action on the Review page, and whatever confirmation or electronic-signature step follows it (the wizard's Step 5 of 5), were never exercised, to avoid filing a real voter registration application. This schema's field inventory is therefore complete through the Review page but does not model whatever Step 5 itself collects (if anything beyond a final confirmation — the Review page's own Submit button suggests the application may be filed directly from Step 4, with Step 5 being a confirmation/receipt screen rather than a further data-collection step, but this was not observed directly).

Additionally, only the us_citizen_ca_resident classification branch (ClassificationType=1) was walked. The other six classification values (active-duty military/Merchant Marine, eligible spouse/dependent, activated National Guard, and the three overseas-citizen categories) share the same wizard and the same ClassificationType field, but were not independently exercised; they plausibly surface additional fields (an overseas mailing address, military unit information, or a UOCAVA-specific declaration) not captured in this schema. This mirrors au/aec/voter-enrolment's decision not to model AEC's special-category enrolment forms.

Modelling decisions

  • Date of birth collapsed to one field. The source renders dateOfBirth as three separate controls (MonthOfBirth, DayOfBirth, YearOfBirth), collapsed here to one field per this registry's comb-field convention (e.g. au/aec/voter-enrolment's own dateOfBirth).
  • Large geographic dropdowns (state, country, county) modelled as free text, not enums. The source presents fixed dropdowns for U.S. state/territory (59 options), foreign country/region (~200 options), and California county (58 options). Rather than embed these as enum vocabularies, they are modelled as string fields with a maxLength, per this registry's existing convention for large geographic value sets (e.g. us/dos/immigrant-visa-ds260's stateProvinceOfBirth/countryOfBirth fields, and au/aec/voter-enrolment's own state-abbreviation fields, which used a short string rather than the full option list).
  • spokenLanguages modelled as a comma-separated string, not an array. GovSchema v0.3's field type enum has no array/multi-select type (a known gap tracked as GSP-0009). Modelled as a comma-joined string with the vocabulary spelled out in the field's own description, matching the precedent set by us/uscis/travel-document-i131's race field.
  • otherSpokenLanguage's true condition (spokenLanguages contains other) is documented in prose, not encoded. The shared Condition grammar (GSP-0013) compares a field's whole value against a literal (equals/notEquals/in), with no substring/contains operator over a comma-joined string. visibleWhen is set to the broader wantsToBePollWorker == true condition instead, with the finer condition named in the field's description — the same treatment au/aec/voter-enrolment gave its citizenshipCertificateNumber exemption rule.
  • otherLanguage's server-observed requiredness does NOT match its intended semantic — flagged, not encoded. The live server rejected a Step 2 submission with languagePreference set to english (value 1) and otherLanguage left blank, with the error "Enter your other language preference." Supplying any non-empty value for otherLanguage (regardless of the selected languagePreference) satisfied the server. This schema models otherLanguage with requiredWhen/visibleWhen conditioned on languagePreference == "other" — its evident, intended meaning, and the behavior a compliant client (e.g. a browser running the page's own client-side JavaScript, which toggles the field's visibility and required state) would present to a real applicant — rather than baking in what looks like a raw-endpoint validation quirk of the server's own model binder. Worth re-checking on next review in case this is intentional (e.g. a defensive default) rather than a bug.
  • politicalParty's requiredWhen was confirmed, not assumed. The underlying <select id="PoliticalPartyId"> carries a static HTML required="required" attribute unconditionally, matching the same pattern as otherLanguage above — but unlike otherLanguage, submitting politicalPartyPreferenceChoice=no_party_or_none with politicalParty entirely omitted was accepted by the server without error (confirmed by the live walkthrough), so this field's requiredWhen condition reflects directly observed, not inferred, server behavior. otherPoliticalParty's analogous condition (politicalParty == "other_party") was not independently tested and is modelled by the same reasoning pattern rather than direct observation.
  • Previous-registration and third-party-helper fields modelled as optional even when their gating boolean is true. Neither Previous.FirstName (etc.) nor ReceivedThirdPartyHelp.ThirdPartyPersonName (etc.) carry a required attribute or data-val-required rule in the source HTML, despite the form's own instructional text implying they should be filled in ("the person who helped you must fill out the questions below"). This schema follows the literal, observed server behavior — required: false throughout — rather than the instructional text's implication, consistent with this registry's practice of matching what the server actually enforces.
  • placeOfBirthType and its dependents modelled as optional. No required attribute or data-val-required rule was present on PlaceOfBirthType, StatePlaceOfBirthId, or CountryPlaceOfBirthId in the source HTML, and a submission leaving all three blank was accepted by the server during the live walkthrough.
  • No documents[] member. No file-upload field (type="file") appears anywhere in Steps 1-4; California's online system verifies identity against DMV/SSA records by reference number, not by uploaded scans, matching how this registry omits documents[] when a process only asks for reference numbers.
  • classification and affirmation given fieldRole: eligibility, consistent with how au/aec/voter-enrolment used fieldRole on its own evidenceOfIdentity and general eligibility-gating fields. isUSCitizen and registrationChoice are also eligibility-adjacent but are kept as ordinary gating booleans/enum per the same reasoning already applied to au/aec/voter-enrolment's citizenshipStatus.

Out of scope

  • The six non-us_citizen_ca_resident classification branches (active duty military/Merchant Marine, eligible spouse/dependent, activated National Guard, and the three overseas-citizen categories) — see "What was not done" above.
  • Whatever Step 5 of 5 (post-Review) collects, if anything, beyond a final submit/confirmation action.
  • Ballot-request and vote-by-mail-specific processes beyond the wantsStateVoterGuideByMail/wantsCountyVoterGuideByMail mail preferences already modelled — distinct SOS/county processes, not modelled here.
  • Registration status lookup / "Check Your Registration Status" — a distinct, read-only SOS tool, not modelled here.

Re-verification

Per the practice's cadence, nextReviewBy is set to 2027-01-02 (6 months). Re-walk the wizard through Step 5 (or as far as ethically possible without filing a real application) to resolve the one open gap, re-check whether the otherLanguage requiredness quirk still reproduces, and promote status to verified if the full flow through submission confirmation is observed, per us/fl/doe/online-voter-registration's and de/finanzamt/tax-identification-number's precedent.

View the raw record (VERIFICATION.md)

Version history

  • 1.0.0 draft latest this page has verification record schema.json

Independent and non-affiliated

GovSchema is an independent, open-source project. This reference is not produced, reviewed, or endorsed by California Secretary of State or any government. The authoritative source is always the live government form and its official instructions.