API Documentation
Integrate Ohio professional license verification directly into your applications. Free for verified businesses. RESTful JSON API.
Quick Start
All API requests require your API key in the X-API-Key header.
curl -X POST "https://ohiolicensecheck.com/api/v1/lookup/cached" \
-H "Content-Type: application/json" \
-H "X-API-Key: olc_your_api_key_here" \
-d '{
"board": "Nursing Board",
"license_number": "RN.516652"
}'Authentication
API keys are issued free of charge to verified business accounts. Keys are prefixed with olc_.
Request Header
X-API-Key: olc_your_key_hereError Response (401)
{"detail": "Invalid or inactive API key"}Don't have an API key? Request one here →
Base URL
https://ohiolicensecheck.com/api/v1All endpoints are relative to this base URL. HTTPS only.
Endpoints
🔍 License Lookup
/lookup/boardsGet all 24 Ohio licensing boards with their license types
/lookup/boards/{board}/typesGet license types for a specific board
/lookup/cachedLook up a license from cache (uses last nightly snapshot — recommended for API consumers)
POST /lookup/cached — Request Body
{
"board": "Nursing Board", // required — must match board name exactly
"license_number": "RN.516652", // required for cached lookup
"license_type": "Registered Nurse (RN)" // optional
}Response
{
"found": true,
"license_number": "RN.516652",
"full_name": "SMITH, JANE A",
"board": "Nursing Board",
"license_type": "Registered Nurse (RN)",
"status": "ACTIVE",
"expiry_date": "2026-01-31",
"days_until_expiry": 45,
"city": "Columbus",
"state": "OH",
"raw_status": "Active",
"extra_data": {},
"cached": true,
"last_scraped": "2025-03-30T02:14:22"
}🏛️ GET /lookup/boards — Response
{
"boards": [
"Accountancy Board",
"Architects Board",
"Board of Pharmacy",
"Nursing Board",
"Medical Board",
"... (24 total)"
],
"board_details": {
"Nursing Board": {
"code": "RN",
"license_types": [
"Registered Nurse (RN)",
"Licensed Practical Nurse (LPN)",
"Advanced Practice Registered Nurse (APRN)",
"Dialysis Technician",
"Medication Aide"
]
}
}
}📊 License Status Values
ACTIVELicense is current and valid
EXPIREDLicense has lapsed
SUSPENDEDLicense suspended by board
INACTIVELicense marked inactive
UNKNOWNStatus could not be determined
Error Codes
| Code | Meaning |
|---|---|
200 | Success |
400 | Bad request — check your request body |
401 | Invalid or missing API key |
404 | License not found in cache — try looking it up via the website first |
409 | Conflict — duplicate subscription |
429 | Too many requests — slow down or contact us |
500 | Internal server error |
Code Examples
Python
import requests
API_KEY = "olc_your_api_key_here"
BASE = "https://ohiolicensecheck.com/api/v1"
def check_license(license_number: str, board: str) -> dict:
resp = requests.post(
f"{BASE}/lookup/cached",
json={"board": board, "license_number": license_number},
headers={"X-API-Key": API_KEY},
timeout=30,
)
resp.raise_for_status()
return resp.json()
# Check a nursing license
result = check_license("RN.516652", "Nursing Board")
if result["found"]:
print(f"{result['full_name']} — {result['status']} — Expires: {result['expiry_date']}")
if result.get("days_until_expiry", 999) <= 30:
print("⚠️ License expiring soon!")JavaScript / Node.js
const API_KEY = 'olc_your_api_key_here';
const BASE = 'https://ohiolicensecheck.com/api/v1';
async function checkLicense(licenseNumber, board) {
const res = await fetch(`${BASE}/lookup/cached`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': API_KEY,
},
body: JSON.stringify({ board, license_number: licenseNumber }),
});
if (!res.ok) throw new Error(`API error: ${res.status}`);
return res.json();
}
// Get all boards
const { boards } = await fetch(`${BASE}/lookup/boards`, {
headers: { 'X-API-Key': API_KEY }
}).then(r => r.json());
console.log('Available boards:', boards);cURL — Batch License Check
# Check multiple licenses with a loop
for lic in "RN.516652" "RN.789012" "LPN.334455"; do
curl -s -X POST "https://ohiolicensecheck.com/api/v1/lookup/cached" \
-H "Content-Type: application/json" \
-H "X-API-Key: olc_your_key" \
-d "{\"board\": \"Nursing Board\", \"license_number\": \"$lic\"}" | \
python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('full_name'), d.get('status'), d.get('expiry_date'))"
doneUsage Notes
Free Tier
Currently free for all verified business accounts. Fair use applies.
Cache Freshness
Cached data is refreshed nightly at 2AM ET. For real-time data, use the website.
Boards Required
Always provide the exact board name from /lookup/boards. Typos return 400.
Key Security
Never expose API keys in client-side code. Keys shown only once at generation.
Ready to integrate?
Get your free API key in minutes. Requires a verified business account.
Request API Key →