Developer API

API Documentation

Integrate Ohio license verification into your applications — or plug it straight into an AI assistant. Free REST + JSON API and a hosted MCP server.

REST + JSON
API Key Auth
All 24 Boards
MCP for AI assistants

New — MCP server for AI assistants

Connect Claude (or any MCP client) to https://ohiolicensecheck.com/mcp and verify Ohio licenses in conversation — no code required. See setup →

Quick Start

All API requests require your API key in the X-API-Key header. Requests without a valid key are rejected with 401.

Rate limits. Authenticated API: 120 requests/minute per IP. The MCP server: 20 requests/minute per IP. Exceeding a limit returns 429 — retry after a short pause. Need a higher limit? Get in touch.

curl -X POST "https://ohiolicensecheck.com/api/v1/lookup/verify" \
  -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_here

Error Response (401)

{"detail": "Invalid or inactive API key"}

Don't have an API key? Request one here →

Base URL

https://ohiolicensecheck.com/api/v1

All endpoints are relative to this base URL. HTTPS only.

Endpoints

License Lookup

GET
/lookup/boards

Get all 24 Ohio licensing boards with their license types

GET
/lookup/boards/{board}/types

Get license types for a specific board

POST
/lookup/verify

Verify a license by number or by name (individuals), or by business name. Served instantly from Ohio's official daily dataset.

POST
/lookup/cached

Deprecated alias for /lookup/verify — identical behaviour, kept working for existing integrations.

POST /lookup/verify — Request Body

Renamed: this endpoint was previously /lookup/cached, from when it served a scrape cache. Lookups now come from the State of Ohio's official daily dataset. The old path still works and returns exactly the same response — no change is required to existing integrations.

Search by license number or by name (individuals), or set search_type: "business" for business/establishment licenses. board is always required.

// (a) By license number
{
  "board": "Nursing Board",          // required — must match a board name exactly
  "license_number": "RN.516652"
}

// (b) By name (individuals) — last_name required, first_name optional
{
  "board": "Nursing Board",
  "last_name": "Smith",
  "first_name": "Jane"               // optional; partial (prefix) matches allowed
}

// (c) Business / establishment licenses
{
  "board": "Board of Pharmacy",
  "search_type": "business",
  "business_name": "CVS"             // or use "license_number"
}

A search matching more than one record returns them in a multiple array; a single match (or any license-number lookup) returns the full record shown below.

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

ACTIVE

License is current and valid

EXPIRED

License has lapsed

SUSPENDED

License suspended by board

INACTIVE

License marked inactive

UNKNOWN

Status could not be determined

Error Codes

CodeMeaning
200Success
400Bad request — check your request body
401Invalid or missing API key
404License not found in cache — try looking it up via the website first
409Conflict — duplicate subscription
429Too many requests — slow down or contact us
500Internal server error

MCP Server (for AI assistants)

OhioLicenseCheck is available as an MCP (Model Context Protocol) server, so AI assistants like Claude can verify Ohio licences directly in a conversation — no code required.

Endpoint (Streamable HTTP)

https://ohiolicensecheck.com/mcp

Paste the URL without quotes. Copying it from the JSON block below can bring a trailing " along, which makes the connector fail with a confusing sign-in/registration error.

Claude Desktop / claude_desktop_config.json

{
  "mcpServers": {
    "ohiolicensecheck": {
      "type": "http",
      "url": "https://ohiolicensecheck.com/mcp"
    }
  }
}

Available tools

verify_licenseVerify by licence number. The board is optional — Ohio numbers are unique statewide, so the correct board is detected automatically.
search_licenses_by_nameFind licence holders by name (board required). Returns up to 100 matches.
verify_business_licenseVerify establishments — pharmacies, salons, firms, funeral homes.
list_ohio_boardsList the 24 boards and their licence types.

No API key needed — the MCP server is open so you can connect an assistant in seconds. It is rate limited to 20 requests/minute per IP; heavier or automated use should go through the authenticated REST API above. Every tool result includes data_as_of so the assistant can state how current the record is. As with the REST API, results reflect Ohio's most recent daily publication — for official primary-source verification, confirm with the issuing board.

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/verify",
        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("WARNING: 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/verify`, {
    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/verify" \
    -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'))"
done

Usage Notes

Free Tier

Currently free for all verified business accounts. Fair use applies.

Always Current

Fresh active licenses return instantly from cache; anything stale or uncached is verified live against the state board and cached automatically.

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 →