Klaw API — verification as a service
One POST returns a 0–100 score, a Pass / Review / Fail decision, a signed token, and a report of where that identity is already exposed on the surface web and the dark web. The applicant’s data is destroyed before the response is written — so it never becomes yours to lose.
POST /v1/verifications201{
"decision": "pass",
"trust_score": 87,
"risk_score": 13,
"grade": "B — Low risk",
"score_governs": true,
"confidence": "high",
"exposure": {
"surface_web": 3,
"dark_web": 1,
"removal_routes": 2
},
"token": "eyJhbGciOiJFZERTQSIsImtpZCI6…",
"retained": null
}retained: null is not a promise. It is the response field.
What you get back
trust_score for the screen, risk_score for your policy engine. They always sum to 100, so nobody has to remember which direction is good.
Pass, Review or Fail against your thresholds — plus triggered_rules naming exactly which rule fired, so you can explain a decline a year later.
Surface web and dark web, with the source, the date and a removal route where one exists. Useful to you, and useful to the applicant.
Ed25519 JWS with a public JWKS. Your downstream services verify the outcome offline, without calling us and without seeing the applicant.
GET /retention returns the record for any verification. The honest answer is a list of digests and a decision — never a value you sent.
Fixture addresses on klaw.test drive every decision path on demand. Test keys are never metered, so your CI cannot run up a bill.
The pipeline
An applicant’s details arrive over TLS, on your server-side call or through a hosted page on our origin — where the data never touches your DOM, your logs or your error tracker.
Ten checks run against breach corpora, sanctions and denylists, surface-web exposure, and device and velocity signals. Range queries mean the corpus never learns who we asked about.
The buffers are zeroed in a finally block before the response is written. What survives is a decision, reason codes and irreversible digests. There is no copy to subpoena.
Three ways in
The same pipeline, the same score, three different answers to the question of who holds the applicant’s details for the four seconds it takes to screen them.
You collect the details in your own form and POST them. Simplest to build, and you hold the data for the length of one request.
The applicant types into a page served on our origin. Their data never enters your DOM, your network tab, your error tracker or your logs.
Someone verified elsewhere can autofill with a one-tap challenge. No re-typing, and it bills at the lower reuse rate because no corpus is queried.
Pricing
You are paying for the pipeline, not for us holding your applicants’ data. Reused attestations and monitoring re-runs bill lower, because they cost us less to serve.
No commitment
$0/mo
79¢ per verification
0 included
Small teams
$299/mo
45¢ per verification
500 included
Most businesses
$999/mo
32¢ per verification
2,500 included
High volume
$2,499/mo
22¢ per verification
10,000 included
Sandbox costs neither of us anything.
Test keys run the real pipeline against fixture addresses on klaw.test. They are metered for visibility and billed at zero — so a runaway loop in your CI is an embarrassment, not an invoice. Forever Free is not on this list; it is granted, never sold.
Build it yourself, or don’t hold it at all
Every part of this is buildable — corpus queries, a scoring model, a policy engine. What you cannot build away is the copy of the applicant’s identity sitting in your database afterwards, and the breach notification you write the day it leaks.
Breach and dark-web corpora
Sanctions and denylist screening
A defensible 0–100 score
Zero applicant data at rest
Nothing to disclose in a breach
Nothing to hand over on subpoena
Signed, offline-verifiable results
Someone else keeps the corpora current
Klaw API
Build it
FAQ
Two ways, neither of which asks you to trust us. GET /v1/verifications/:id/retention returns the record for any run — the honest answer is a decision, reason codes and irreversible digests. And the test suite searches every stored record, API response, webhook payload and signed token for the exact values submitted; if any of them appear, the build fails.
The check is excluded from scoring rather than scored as zero. A dead upstream never silently penalises an applicant — it lowers coverage, and the confidence field reports it. Set minimum_coverage in your policy and thin results route to review automatically.
No. Subject references are HMACs of a process pepper plus a per-tenant salt, so the same applicant produces a different reference for every business. There is no join key, by construction.
Usually, but not always — and the response says which. A sanctions hard stop carries no weight in the number, so a blocked applicant can genuinely measure at trust_score 100. In that case score_governs is false and blocked_by names the rule, so nothing ever renders "approve" beside a decline.
Nothing, for either of us. Test keys run the real pipeline against fixture addresses on klaw.test and are billed at zero. One account carries both key types, so your sandbox and production traffic live side by side.
Start on test keys, which cost neither of us anything. Add a card when you are ready to run live traffic — there is no platform fee on Pay As You Go.
help@klawusa.org