Get the records
The records are inlookup.records of a person’s report. A screening runs the lookups for each person, so the records are there after a screening reaches the person. Read the report with a key that has the groups scope. A member of your workspace needs a role that can read the group.
cURL
source.date is source.date_. In Ruby, a record’s fields is fields_. The other names are the same as in the API. Read a person’s report in the groups reference shows the full report.
The parts of a record
Sources
source.connector names the connector that read the record. A leaked row has the connector breach. source.site is the website that a person knows the source by. A leaked row also has its table and its date, as a year or a year and month.
source.kind tells you what the record is:
NoResponse can add a kind of source. Read an unknown
source.kind as a leaked row.
Fields
Compare values with
value, not with original. Two sources can write the same date or phone number in different ways, but their cleaned values are the same.
A platform account
The lookups found this account by a username. The person’s report gives it like this:Platform account
loginhas the rolehandle. On a different platform, the handle can have a different field name, but it has the same role.namekeeps the two spaces of the original. Itsvaluehas one space.twitter_usernamehas the rolelinked_account. The name of the field names the network.hireablehas no role, because few sources give it. It is still in the record, with its kind.- The person’s row named this X handle, so
twitter_usernameis inagreed. A reviewer joined the record, soverdictisjoined.
A leaked row
The lookups found this row by the person’s email. It has every column of the row, in name order:Leaked row
password,password_hashandsaltare fields like the others.detailgives the likely algorithm of the hash.lastipholds an IPv4 address as a whole number, as some forums store it. Itsvalueis the address.regdateis a Unix time. Itsvalueis the moment in UTC. It has the rolejoined, ascreated_athas on the platform account. Thus you can compare the two directly.birthdayhas novalue.07/03/1990can be the 7th of March or the 3rd of July, and the site does not tell its country.originalkeeps the value as written.
Kinds
The kind of a field says what sort of value it holds. The kind sets the form ofvalue. There are 45 kinds. A field of any kind is in the record, and text holds what has no other kind.
Roles
The role of a field says which value of its kind it is. A join date and a birth date are both dates, but their roles arejoined and born. An account field and a column of a leaked row with the same meaning have the same role. Each role has values of the kinds in its row.
How distinctive a value is
A value that you can search on hasdistinctive: an email, a phone, a username, a password, a hash, a person name or an IP. rating tells you if a new search on the value can find one person. reason tells you why, in words.
A username is
common below 30 bits of its character model, or when more than 100 leaked rows hold it. A password is common when leaked data holds it 10 times or more, or when it takes fewer than 10^6 guesses. A hash is common in 10 leaked rows or more. A full name is common in more than 50 leaked rows, and one word of a name is always common. An IP is always common. When NoResponse could not count a value, the value has no distinctive.
Search again
A username or a password in one record often leads to the person’s other accounts. You can start a new search on any value that hasdistinctive. Name the record and the field with POST .../people/{person_id}/searches, and do not send the value. Nothing searches again by itself.
Search the unique and distinctive values first. You can still search a common value. A password or a hash search counts the leaked rows that hold the value first. It stops at counted until you run it with POST .../searches/{search_id}/run.
What a search finds joins lookup.records as leads. Each found record’s matched entry names the search in search. The report’s searches list gives each search’s value, and the record and field that it came from. Search again gives the requests, the answers and the rules.
Whose record it is
A search on a username or a name can find accounts of other people. So each record says how likely it is the person:likelihoodis from 0.01 to 0.99. A record that the person’s own email or phone found starts at 0.99.agreednames the fields whose values agree with what NoResponse knows of the person.clashednames the fields that differ from the person’s birth date or full name.joinedistruewhenlikelihoodis 0.9 or more, or when your team joined the record. A record that does not join is a lead.verdictisjoinedorrejectedwhen your team overruled the record.
POST .../people/{person_id}/records with the record’s id and your verdict. Whose record it is gives the request, the answer and the rules.
Limits and remaining
NoResponse never cuts an answer short without a sign. A search of leaked data keeps at most 20 rows of one table and 100 rows in all, from its first 64 tables by name. A row always keeps all its columns. When a search matched more rows, lookup.remaining tells you how many more, for each search and table:
lookup.remaining
by is the kind of value searched, as in matched. rows counts the rows that records does not hold. remaining is absent when records holds every row that matched. To get the rows of one table, search the same field again with that table. A search of one table returns up to 100 rows of it.
Everyone who can read the person can read every record and every field. No other permission applies to leaked rows or passwords.