---
title: "Search verified well-driller licenses in a state"
method: GET
path: "/api/driller-license-lookup"
tags: ["Driller directory"]
---

# Search verified well-driller licenses in a state

`GET /api/driller-license-lookup`

## Request

- Base URL: `https://drillerdb.com`
- URL: `https://drillerdb.com/api/driller-license-lookup`
- Auth: none declared

Searches verified state license records by driller or company name and/or license number within one state, joined to the Find-a-Driller directory. When nothing matches, nearbyDrillers lists verified drillers in that state; an empty matches array never means a driller is unlicensed. Public, no key. Rate limited per IP.

## Query parameters

- `state` string, required
- `name` string
- `license` string

## Response `200`

Matches (possibly empty) and, on a miss, verified drillers in the state.

- DrillerLicenseLookupResponse
  - `state` string, required
  - `matches` LicenseMatch[], required
    - `licenseNumber` string, required
    - `state` string, required: Two-letter state.
    - `licenseType` string, nullable, required
    - `status` 'active' | 'expired' | 'suspended' | 'revoked' | 'unverified' | 'null', nullable, required: The state record's status. unverified: the record came from a state license roster DrillerDB cannot re-check, so it is reported as neither active nor expired; expiresDate and lastVerifiedAt are null for it. Confirm it with the state board.
    - `holderName` string, nullable, required
    - `holderType` 'individual' | 'company' | 'null', nullable, required
    - `issuedDate` string, nullable, required
    - `expiresDate` string, nullable, required
    - `lastVerifiedAt` string, nullable, required
    - `sourceUrl` string, nullable, required: State board record, https only.
    - `companyName` string, nullable, required
    - `companySlug` string, nullable, required: Directory profile: https://drillerdb.com/contractor/{companySlug}.
    - `companyCity` string, nullable, required
  - `nearbyDrillers` LicensedDriller[], required: Only populated when matches is empty.
    - `name` string, required
    - `slug` string, required: Directory profile: https://drillerdb.com/contractor/{slug}.
    - `city` string, nullable, required
    - `activeLicenses` integer, required

## Other responses

- `400`: Unknown state, or neither name nor license was long enough to search.
- `429`: Too many requests from this IP address. Wait the number of seconds in Retry-After.
- `500`: The lookup failed; retry.

---

[API](https://skmtc.dev/drillerdb/apis/drillerdb-public-apis.md) · [All operations](https://skmtc.dev/drillerdb/apis/drillerdb-public-apis/llms.txt) · [OpenAPI document](https://skmtc.dev/drillerdb/apis/drillerdb-public-apis/revisions/aeb372774d99?raw)
