Look up the current California DMV registration status, expiration date, fees owed, and holds for a CA license plate plus one secondary identifier (last 5 of VIN, owner's last name, or company name). Read-only — never advances into renewal payment.
Automate repetitive workflows and reduce manual effort
Example: Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example: Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example: Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
Time estimate: 15-45 minutes depending on use case complexity
Prerequisites
Submit your Claude Code skill and start earning
browse install dmv.ca.gov/check-if-a-vehicle-is-registered-zgg414Compatible with
Supported agents
| name | check-vehicle-registration |
| title | California Vehicle Registration Status Check |
| description | >- Look up the current California DMV registration status, expiration date, fees owed, and holds for a CA license plate plus one secondary identifier (last 5 of VIN, owner's last name, or company name). Read-only — never advances into renewal payment. |
| website | dmv.ca.gov |
| category | government |
| tags | - government - dmv - vehicle - registration - california - read-only - aws-waf |
| source | 'browserbase: agent-runtime 2026-05-18' |
| updated | '2026-05-18' |
| recommended_method | browser |
| alternative_methods | - method: api rationale: >- No public JSON/GraphQL API for registration status exists on dmv.ca.gov. The `/wasapp/ipp2/initRegInfoInquiry.do` endpoint sometimes cited online returns 404. Only the server-rendered Struts form at `/wasapp/rsrc/vrapplication.do` works. |
| verified | true |
| proxies | true |
Given a California license plate plus one secondary identifier (last 5 of the VIN, the registered owner's last name, or the company/lessor name), return the vehicle's current California DMV registration status, expiration date, fees owed, and any holds. Read-only — the skill stops at the results page; it never advances into the renewal-payment flow.
The lookup is the CA DMV's free public "Vehicle Registration Status" service, a server-rendered Java/Struts (.do) flow gated by AWS WAF + CloudFront. It works without an account and is the only first-party way to verify CA registration status without making a Public Records Request.
Do not use this skill for:
The flow is a three-step server-rendered form. There is no public JSON API for registration status — confirmed by surveying the dmv.ca.gov surface. Everything goes through wasapp/rsrc/vrapplication.do. Use a remote Browserbase session with --proxies --verified because the WAF is sensitive to datacenter IPs and missing browser fingerprints.
SID=$(browse cloud sessions create --keep-alive --proxies --verified | jq -r .id)
export BROWSE_SESSION="$SID"
A bare session (no --proxies) regularly trips the AWS WAF banner ("Your request has been blocked...") on the first POST. The --verified flag (Verified browsers) is what passes the fingerprint check during form submission. Both are required — do not omit either.
browse open --remote "https://www.dmv.ca.gov/wasapp/rsrc/vrapplication.do"
browse wait load --remote
browse snapshot --remote
Skip the marketing portal page (/portal/vehicle-registration/vehicle-registration-status/) — its only useful link is /wasapp/rsrc/vrapplication.do, so going direct saves one navigation and one cookie round-trip.
The form has a single visible input:
| Field | Selector | Constraint |
|---|---|---|
| License plate | input#licensePlateNumber (name licensePlateNumber) | maxlength 8, pattern [a-zA-Z0-9]*, no spaces / special chars |
Fill it and submit:
browse fill --remote "input#licensePlateNumber" "8ABC123"
browse click --remote 'button[value="Continue"]' # name="method" value="Continue"
browse wait load --remote
The form POSTs to itself (action="/wasapp/rsrc/vrapplication.do", method=post) with method=Continue and licensePlateNumber=<value>. The backend issues a 302 to step 2.
Step 2 asks for one of:
Pick whichever the user supplied. The form is a radio-group + single text input. Snapshot and use refs:
browse snapshot --remote # find the radio for the chosen identifier
browse click --remote '@<radio-ref>' # select identifier type
browse fill --remote 'input[type="text"]' "12345" # the secondary value
browse click --remote 'button[value="Continue"]'
browse wait load --remote
If the user gives "last 5 of VIN", strip dashes/spaces and uppercase. The DMV accepts only alphanumerics here.
The results page is keyed off plate + identifier match. Read the page text:
browse get markdown body --remote
browse screenshot --remote --path screenshots/04-results.png
Map the visible content to the output schema in §Expected Output. Don't click "Renew Registration" / "Pay Now" / any forward CTA — read-only.
browse cloud sessions update "$SID" --status REQUEST_RELEASE
dmv.ca.gov and wasapp/* paths — every registration-status route is server-rendered Struts. Confirmed wasapp/ipp2/initRegInfoInquiry.do (a sometimes-cited "alt" endpoint) returns 404 as of the build date. Don't waste time looking for a faster surface; the only path is the form flow.input#licensePlateNumber, maxlength 8). Step 2 asks for one secondary identifier. New agents commonly stub a one-shot POST with both fields — that returns the step-1 page again because the secondary input doesn't exist in the step-1 form bean.button[name="method"][value="Continue"] — the button is the form's only name="method" element, and its value is what drives Struts dispatch. Targeting button[type="submit"] works too but is less specific.x-frame-options: SAMEORIGIN and an active AWS WAF rule (AWSALB, AWSALBCORS, PD_STATEFUL_*, TS01dc4fc6 cookies are issued on every visit and must be preserved across the multi-step flow). Browserbase's session model handles this automatically; if you're rolling your own HTTP client you must keep the cookie jar.autocomplete="off" everywhere. The form sets autocomplete off; if you browse fill and the input still appears empty on snapshot, the page may be using a non-standard CA-DMV input wrapper. Use browse press Tab after fill to force the blur event before clicking Continue.not_found from the user's perspective, but it is not proof the plate is unregistered (could be a typo in the secondary). Surface this distinction in the output.not_found. There is no way to look up registration status for a non-CA vehicle on dmv.ca.gov. For non-CA plates, the agent should refuse and recommend the relevant state's DMV./wasapp/vrir/start.do (the renewal flow). Read-only skill — stop at the status page.dmv.ca.gov/portal/es/vehicle-registration/vehicle-registration-status/ exists, but the actual /wasapp/rsrc/vrapplication.do form is English-only. Localization happens only on the portal page, not the underlying app.Return a JSON object with one of the following shapes.
{
"success": true,
"license_plate": "8ABC123",
"registration_status": "current",
"expiration_date": "2026-08-31",
"fees_due_usd": 0,
"holds": [],
"raw_status_text": "Your vehicle registration is current. Expires: 08/31/2026.",
"renewal_available": false,
"source_url": "https://www.dmv.ca.gov/wasapp/rsrc/vrapplication.do"
}
{
"success": true,
"license_plate": "8ABC123",
"registration_status": "expired",
"expiration_date": "2025-04-30",
"fees_due_usd": 312.00,
"holds": [
{"type": "smog_certification_required", "detail": "Smog certification is required to renew."}
],
"raw_status_text": "Your registration expired on 04/30/2025. Renewal fees: $312.00. Smog certification required.",
"renewal_available": true,
"source_url": "https://www.dmv.ca.gov/wasapp/rsrc/vrapplication.do"
}
{
"success": true,
"license_plate": "8ABC123",
"registration_status": "not_found",
"expiration_date": null,
"fees_due_usd": null,
"holds": [],
"raw_status_text": "We could not locate a record matching the information provided.",
"renewal_available": false,
"source_url": "https://www.dmv.ca.gov/wasapp/rsrc/vrapplication.do",
"note": "Plate may exist but the secondary identifier (VIN-last-5 / last-name / company-name) didn't match. Re-prompt the user."
}
{
"success": false,
"error_reasoning": "waf_blocked",
"raw_status_text": "Your request has been blocked. ... Request ID: <hex>",
"source_url": "https://www.dmv.ca.gov/wasapp/rsrc/vrapplication.do",
"remediation": "Rotate the residential proxy and retry once after 60s. Confirm `--verified` Verified browsers is enabled."
}
{
"success": false,
"error_reasoning": "service_unavailable",
"raw_status_text": "<verbatim DMV maintenance banner>",
"source_url": "https://www.dmv.ca.gov/wasapp/rsrc/vrapplication.do"
}
{
"success": false,
"error_reasoning": "non_ca_plate",
"raw_status_text": null,
"remediation": "This skill only checks California plates. For other states use that state's DMV registration lookup."
}
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versioncheck-vehicle-registrationExecute the skills CLI command in your project's root directory to begin installation:
browse install dmv.ca.gov/check-if-a-vehicle-is-registered-zgg414Fetches check-vehicle-registration from dmv.ca.gov/check-if-a-vehicle-is-registered-zgg414 and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
.cursor/skills/check-vehicle-registration
Restart Cursor to activate check-vehicle-registration. Access via /check-vehicle-registrationin your agent's command palette.
Learn more:View source on GitHubSkills CLI docsAbout CursorWhat are agent skills?
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
check-refund-status
irs.gov/check-refund-status-89r6ko · tax · 2 shared tags
add-to-cart
kmart.com.au/kmart-irwsr8 · shopping · tag: read-only
search-product
aliexpress.com/search-product-p0h8a7 · ecommerce · tag: read-only
get-smb-funding
nav.com/get-smb-funding-2s1rpm · smb-finance · tag: read-only
entra-app-registration
microsoft/azure-skills · Productivity · tag: registration
find-snapshot
archive.org/find-snapshot-e3fnxh · archives · tag: read-only
Useful defaults in check-vehicle-registration — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
check-vehicle-registration has been reliable in day-to-day use. Documentation quality is above average for community skills.
check-vehicle-registration fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Solid pick for teams standardizing on skills: check-vehicle-registration is focused, and the summary matches what you get after install.
We added check-vehicle-registration from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
Keeps context tight: check-vehicle-registration is the kind of skill you can hand to a new teammate without a long onboarding doc.
I recommend check-vehicle-registration for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
check-vehicle-registration is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Keeps context tight: check-vehicle-registration is the kind of skill you can hand to a new teammate without a long onboarding doc.
check-vehicle-registration is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
showing 1-10 of 30