BizCompliance API Documentation
Everything you need to integrate business compliance data into your application.
Quick Start
Make your first API call in under 2 minutes. Pass your API key in the Authorization header and query for requirements by business type and location.
Authorization: Bearer YOUR_API_KEY
# Get compliance requirements for a Restaurant in San Francisco, CA
curl "https://api.bizcomplianceapi.com/v1/requirements?business_type=restaurant&city=San+Francisco&state=CA" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"data": {
"business_type": "restaurant",
"location": {
"city": "San Francisco",
"state": "CA",
"county": "San Francisco County"
},
"requirements": [
{
"id": "req_biz_lic_sf_ca",
"name": "SF Business Registration Certificate",
"type": "business_license",
"issuing_authority": {
"name": "SF Office of the Treasurer",
"url": "https://sftreasurer.org/business",
"phone": "(415) 554-6134"
},
"fee_range": { "min": 90, "max": 500, "currency": "USD" }
}
// ... more requirements
]
}
}
Authentication
All API requests require an API key. Pass it as a Bearer token in the Authorization header on every request. Generate your API key from your dashboard after signing up.
curl "https://api.bizcomplianceapi.com/v1/requirements?business_type=restaurant&city=Austin&state=TX" \
-H "Authorization: Bearer YOUR_API_KEY"
Rate Limits by Plan
| Plan | Requests / Day | Requests / Month |
|---|---|---|
| Starter | 100 req/day | ~3,000 / month |
| Growth | 500 req/day | ~15,000 / month |
| Scale | 3,000 req/day | ~90,000 / month |
Authentication Error Responses
{
"success": false,
"error": {
"code": "invalid_api_key",
"message": "The API key provided is invalid or has been revoked.",
"details": "Regenerate your key at https://bizcomplianceapi.com/dashboard"
}
}
Endpoints
Returns the complete list of licenses, permits, and registrations required to operate a given business type legally in a specific city and state. Each requirement includes the issuing authority, estimated fees, renewal schedule, application checklist, and penalty information for non-compliance.
| Parameter | Type | Required | Description |
|---|---|---|---|
| business_type | string | Required | Business type slug (e.g. restaurant, retail, contractor). See /v1/business-types for the full list. |
| city | string | Required | City name (e.g. San Francisco, Austin, New York City) |
| state | string | Required | Two-letter state code (e.g. CA, TX, NY) |
| county | string | Optional | County name for county-level requirements. Improves accuracy when a city spans multiple counties. |
curl "https://api.bizcomplianceapi.com/v1/requirements?business_type=restaurant&city=San+Francisco&state=CA" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"data": {
"business_type": "restaurant",
"location": {
"city": "San Francisco",
"state": "CA",
"county": "San Francisco County"
},
"requirements": [
{
"id": "req_biz_lic_sf_ca",
"name": "SF Business Registration Certificate",
"type": "business_license",
"category": "municipal",
"issuing_authority": {
"name": "SF Office of the Treasurer & Tax Collector",
"url": "https://sftreasurer.org/business",
"phone": "(415) 554-6134"
},
"fee_range": {
"min": 90,
"max": 500,
"currency": "USD"
},
"renewal": {
"frequency": "annual",
"month": 5
},
"application_checklist": [
"Completed application form",
"Federal EIN",
"Proof of business entity (LLC/Corp docs)",
"Payment of registration fee"
],
"penalty": {
"min_fine": 500,
"max_fine": 5000,
"other_consequences": [
"Forced closure",
"Lease termination clause triggered"
]
}
}
]
}
}
Returns the complete list of business type slugs accepted by the /v1/requirements endpoint. Use this to populate dropdowns or validate input before submitting requests.
curl "https://api.bizcomplianceapi.com/v1/business-types" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"data": [
{ "id": "restaurant", "name": "Restaurant / Food Service", "category": "food_beverage", "description": "Full-service dining establishments" },
{ "id": "retail", "name": "Retail Store", "category": "retail", "description": "Physical retail locations selling goods" },
{ "id": "contractor", "name": "General Contractor", "category": "construction", "description": "Licensed general contractors" }
// ... 44 more business types
]
}
Returns all cities, states, and counties currently in our compliance database. Check this endpoint before making requirements lookups to verify your target location is covered.
| Parameter | Type | Required | Description |
|---|---|---|---|
| state | string | Optional | Filter by two-letter state code (e.g. CA) to return only cities in that state. |
curl "https://api.bizcomplianceapi.com/v1/locations?state=CA" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"data": [
{ "city": "San Francisco", "state": "CA", "county": "San Francisco County" },
{ "city": "Los Angeles", "state": "CA", "county": "Los Angeles County" },
{ "city": "San Diego", "state": "CA", "county": "San Diego County" },
{ "city": "Sacramento", "state": "CA", "county": "Sacramento County" }
]
}
Creates a monitoring subscription for a business. You will receive webhook notifications at the specified lead-day intervals before each license or permit renewal deadline. Monitoring is billed at $3 per business per month.
| Field | Type | Required | Description |
|---|---|---|---|
| business_id | string | Required | Your internal identifier for this business (max 128 chars) |
| business_type | string | Required | Business type slug (e.g. restaurant) |
| city | string | Required | City where the business operates |
| state | string | Required | Two-letter state code |
| webhook_url | string | Required | HTTPS URL to receive webhook POST requests. Must return 2xx to acknowledge receipt. |
| lead_days | number[] | Optional | Days before renewal to trigger alerts. Defaults to [30, 60, 90]. |
curl -X POST "https://api.bizcomplianceapi.com/v1/monitor" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"business_id": "biz_8f3a9c12d4e7",
"business_type": "restaurant",
"city": "San Francisco",
"state": "CA",
"webhook_url": "https://yourapp.com/webhooks/compliance",
"lead_days": [30, 60, 90]
}'
{
"success": true,
"monitor_id": "mon_7b2e4f91a3c6",
"next_check": "2026-04-10T08:00:00Z"
}
Returns the current status of a monitoring subscription, including all active licenses being tracked and any upcoming renewal alerts scheduled.
curl "https://api.bizcomplianceapi.com/v1/monitor/mon_7b2e4f91a3c6" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"monitor_id": "mon_7b2e4f91a3c6",
"business_type": "restaurant",
"location": { "city": "San Francisco", "state": "CA" },
"active_licenses": [
{ "id": "req_biz_lic_sf_ca", "name": "SF Business Registration Certificate", "status": "active" }
],
"upcoming_renewals": [
{ "id": "req_health_permit_sf_ca", "renewal_due": "2026-06-30", "days_until": 88 }
]
}
Permanently removes a monitoring subscription. No further webhook alerts will be sent for this business. Billing stops at the end of the current billing period.
curl -X DELETE "https://api.bizcomplianceapi.com/v1/monitor/mon_7b2e4f91a3c6" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"monitor_id": "mon_7b2e4f91a3c6",
"status": "deleted",
"deleted_at": "2026-04-03T15:44:02Z"
}
Error Codes
All API errors return a consistent JSON structure with a machine-readable code and a human-readable message.
{
"success": false,
"error": {
"code": "missing_parameter",
"message": "Required parameter 'business_type' is missing.",
"details": "See https://bizcomplianceapi.com/docs/#ep-requirements for required parameters."
}
}
| Status | Name | Description |
|---|---|---|
| 400 | Bad Request | A required parameter is missing or invalid. Check that business_type, city, and state are all present and correctly formatted. |
| 401 | Unauthorized | The Authorization header is missing, the Bearer token is malformed, or the API key has been revoked. Regenerate your key from the dashboard. |
| 403 | Forbidden - Plan Limit | Your API key is valid but your plan does not allow access to this endpoint or feature. Upgrade your plan to proceed. |
| 404 | Not Found | The requested city/state combination is not in our coverage database, or the specified monitor ID does not exist. Use /v1/locations to check supported locations. |
| 429 | Rate Limited | Your daily request limit has been exceeded. The X-RateLimit-Reset response header contains the UTC timestamp when your limit resets. Upgrade to increase limits. |
| 500 | Server Error | An unexpected error occurred on our end. These are rare and automatically reported. Retry the request with exponential backoff. If it persists, contact support. |
SDKs & Libraries
Official language SDKs are in development. In the meantime, the API is simple enough to use directly with any HTTP client. Below are SDK status and raw fetch/axios examples.
const res = await fetch(
'https://api.bizcomplianceapi.com/v1/requirements?business_type=restaurant&city=Austin&state=TX',
{
headers: {
'Authorization': `Bearer ${YOUR_API_KEY}`
}
}
);
if (!res.ok) {
const err = await res.json().catch(() => ({}));
throw new Error(err?.error?.message || `Request failed (${res.status})`);
}
const data = await res.json();
console.log(data.data.requirements);
import axios from 'axios';
const client = axios.create({
baseURL: 'https://api.bizcomplianceapi.com/v1',
headers: {
'Authorization': `Bearer ${YOUR_API_KEY}`
}
});
const { data } = await client.get('/requirements', {
params: {
business_type: 'restaurant',
city: 'Austin',
state: 'TX'
}
});
console.log(data.data.requirements);
import requests
response = requests.get(
"https://api.bizcomplianceapi.com/v1/requirements",
headers={"Authorization": f"Bearer {YOUR_API_KEY}"},
params={
"business_type": "restaurant",
"city": "Austin",
"state": "TX"
}
)
response.raise_for_status()
data = response.json()
print(data["data"]["requirements"])
Webhook Events
When a monitoring subscription is active, BizCompliance API sends HTTP POST requests to your webhook_url when key events occur. Your endpoint must return a 2xx status to acknowledge receipt - we retry up to 3 times with exponential backoff on failure.
X-BizCompliance-Signature header against a HMAC-SHA256 signature of the raw request body using your API key as the secret.
Fired when a monitored license or permit renewal is approaching. Triggered at each interval specified in lead_days (default: 90, 60, and 30 days before the renewal deadline).
Fired when a tracked requirement changes - such as a fee increase, new application form, updated issuing authority, or changed renewal schedule. Allows your platform to notify affected businesses proactively.
{
"event": "renewal_upcoming",
"monitor_id": "mon_7b2e4f91a3c6",
"business_id": "biz_8f3a9c12d4e7",
"days_until_renewal": 30,
"requirement": {
"id": "req_health_permit_sf_ca",
"name": "SF Health Department Permit",
"renewal_due": "2026-05-31",
"fee_estimate": 390,
"authority_url": "https://www.sfdph.org/dph/EH"
},
"sent_at": "2026-05-01T08:00:00Z"
}
{
"event": "requirement_changed",
"monitor_id": "mon_7b2e4f91a3c6",
"requirement_id": "req_health_permit_sf_ca",
"change_type": "fee_updated",
"changes": {
"fee_range": {
"previous": { "min": 258, "max": 695 },
"current": { "min": 285, "max": 740 }
}
},
"sent_at": "2026-04-03T12:00:00Z"
}