Headless, if you want it.
Searches, the purpose list and the audit export over REST, for wiring the platform into your own tools.
Authentication
Bearer token in the header. Keys are scoped to an account and revoked one by one.
Authorization: Bearer lds_live_...Every request needs a purpose
purpose_code is required on every search, with no account-level default. Requests
without one are rejected before any source is called.
{
"product": "person.search",
"purpose_code": "GLBA_JUDGMENT_ENFORCEMENT",
"matter_ref": "24-2-01847-3 KNT",
"subject": {
"first_name": "...",
"last_name": "...",
"last_known_address": "...",
"state": "WA"
}
}Response
Every record carries its source. status is hit or
no_hit; a no_hit is a search that ran and found nothing.
{
"search_id": "srch_01JBQ8W2K9",
"status": "hit",
"confidence": "corroborated", // single | corroborated
"results": [
{
"address": "...",
"first_seen": "2023-04",
"last_seen": "2026-07",
"source": "Credit header"
}
],
"purpose_code": "GLBA_JUDGMENT_ENFORCEMENT"
}A case, not a search
The thing to integrate. Give Kenna a subject and a purpose; she runs every live source, works the leads each result opens, writes a position, and calls your endpoint when it is done. Everything runs under the one purpose code, is filed under the matter, and every step is written to the file.
{
"purpose_code": "GLBA_JUDGMENT_ENFORCEMENT",
"matter_ref": "24-2-01847-3 KNT", // optional, generated if absent
"subject": { "first_name": "...", "last_name": "...", "state": "WA", "dob": "..." },
"cap": 8, // searches beyond the sweep, at most 40
"webhook_url": "https://...", // optional, https only
"webhook_secret": "..." // signs the call: X-Lodestone-Signature, HMAC-SHA256 of the body
}
// 202 Accepted
{ "matter_ref": "24-2-01847-3 KNT", "status": "queued", "poll": "/v1/cases/24-2-01847-3%20KNT" }
Poll GET /v1/cases/{matter_ref}, or wait for the webhook. The reply carries the position
(answer, confidence, because, what could change it, the next move), the casework line by line, and
every search with its ID. status is queued, working or
done. A subject several people match stops with the reason and waits for an identifier.
{
"event": "case.done",
"matter_ref": "24-2-01847-3 KNT",
"searches": 14,
"position": { "answer": "...", "confidence": "moderate", "next_action": "..." }
}Errors
| Code | Meaning |
|---|---|
| 400 | Malformed request or missing purpose_code |
| 401 | Invalid or revoked key |
| 403 | blocked Purpose not permitted for this account or data class |
| 409 | The same search ran within the hour; the earlier result is returned by ID |
| 429 | Rate limit exceeded |
| 502 | Upstream source unavailable |
| 503 | No live source for this search yet |
A blocked request is still logged, with the reason it was blocked.