Home › Guides › Choosing an API
There is no single government API for contractor licenses. Each state board runs its own lookup, so every vendor is stitching boards together, and they differ a lot in coverage, freshness, and what they tell you when a board is down. Ask every vendor these questions. Our own answers are in the last column.
| Ask | Why it matters | TradesAPI |
|---|---|---|
| Does it cover every state you work in, and cities too? | Licensing is run state by state, and some trades are licensed by the city instead. A vendor that covers a handful of states leaves you checking the rest by hand. | All 51 state jurisdictions (50 states plus DC) and 16 city boards, under one request shape. |
| What happens when a state isn't available? | Portals go down. You want a clear, machine-readable error, not a guessed answer or a silent not-found. | A structured error with a Retry-After header, never a made-up result. Live status for every jurisdiction is public at /status. |
| Is the answer live, and can you tell? | A stale active can approve someone whose license lapsed last week. | Only active licenses are cached, for 24 hours. Expired and not-found results are checked again every time. Each response says whether it came from the live portal, the cache, or bulk board data, and how old the record is. fresh=true forces a live check. |
| Does it return disciplinary history, and say when it can't? | An empty list should mean a clean record, not missing data. | Disciplinary actions where the board publishes them, plus a disciplinary_data_available flag so you know when an empty list really means clean. |
| Is it synchronous? | Callback-only APIs mean building a webhook receiver before your first check works. | GET /verify answers in the same request. Larger jobs can use async batch jobs. |
| Can you check in bulk, and search by name? | Onboarding lists and renewals come in batches, and intake forms often miss the license number. | POST /batch takes up to 200 licenses per call. /search finds licenses by business or person name when you don't have the number. |
| How are you billed when a check fails? | Some vendors charge per request, including errors and unsupported states. | One credit per successful verification. Errors and unsupported jurisdictions are not charged. |
| Can you test it before you pay? | You should run a vendor against contractors whose status you already know, including one recently lapsed and one with discipline. | 50 free verifications on every new key, plus a no-key sandbox with deterministic test data. |
| Can an AI agent use it? | More verification now happens inside assistants and agent workflows. | A hosted MCP endpoint with browser sign-in, and an npm MCP client for local use. |
Pick ten contractors whose status you already know: a few active, at least one recently lapsed, and one with a disciplinary record. Run them through each vendor and compare. With TradesAPI you can do this on the 50 free verifications, or try the request shape first in the sandbox with no key.
Next: how to verify a contractor license via API, what each response field means, and live status for every jurisdiction.
Every new API key includes 50 free verifications across all 50 states plus DC, with hosted MCP access for AI agents. No credit card to start.