API Documentation
Verify healthcare licenses across all 50 states with a single API call. RN, LPN, NP, PA, MD, and DO β powered by official government data.
Getting Started
The API-Cert API lets you verify healthcare professional licenses in real-time. All requests are made to the following base URL:
https://api.api-cert.com
Note: The production domain api.api-cert.com currently proxies to api-cert-api.onrender.com. Both work, but use the canonical domain for production integrations.
To get started:
- Register for a free API key (50 verifications/month)
- Include your key in the
X-API-Keyheader - Make your first verification request
Authentication
All authenticated endpoints require an API key passed via the X-API-Key header.
X-API-Key: your_api_key_here
To get your key, register with the /v1/register endpoint or email us for a free key. The key is shown only once upon registration β store it securely.
Register
/v1/registerPublic β no auth requiredCreate a new account and receive a free API key. The key is displayed only once in the response.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | required | Your email address |
name | string | optional | Your full name |
company | string | optional | Your organization |
curl -X POST https://api.api-cert.com/v1/register \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"name": "Jane Smith",
"company": "HealthTech Inc"
}'{
"api_key": "ac_live_abc123...",
"key_prefix": "ac_live_abc",
"tier": "free",
"monthly_quota": 50,
"rate_limit_rpm": 10,
"message": "Store this key securely β it will not be shown again."
}Verify License
/v1/verifyRequires API keyVerify a single healthcare professional's license. Returns the license status, expiration, and results of exclusion checks against federal databases.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
license_type | string | required | One of: RN, LPN, NP, PA, MD, DO |
state | string | required | 2-letter state code (e.g. CA, NY, TX) |
last_name | string | required | Provider's last name |
first_name | string | optional | Provider's first name (improves accuracy) |
license_number | string | optional | License number if known (improves accuracy) |
curl -X POST https://api.api-cert.com/v1/verify \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"license_type": "RN",
"state": "MA",
"last_name": "Chen",
"first_name": "Sarah"
}'{
"verified": true,
"license_type": "RN",
"state": "MA",
"full_name": "SARAH J. CHEN",
"license_number": "RN298741",
"status": "ACTIVE",
"expiration_date": "2027-06-30",
"issue_date": "2019-08-15",
"oig_excluded": false,
"sam_excluded": false,
"cms_precluded": false,
"disciplinary_flag": false,
"npi_number": "1234567890",
"latency_ms": 4
}Bulk Verify
/v1/verify/bulkRequires API keySubmit up to 100 verification requests in a single call. Returns a job ID that you can poll for results. Requires Redis-backed async processing.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
requests | array | required | Array of verification objects (max 100). Each object follows the same schema as /v1/verify. |
curl -X POST https://api.api-cert.com/v1/verify/bulk \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"requests": [
{ "license_type": "RN", "state": "CA", "last_name": "Smith" },
{ "license_type": "MD", "state": "NY", "last_name": "Johnson", "first_name": "Robert" }
]
}'{
"job_id": "bulk_abc123",
"status": "processing",
"total_requests": 2,
"message": "Poll GET /v1/verify/bulk/bulk_abc123 for results."
}State Coverage
/v1/statesRequires API keyReturns the coverage matrix showing which license types are supported in each state, along with the data source and last update timestamp.
curl https://api.api-cert.com/v1/states \ -H "X-API-Key: your_api_key_here"
{
"states": {
"CA": {
"supported_types": ["RN", "LPN", "NP", "PA", "MD", "DO"],
"source": "California DCA",
"last_updated": "2026-03-15T06:00:00Z"
},
"NY": {
"supported_types": ["RN", "LPN", "NP", "PA", "MD", "DO"],
"source": "NYSED Office of the Professions",
"last_updated": "2026-03-15T06:00:00Z"
}
}
}Upgrade Tier
/v1/upgradeRequires API keyInitiate a Stripe Checkout session to upgrade your subscription tier. Returns a URL to redirect the user to complete payment.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
tier | string | required | One of: 'starter', 'growth', 'scale' |
success_url | string | optional | URL to redirect after successful payment |
cancel_url | string | optional | URL to redirect if user cancels |
{
"checkout_url": "https://checkout.stripe.com/c/pay/cs_live_...",
"tier": "starter",
"price": "$99/mo"
}Usage Stats
/v1/usageRequires API keyReturns your current billing period usage statistics including requests made, quota remaining, and rate limit status.
curl https://api.api-cert.com/v1/usage \ -H "X-API-Key: your_api_key_here"
{
"tier": "free",
"period_start": "2026-03-01",
"period_end": "2026-03-31",
"requests_used": 12,
"requests_remaining": 38,
"monthly_quota": 50,
"rate_limit_rpm": 10
}Code Examples
Complete examples showing registration and license verification.
cURL
# 1. Register for an API key
curl -X POST https://api.api-cert.com/v1/register \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
# Save the api_key from the response, then:
# 2. Verify a license
curl -X POST https://api.api-cert.com/v1/verify \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"license_type": "RN",
"state": "CA",
"last_name": "Smith",
"first_name": "Jane"
}'Python
import requests
BASE = "https://api.api-cert.com"
# 1. Register
reg = requests.post(f"{BASE}/v1/register", json={
"email": "[email protected]"
})
api_key = reg.json()["api_key"]
# 2. Verify a license
headers = {"X-API-Key": api_key}
resp = requests.post(f"{BASE}/v1/verify", headers=headers, json={
"license_type": "RN",
"state": "CA",
"last_name": "Smith",
"first_name": "Jane"
})
result = resp.json()
print(f"Status: {result['status']}") # ACTIVE
print(f"OIG Excluded: {result['oig_excluded']}") # False
print(f"Latency: {result['latency_ms']}ms") # 4Node.js
const BASE = "https://api.api-cert.com";
// 1. Register
const reg = await fetch(`${BASE}/v1/register`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: "[email protected]" })
});
const { api_key } = await reg.json();
// 2. Verify a license
const resp = await fetch(`${BASE}/v1/verify`, {
method: "POST",
headers: {
"X-API-Key": api_key,
"Content-Type": "application/json"
},
body: JSON.stringify({
license_type: "RN",
state: "CA",
last_name: "Smith",
first_name: "Jane"
})
});
const result = await resp.json();
console.log(`Status: ${result.status}`);
console.log(`OIG Excluded: ${result.oig_excluded}`);Rate Limits & Pricing
All plans include access to every endpoint. Rate limits are enforced per-minute. When you exceed your quota or rate limit, the API returns 429 Too Many Requests.
| Tier | Price | Monthly Quota | Rate Limit |
|---|---|---|---|
| Free | $0 | 50 requests | 10 RPM |
| Starter | $99/mo | 500 requests | 60 RPM |
| Growth | $299/mo | 2,000 requests | 120 RPM |
| Scale | $799/mo | 10,000 requests | 300 RPM |
Upgrade programmatically via POST /v1/upgrade or contact us for enterprise volume.
Status Values
The status field in verification responses indicates the current state of the license. Possible values:
License is current and in good standing. The provider is authorized to practice.
License is active but has conditions, restrictions, or a probationary status attached.
License exists but is not currently active. The provider may have voluntarily deactivated or failed to renew.
License has passed its expiration date and has not been renewed.
License has been temporarily suspended by the state board, often pending investigation or disciplinary action.
License has been permanently revoked by the state board. The provider is not authorized to practice.
The license was found but the status could not be definitively determined from the source data.
No matching license record was found. The provider may not hold a license of this type in this state.
Error Handling
The API uses standard HTTP status codes. Errors return a consistent JSON structure:
{
"error": "Descriptive error message",
"code": "ERROR_CODE",
"status": 401
}Missing or invalid API key. Check your X-API-Key header.
Rate limit or monthly quota exceeded. Upgrade your tier or wait for the next billing period.
Invalid or missing parameters. Check the request body against the endpoint schema.
Data Sources
API-Cert aggregates data from authoritative government sources to provide comprehensive verification:
- β’State Licensing Boards β Official license records from each state's board of nursing, medical board, or equivalent authority.
- β’NPPES (NPI Registry) β National Plan and Provider Enumeration System for NPI number cross-referencing.
- β’OIG LEIE β Office of Inspector General's List of Excluded Individuals/Entities.
- β’SAM.gov β System for Award Management exclusion records.
- β’CMS Preclusion List β Centers for Medicare & Medicaid Services preclusion database.
Data is refreshed daily. Use the GET /v1/states endpoint to see per-state data source details and last update timestamps.
Ready to get started?
Get your free API key and start verifying healthcare licenses in minutes. No credit card required. 50 free verifications per month.
Or register via the API:
curl -X POST https://api.api-cert.com/v1/register -H "Content-Type: application/json" -d '{"email":"[email protected]"}'