Your product. Your customer. Our filing engine.
Programmable detection, statutory filing and post-removal monitoring behind one API. You own the brand, the pricing and the customer relationship. Every request carries an auditable state trail.
- sitesScanned
- —
- exposedCount
- —
- riskBand
- —
- canAssertClean
- —
canAssertClean is false whenever a source could not be reached. A zero with a false assertion means inconclusive, never clear.
POST /v1/premium/jobs → 202 —
See what your users would see
The scan returns a real personalised result: whether the subject is exposed, where, what categories of data are held, and a risk band. It is synchronous, and it does not require an account. Asking a user to commit before you have shown them anything is the largest leak in this funnel, which is why the endpoint answers first.
Two passes run underneath. Sources we can query directly are checked one by one and are the only ones that can ever be reported clean. Alongside that, a search layer checks a much larger and continually growing set of broker domains for a listing. Because it matches one query against the whole domain list, widening that set costs nothing per scan, which is why it keeps growing.
A search hit proves a listing. A search miss proves nothing, so those domains can report found and are never counted toward a clean result. Findings that come from the search layer are also capped at a lower match confidence, so your interface can tell a strong match from a probable one.
Known-breach exposure is looked up in the same call, so a result can cover both where someone is listed and where they have already been leaked.
When a source cannot be reached, the response says so. A scan that finds nothing on the sources it reached, and could not reach the rest, returns canAssertClean: false. Your product should not tell that user they are clear, and our response gives you what you need to avoid it. A false all-clear is the one genuinely harmful way for a privacy report to be wrong.
An exposure becomes a filing target
Detection and removal are different surfaces. You do not have to find a listing to file against the company holding it, and the filing catalogue is much larger than the set of sites anyone can search.
The catalogue is built from public state broker registries, which are government records and carry a compliance contact and a rights URL by law. Each target is matched to the statute that applies to your subject, and to that broker's own stated requirements for what a request must contain.
Where several brands sit under one parent, one filing covers all of them, because they share a compliance address. The catalogue is deduplicated on that basis rather than inflated by counting brands.
The request goes out under statute
Each request is addressed to the broker's registered compliance contact and asserts only the rights the subject's own state actually grants. A California subject gets deletion, opt-out of sale and suppression on that state's response window. A Nevada subject gets opt-out of sale, because Nevada grants no deletion right, and a deletion request goes alongside it as an explicitly voluntary courtesy rather than a false demand.
That distinction is not decoration. A blanket California letter filed for a subject who does not live there asserts a residency that is not true, and a broker is entitled to reject it on exactly that basis.
Per-broker behaviour is data rather than code: what a given broker requires, how it confirms, whether it accepts a delegated confirmation, and how many attempts are reasonable. Nothing is sent speculatively. Where a broker needs an identifier we hold below our confidence floor, the request is held and the job says what it needs rather than filing a stranger's details.
target nuwber.com
channel compliance-email
statute CCPA §1798.105 · §1798.120
subject_ref sha256:9f2c…a41d (hashed, not reversible)
address_src listing:nuwber.com (conf. 0.82, floor 0.65)
reply_to removals+01JZQK4M8T@… (per-job, gates the reply)
body [redacted — contains subject PII]
attempt 1 of 3
Replies are parsed, not assumed
A sent request is not a completed one, and the gap between those two things is where this category loses people's trust. Broker replies come back to a per-job address, are checked against the broker's own domain and known compliance address, and are classified before they move anything. Anything failing those checks moves nothing.
A broker saying "done" is not the same as it being done. A confirmation puts the record at provider_attested. Only an independent rescan moves it to scan_verified. Most of this market reports both as "removed"; your customer gets to see which one they have.
When a broker asks for more
This is where removals quietly fail. A broker demands a piece of verification the request did not carry, nobody answers, and the request dies without ever being refused. It never shows up as a failure because nothing failed.
A demand like that becomes a real state on the record, carrying the field required, the reason, which broker asked and the statutory deadline for answering. You pass the answer back through one call and we reply inside the existing thread with that broker, so the exchange continues rather than restarting.
state needs_input
requiredField dateOfBirth
sourceBroker whitepages.com
deadlineAt 2026-09-10T00:00:00Z from that state's response window
POST /v1/premium/jobs/{id}/provide answers in-thread · no credit
The platform provides automated filing coverage across a large compliance catalogue. Verification tracking and re-checking are implemented, but large-scale completion metrics are still being accumulated from live campaigns, so we do not yet publish verified completion rates.
We would rather you read that than a percentage we cannot stand behind. When the completion data matures, it will be published with its method attached.
Most removals are temporary
Brokers re-list. A record that was verified absent can reappear months later from a fresh data purchase, and a product that swept once and stopped will be quietly wrong about its own customer.
The re-check loop rescans on an interval, and a reappearance moves the record back to filed automatically. That cycle is the reason a removal product renews. It is also the part your subscription is actually selling, so it is worth making visible in your own interface rather than leaving it running silently.
A re-check that cannot read the page returns unverified and changes nothing. A broker having a bad day is not evidence that someone was re-listed, and it must never be allowed to downgrade a removal you have already confirmed to your customer.
2026-05-14 scan_verified absent
2026-06-13 scan_verified absent
2026-07-13 reappeared listing restored
2026-07-13 filed re-filed, attempt 1 of 3
The report carries your name, not ours
A finished scan renders as a self-contained exposure report you can put in front of your own customer. It takes your display name, your accent colour, your logo, your call to action and your support contact. We do not appear on it.
It shows evidence, not a count. The actual listings, the source, the categories of data held and the confidence, rather than a total that asks to be taken on faith. Sources that could not be checked appear as their own state and are never folded into "not exposed".
It reports data categories, not the literal values, so it can show someone that their address and relatives are listed without republishing them. For a cold assessment there is a stricter mode that hides the profile URLs too, for when even the link is more than the recipient has agreed to see.
Share it with a link. The recipient needs no key and no account. Links expire, and you can revoke one at any time.
GET /v1/premium/jobs/{id}/report co-branded HTML, your key
POST /v1/premium/jobs/{id}/share → link, expiry, revocable
GET /r/{shareId} public render, no key needed
DELETE /v1/premium/shares/{shareId} revoke immediately
Why partners build on this
If people arrive at your product already worried about their own exposure, you have paid for the expensive half. Attention is the hard part and you have it. What is usually missing is something recurring to point it at.
Removal plus monitoring is that: a subscription with a built-in reason to renew, because the work genuinely continues. Revealing a result is a one-off sale. Keeping someone clean is a relationship.
What building it yourself means owning
- Broker research and catalogue maintenance
- Statutory templates and per-state policy
- Filing, retries, reply parsing, state tracking
- Re-listing detection and re-filing
- Permanent upkeep as brokers and law shift
Integrate once. Brand it, price it, sell it.
Reselling a service, or running your own
You own the brand, the pricing and the customer. You are not reselling someone else's product, you are running your own on top of infrastructure.
Four calls and a webhook
The free scan is synchronous. Everything else is a job: you post it, you get a ULID back immediately, and you either poll or take the signed webhook.
POST /v1/exposure/scanSynchronous scan. Returns exposure, sources and risk band.POST /v1/premium/jobsCreates a scan or scan+remove job. Returns 202 and a job id.GET /v1/premium/jobs/{id}Status, result and the per-target removal states.GET /v1/premium/jobs/{id}/reportThe co-branded report as self-contained HTML.POST /v1/premium/jobs/{id}/shareA shareable link your customer can open without a key.POST /v1/premium/jobs/{id}/provideAnswer a broker's demand in-thread. Costs no credit.GET /v1/premium/usageReconciliation ledger: billed jobs, free events, tie-out totals.GET /v1/premium/coverageApplicable coverage, with the two coverage classes kept separate.DELETE /v1/premium/jobs/{id}Cancel.
Events
Three signed events, so you can drive a live interface instead of polling for a final answer. Every one carries a receipt: the broker, its opt-out URL, when it was filed, any confirmation reference, and the current state.
removal.updatePer broker, on every transition, including a re-listing.removal.progressJob-level rollup whenever that job moved.job completionTerminal status and the full result. Durable, with retries.
X-Signature: sha256=<HMAC(your webhook secret, raw body)>
X-Timestamp: 2026-07-27T14:02:11Z
X-Delivery-Id: 01JZQK7R2V4W8X0Y1Z2A3B4C5D
{
"event": "removal.update",
"jobId": "01JZQK4M8T…",
"removal": {
"target": "nuwber.com",
"state": "provider_attested",
"optOutUrl": "https://nuwber.com/removal/link",
"filedAt": "2026-07-13T09:14:02Z",
"confirmationRef": "NW-88213"
}
}
The signing secret is per customer, not global, so nobody else's key can forge a callback to your endpoint. Delivery is at-least-once over five attempts, https only, with the hostname re-resolved before each attempt so a host that was public when you registered it cannot be repointed inward between retries. Dedupe on X-Delivery-Id.
A separate signed event fires when the integration guide's version moves, so a contract change reaches you without anyone remembering to send an email. Patch releases do not fire it, because a notification that arrives on every edit is one nobody reads.
Request keys
Tell us what you are building and roughly what volume looks like. You will get a reply from a person, and a key pair with a test quota to integrate against.
The hard part of a privacy product is not filing the requests. It is holding a user's trust in the moment they find out how exposed they are. BrokerBlitzer exists so you can own that moment without running a removal operation to do it.