Guides
Attorneys
Attorney records are built from official bar directories and state filings, then kept accurate by the attorneys themselves through a free claim-and-correct flow. A record you fetch today tells you who the person is, whether they're licensed, where they practice — and, for every field, exactly which source said so.
Ids and the provenance envelope
Attorneys carry API-stable public ids (atty_…) — safe to store as foreign keys. Every response pairs the canonical record with _meta:
"_meta": {
"fieldSources": {
"email": {
"source": "bar_scrape", // which pipeline asserted the winning value
"assertionId": "a91f...", // row in the append-only assertions log
"assertedAt": 1748419200000, // Unix ms
"confidence": 0.95 // 0..1
}
},
"lastReconciledAt": 1748419200000,
"lastVerifiedAt": 1752019200000 // present once the attorney claims the record
}Sources include bar_scrape, bar_bulk_export, state_sos, firm_website, attorney_correction, and staff_edit. When sources disagree, a per-field precedence matrix decides: bar directories beat firm websites for bar-status fields; verified attorney corrections beat both.
Endpoints
/attorneys/lookupSearch attorneys by name, jurisdiction, bar number, or email. Name search covers canonical + variant names (maiden names, initials, firm-website spellings).
name- string — full-text match on canonical + variant names
jurisdiction- string — two-letter US state code
barNumber- string — exact match, combine with jurisdiction
email- string — exact, case-insensitive
isVerified- boolean — limit to attorney-claimed records
limit- integer 1–100 (default 25)
Example response
{
"results": [
{
"attorney": {
"id": "atty_iozqS3hOyG4fzddo2aeK",
"canonicalName": "Jane R. Smith",
"variantNames": ["Jane Smith", "J. R. Smith"],
"email": "jsmith@smithlaw.com",
"phone": "+1 305 555 0100",
"practiceAreas": ["Civil Litigation", "Insurance"],
"yearsAdmitted": 2009,
"currentFirmId": "firm_8Q1yTf3kPw",
"currentFirm": {
"id": "firm_8Q1yTf3kPw",
"canonicalName": "Smith & Alvarez LLP",
"websiteUrl": "https://smithlaw.com"
},
"barAdmissions": [
{
"attorneyId": "atty_iozqS3hOyG4fzddo2aeK",
"jurisdiction": "FL",
"barNumber": "112233",
"status": "active",
"admittedAt": 1230768000000
}
],
"isVerified": true,
"claimedAt": 1751500800000,
"createdAt": 1748419200000
},
"_meta": { "fieldSources": { "...": "..." }, "lastReconciledAt": 1752019200000 }
}
]
}/attorneys/{id}Full canonical view for one attorney — same shape as a lookup result, fetched by public id. 404 not_found if the id doesn't exist or the record is suppressed.
/attorneys/{id}/assertionsThe append-only provenance log behind the canonical view. One row per source-asserted fact, including superseded values — this is the audit trail.
field- string — filter to one field (e.g. email)
limit- integer 1–500 (default 100)
Example response
{
"results": [
{
"id": "a91f2c...",
"field": "email",
"value": "jsmith@smithlaw.com",
"source": "attorney_correction",
"assertedAt": 1751587200000,
"confidence": 1,
"supersededBy": null // currently winning
},
{
"id": "a3d08b...",
"field": "email",
"value": "jane.smith@oldfirm.com",
"source": "bar_scrape",
"sourceUrl": "https://www.floridabar.org/directories/find-mbr/...",
"assertedAt": 1748419200000,
"confidence": 0.9,
"supersededBy": "a91f2c..." // history preserved, never deleted
}
]
}Verifying licensure
/bar-admissions/verifyCheapest 'is this attorney actually licensed?' call — one round-trip, one billable unit. verified is true only when the admission status is active.
jurisdiction- string — required, two-letter code
barNumber- string — required
Example response
{
"verified": true,
"admission": {
"jurisdiction": "FL",
"barNumber": "112233",
"status": "active",
"admittedAt": 1230768000000
},
"attorney": {
"id": "atty_iozqS3hOyG4fzddo2aeK",
"canonicalName": "Jane R. Smith",
"currentFirmId": "firm_8Q1yTf3kPw"
}
}A bar number that doesn't exist returns { "verified": false, "admission": null, "attorney": null } with status 200 — absence is an answer, not an error.