A whole portfolio of risk, in one pass
Lenders, insurers, pool issuers: paste a list of CVINs, one per line (a CVIN is a public identifier, not a serial number). Get registry status, identity level, data composition and encumbrance signals per device — plus the short list of what needs attention now. Up to 200 devices per batch, free.
What this page is not
It ends when you close the tab
What you see is a photograph of this moment. If a device goes dark tomorrow, or gets pledged a second time the day after, this page will not tell you. Knowing at the moment it happens is what the subscription is: periodic signed verification, liveness alerts, lien-change webhooks, $0.60/device/month. Fee schedule.
Unsigned, unnumbered, not for the file
Lienholder names, principal amounts and contract references sit behind the risk subscription. A numbered, ed25519-signed report you can hand to an auditor is $2/device. This page only tells you whether that report is worth buying.
Facts, not scores
No risk score, no weighted total. A weighted number cannot be independently checked and nobody should lend on one — so you get verifiable facts, and the verdict stays yours.
How to read the exceptions
Unregistered: no record at all. That is not "no risk found", it is "cannot be assessed" — you are taking collateral nobody can trace.
No real observation: records exist, but all of them are demo seeds or test writes. That history cannot be relied on.
Stale / dormant: last observation 30 / 90+ days ago. When a device stops talking, nobody knows whether it is still on the rack.
Duplicate pledge (real): two or more distinct lenders hold active liens at the same time — the category that warrants a phone call today.
Duplicate pledge (seed only): the flag rests entirely on launch-time demo liens. Shown in grey, not red: it proves the pipe works, not that the machine is in trouble.
After the snapshot
Portfolio monitoring
Periodic signed verification, liveness alerts, lien-change webhooks — $0.60/device/month. API side: POST /v1/watch (a $10/30-day risk key is self-serve).
Signed report per device
Numbered, signature-verifiable reports at $2/device; batch with cover summary and monthly risk reports goes through the enterprise lane.
One call, not 200
This page is built on POST /v1/resolve/batch: up to 200 devices per call, returning a summary, an exception list and per-device detail. Same aggregation as this page — one portfolio should not produce two different answers in two systems.
What the paid layer actually does
Monitoring cannot rest on "we will keep an eye on it". The table below is also machine-readable (GET /v1/watch/capabilities) — and you can fire it yourself before subscribing.
| Event | When it fires | Status |
|---|---|---|
| new_observation | A new observation lands on a watched device (any type) | live |
| lien.created | Someone records a lien on the device — a second lender means duplicate pledge | live |
| lien.released | Lien released (original record kept, release appended) | live |
| liveness.gap | No observation for 30 days (precursor to going dark) | live |
| liveness.dormant | No observation for 90 days — declared dormant | live |
| asset.relocated · attestation.stopped · spec.conflict | Relocation / attestation stopped / spec conflict | not yet — subscribing is rejected |
Every delivery is signed
ed25519 over timestamp + "." + raw body, public key published in capabilities. A receiver can prove the alert came from us — not from anyone who merely knows the callback URL.
Fire it before you pay
POST /v1/watch/test sends one test event immediately — no device quota, no commitment to $0.60/device first. Whether the pipe works should be known before payment.
You can check what was sent
Every attempt is logged: GET /v1/watch/deliveries with status, error, latency and success rate. Failures retry 3 times (immediate / 30s / 5min) with the same delivery id — dedupe on it so one blip does not become two alerts.
You can recompute the bill
$0.60/device/month is not a slogan: GET /v1/watch/usage?month=YYYY-MM returns device-days, amount and delivery counts per subscription (the bill doubles as a receipt for service delivered). The rule is fixed: UTC calendar days, partial day counts as one, daily rate = monthly ÷ 30. Anyone with created_at / deactivated_at can recompute the same figure. Deactivating never erases the record — usage and delivery history stay queryable. And when you want to pay, there is a place to pay: POST /v1/watch/usage/settle settles the bill on-chain for its current balance (x402 · USDC), every payment receipt visible in the statement.
POST /v1/watch/usage/settle pays the current balance on-chain (x402 · USDC on Base); no wallet? the old path still works — email us for a formal invoice (bank transfer or USDC), answered within one business day.