Loading...
Loading...
The compliance data layer for vacation rental platforms
STR compliance data for property management platforms, marketplaces, and lenders. Market regulations, legislation tracking, enforcement events, tax obligations, and permit requirements for 1000+ US markets, delivered through a clean REST API.
3,000+ verified government sources. Updated continuously. Built so platforms can embed compliance intelligence without building it themselves.
Base URL
https://www.hostready.ai/api/v1
1000+
US Markets
3,000+
Gov Sources
110+
Fields Tracked
Compliance data is only useful if it's current. Here's how we keep it that way.
News Signals
Monitored 3x daily across local news, industry outlets, and government press releases.
Legislation
Tracked from city council agendas, municipal code updates, and state legislature filings.
Source Verification
3,000+ government URLs health-checked daily. Broken links flagged and re-verified automatically.
Market Rules
Continuously enriched and source-verified. Every data point traces back to a government URL.
Property Management Platforms
Integrate compliance checks into property onboarding. Show hosts their licensing requirements, tax obligations, and risk score before they list. Reduce support tickets from hosts blindsided by local regulations.
Real Estate Marketplaces
Display regulation data on STR investment listings. Help buyers understand enforcement risk, night caps, and permit requirements before they purchase.
Lenders and Insurers
Assess compliance risk during underwriting. Flag properties in high-enforcement markets or jurisdictions with STR bans before closing.
Channel Managers and Booking Engines
Embed tax rates and permit requirements into listing workflows. Auto-populate lodging tax fields and warn hosts about registration deadlines.
A typical PMS or marketplace integration takes a few hours of engineering time. Here's the pattern most platforms follow.
Pull market rules when a host adds a property
When a host enters their address, call /v1/compliance for a full property assessment or /v1/lookup for market-level rules. Display licensing requirements, tax obligations, and risk flags inline during onboarding.
curl "https://www.hostready.ai/api/v1/compliance?address=2005+Charlotte+St,+Austin,+TX+78703" \ -H "Authorization: Bearer hr_live_your_key"
Monitor for regulation changes
Poll /v1/changes on a daily cron or register a webhook to get pushed updates. Filter by the markets your hosts operate in.
curl "https://www.hostready.ai/api/v1/changes?since=2026-05-06&severity=high" \ -H "Authorization: Bearer hr_live_your_key"
Display compliance status in your dashboard
Use the compliance score, required permits, and tax data to build a compliance widget in your host dashboard. Show what's required, what's missing, and what the fines look like.
Alert hosts when rules change in their markets
When a webhook fires or the changes feed returns new items for a host's market, trigger an in-app notification or email. Your hosts stay compliant, your platform stays trusted.
Integration support included. Enterprise customers get a dedicated Slack channel and architecture review. We'll help your team scope the integration, review the implementation, and optimize caching. Schedule a call.
A real address against the live data, no key and no signup. This calls the same resolution path the paid endpoint calls, so what you see here is what you get.
Checking a whole portfolio instead? Paste your markets into the coverage checker and see exactly which ones we answer. Never billed, on any plan.
Get a free sandbox key, then make your first request:
Look up Austin, TX regulations
curl "https://www.hostready.ai/api/v1/lookup?city=Austin&state=TX" \ -H "Authorization: Bearer hr_live_your_key_here"
{
"ok": true,
"data": {
"city": "Austin",
"state": "TX",
"slug": "austin-tx",
"source_count": 8,
"rules": {
"license_required": true,
"primary_residence_required": false,
"enforcement_level": "high",
"permit_status": "accepting"
}
}
}That's it. Every endpoint follows the same pattern: pass your API key, get JSON back. Explore the full endpoint reference below.
All API requests require a valid API key passed in the Authorization header.
Request Header
Authorization: Bearer hr_live_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
{
"ok": true,
"data": {
"...": "..."
},
"meta": {
"tier": "pro",
"version": "v1"
}
}{
"ok": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing API key."
}
}Every response uses a consistent JSON envelope. Successful responses return ok: true with a data object. Errors return ok: false with an error object.
Success
{
"ok": true,
"data": {
"...": "endpoint-specific payload"
},
"meta": {
"tier": "pro",
"version": "v1"
}
}Error
{
"ok": false,
"error": {
"code": "NOT_FOUND",
"message": "Market not found."
}
}| Field | Type | Description |
|---|---|---|
| ok | boolean | Whether the request succeeded |
| data | object | Endpoint-specific payload (only on success) |
| meta | object | Request metadata: tier, version, pagination (when applicable) |
| error | object | Error code and message (only on failure) |
CORS
All API endpoints support CORS with Access-Control-Allow-Origin: *. You can call the API directly from browser-side JavaScript, though we recommend server-side calls to keep your API key private.
The fields the schema tracks, organized by category and tier. Click a category to expand. A given market carries the subset we can actually prove: measured 2026-09-08, the median active market holds 25 populated and 5 cited. We show you which.
citystringAllCity name
statestringAllState abbreviation
slugstringAllMarket slug identifier
license_requiredbooleanAllWhether an STR license is required
primary_residence_requiredbooleanAllWhether the property must be the host's primary residence
enforcement_levelstringAllOne of: low, medium, high
tax_requiredbooleanAllWhether STR-specific taxes apply
permit_statusstringAllaccepting / frozen / waitlist / moratorium
license_namestringPro+Official name of the license
license_feestringPro+Cost of the license
license_urlstringPro+Government URL for license info
tax_ratenumberPro+Combined tax rate percentage
state_tax_ratenumberPro+State tax rate
local_tax_ratenumberPro+Local/city tax rate
airbnb_collects_lodging_taxbooleanPro+Whether Airbnb collects and remits lodging tax automatically
vrbo_collects_lodging_taxbooleanPro+Whether Vrbo collects and remits lodging tax automatically
manual_tax_submission_requiredbooleanPro+Whether hosts must manually file and remit taxes
tax_registration_urlstringPro+URL for tax registration
tax_submission_urlstringPro+URL for tax submission/filing
tax_submission_frequencystringPro+monthly / quarterly / annually
fine_amount_minnumberPro+Minimum fine in dollars
fine_amount_maxnumberPro+Maximum fine in dollars
fine_daily_amountnumberPro+Per-day fine if applicable
enforcement_trendstringPro+stable / increasing / decreasing
max_guestsnumberPro+Maximum allowed overnight guests
max_nights_per_yearnumberPro+Annual cap on rental nights
min_stay_nightsnumberPro+Minimum required nights per booking
occupancy_formulastringPro+Formula used to calculate max occupancy
permit_capnumberPro+Maximum permits city issues
permit_transferablebooleanPro+Whether permits can be transferred between owners
permit_renewal_frequencystringPro+How often permits must be renewed
density_limitnumberPro+Properties per area
density_limit_distance_ftnumberPro+Minimum distance between STRs in feet
building_code_inspection_requiredbooleanPro+Whether a building code inspection is required
fire_suppression_requiredbooleanPro+Whether fire suppression systems are required
egress_window_requiredbooleanPro+Whether egress windows are required in bedrooms
smoke_detector_requirementsstringPro+Smoke detector placement and count requirements
co_detector_requirementsstringPro+Carbon monoxide detector requirements
fire_extinguisher_requiredbooleanPro+Whether fire extinguishers are required
insurance_requiredbooleanPro+Whether liability insurance is required
insurance_min_amountnumberPro+Minimum liability coverage
parking_requiredbooleanPro+Whether off-street parking is required
parking_notesstringPro+Specifics on parking requirements
noise_restrictionsstringPro+Quiet hours and noise rules
trash_regulationsstringPro+Trash collection and disposal rules
posting_requirementsstringPro+Required postings inside the property
signage_requiredbooleanPro+Whether exterior signage with permit info is required
floor_plan_requiredbooleanPro+Whether a floor plan must be submitted
local_contact_requiredbooleanPro+Whether a local contact/agent is required
local_contact_response_minutesnumberPro+Required local contact response time
neighbor_notification_requiredbooleanPro+Whether neighbors must be notified
neighbor_notification_radius_ftnumberPro+Radius of notification requirement in feet
ordinance_urlstringPro+URL to the STR ordinance
building_code_urlstringPro+URL to the building code
fire_code_urlstringPro+URL to the fire code
council_agenda_urlstringPro+URL to city council agendas
source_verifiedbooleanPro+Confirmed against government source
confidencenumberPro+0-100 confidence score
updated_atstringPro+ISO timestamp
You pay per answer, not per request. If we cannot prove the rules for a jurisdiction, the call still returns what we hold, puts that market into our research queue, and is not billed. Start free, upgrade when you go to production.
Paid plans are never hard-stopped. Past your included allowance we keep serving and meter the overage, because an integration your customers depend on should not stop working mid-month. To protect you from a runaway loop, every account has a monthly spend cap you control, defaulting to three months of your plan. Raise it, lower it, or remove it. We alert you at 80% and 100% before it ever bites, and GET /v1/usage shows your metered spend at any time. The sandbox is the one tier with a genuine hard stop, because it is a free evaluation.
Sandbox
Free
50 answers/month
Launch
$299/mo
1,000 answers/month
Growth
$999/mo
5,000 answers/month
Scale
$2,499/mo
20,000 answers/month
Enterprise
Negotiated volume, SLA, redistribution terms, and an embedded lookup widget for your own site. From $50,000/year.
Annual billing is 10 months. Check coverage against your own portfolio before you buy with POST /v1/coverage, free on every plan.
Full reference for every endpoint. Each includes parameters, a copy-pasteable curl example, and a sample response.
| Method | Path | Tier | What it does |
|---|---|---|---|
| POST | /v1/coverage | All | Check coverage for your own portfolio - never billed |
| GET | /v1/markets | All | List every monitored US market |
| GET | /v1/markets/{slug} | All | Full compliance rules for one market |
| GET | /v1/markets/{slug}/sources | Pro+ | Government sources backing the data |
| GET | /v1/markets/{slug}/legislation | Pro+ | Council agendas, ordinances, bills |
| GET | /v1/markets/{slug}/news | Pro+ | Regulatory news + enforcement coverage |
| GET | /v1/markets/{slug}/enforcement | Pro+ | Fines, crackdowns, violation events |
| GET | /v1/compliance | Pro+ | Full property-level assessment by address |
| POST | /v1/compliance/bulk | Pro+ | Batch up to 25 addresses in one call |
| GET | /v1/certificate | Pro+ | Structured compliance certificate for sharing |
| GET | /v1/lookup | All | Market lookup by city/state - lighter than /compliance |
| GET | /v1/tax/{slug} | Pro+ | Lodging tax rates + filing requirements |
| GET | /v1/changes | Pro+ | News and pre-publication signals for tracked markets |
| GET | /v1/changes/facts | Pro+ | Rule changes: old value, new value, citation - never billed |
| GET | /v1/markets/{slug}/permits | All | Live STR permit registry counts |
| GET | /v1/states/{state} | All | State preemption + aggregate permit data |
| GET | /v1/dashboard | All | Usage stats for your API key |
| GET | /v1/health | All | Public health check, no auth required |
| POST | /v1/webhooks | Enterprise | Subscribe to push notifications |
| GET | /v1/usage | All | Check your rate limits + monthly usage |
/v1/coverageAll tiersCheck which of YOUR markets we can answer for, before you pay us anything. Submit up to 500 city/state pairs and get back, for each, whether a lookup would produce a billable answer. Never billed, on any plan including sandbox. An unknown city comes back with tracked: false rather than being dropped, so you can line the response up against your own list by index. Conservative by design: coverage is computed from each market's own record, so a market shown as not answerable may still answer through its county or state layer. GET /v1/coverage returns the same picture in aggregate, with a per-state breakdown.
Parameters
| markets* | array | Up to 500 objects, each with a city and state |
Example Request
curl -X POST "https://www.hostready.ai/api/v1/coverage" \
-H "Authorization: Bearer hr_live_your_key" \
-H "Content-Type: application/json" \
-d '{"markets":[{"city":"Austin","state":"TX"},{"city":"Bend","state":"OR"}]}'Response
{
"ok": true,
"data": {
"requested": 2,
"answerable": 1,
"answerable_share": 0.5,
"markets": [
{
"city": "Austin",
"state": "TX",
"slug": "austin-tx",
"tracked": true,
"answerable": true,
"cited_fact_count": 11,
"core_fact_count": 3
},
{
"city": "Bend",
"state": "OR",
"slug": "bend-or",
"tracked": true,
"answerable": false,
"cited_fact_count": 2,
"core_fact_count": 1
}
]
}
}/v1/marketsAll tiersList all monitored STR markets.
Parameters
| page | integer | Page number (default: 1) |
| limit | integer | Results per page (max varies by tier) |
| state | string | Filter by state abbreviation (e.g., TX, CA) |
Example Request
curl "https://www.hostready.ai/api/v1/markets?state=TX&limit=5" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"markets": [
{
"slug": "austin-tx",
"city": "Austin",
"state": "TX",
"is_active": true
},
{
"slug": "denver-co",
"city": "Denver",
"state": "CO",
"is_active": true
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 536,
"pages": 22
}
}
}/v1/markets/{slug}All tiersGet full compliance rules for a specific market. Fields returned depend on your tier.
Parameters
| slug* | string | Market slug (e.g., austin-tx, denver-co) |
Example Request
curl "https://www.hostready.ai/api/v1/markets/austin-tx" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"market": {
"slug": "austin-tx",
"city": "Austin",
"state": "TX",
"source_count": 13,
"rules": {
"license_required": true,
"license_name": "Short-Term Rental License",
"license_fee": "$900",
"tax_rate": "17.000",
"enforcement_level": "high",
"fine_amount_min": 500,
"fine_amount_max": 2000,
"max_nights_per_year": 90,
"insurance_required": false,
"permit_status": "accepting",
"source_verified": true,
"confidence": 100
}
}
}
}/v1/markets/{slug}/sourcesEnterpriseSource URL provenance is available under an enterprise data agreement. Contact sales@hostready.ai. Standard Pro tier returns 403 ENTERPRISE_ONLY; verbatim source quotes for compliance facts remain available via /v1/certificate.
Parameters
| slug* | string | Market slug |
Example Request
curl "https://www.hostready.ai/api/v1/markets/austin-tx/sources" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": false,
"error": {
"code": "ENTERPRISE_ONLY",
"message": "Source URL provenance is available under an enterprise data agreement. Contact sales@hostready.ai."
}
}/v1/markets/{slug}/legislationPro+Get legislation and regulatory signals from city council systems and state legislatures.
Parameters
| slug* | string | Market slug |
Example Request
curl "https://www.hostready.ai/api/v1/markets/phoenix-az/legislation" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"legislation": [
{
"title": "26-0344: Public Hearing - Amend Phoenix City Code - Short-Term Vacation Rental",
"summary": "Ordinance-G - Adopted. Introduced 2/6/2026.",
"severity": "high",
"status": "passed",
"meeting_date": "2026-03-04"
}
],
"count": 1
}
}/v1/markets/{slug}/newsPro+Get regulatory news signals and enforcement coverage for a market.
Parameters
| slug* | string | Market slug |
Example Request
curl "https://www.hostready.ai/api/v1/markets/phoenix-az/news" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"news": [
{
"title": "Phoenix STR Regulations Tightened",
"summary": "New rules include mandatory background checks...",
"severity": "high",
"signal_type": "enforcement"
}
],
"count": 4
}
}/v1/markets/{slug}/enforcementPro+Get enforcement actions and violation events for a market.
Parameters
| slug* | string | Market slug |
Example Request
curl "https://www.hostready.ai/api/v1/markets/austin-tx/enforcement" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"enforcement": [
{
"title": "Unlicensed STR fined $2,000",
"severity": "high",
"event_type": "fine",
"fine_amount": 2000,
"event_date": "2026-02-15"
}
],
"count": 3
}
}Which compliance endpoint should I use?
/v1/complianceSingle address. Use during property onboarding to show a host their requirements, risk flags, and score in real time.
/v1/compliance/bulkUp to 25 addresses. Use for portfolio audits or migrating an existing host's properties in one shot.
/v1/certificateStructured certificate. Same data, formatted for embedding compliance badges or sharing with guests/authorities.
/v1/compliancePro+Full property-level compliance assessment. Pass any US or Canadian address and get back parcel data, zoning, compliance score, risk flags, requirements, tax obligations, enforcement posture, and permit status. The most comprehensive endpoint in the API.
Parameters
| address* | string | Full street address (e.g. 2005 Charlotte St, Austin, TX 78703) |
Example Request
curl "https://www.hostready.ai/api/v1/compliance?address=2005+Charlotte+St,+Austin,+TX+78703" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"address": "2005 Charlotte St, Austin, TX 78703",
"location": {
"city": "Austin",
"state": "TX",
"country": "USA",
"zip": "78703",
"market_slug": "austin-tx"
},
"property": {
"zoning_compatible": true,
"land_use_category": "single_family"
},
"compliance": {
"score": 53,
"risk_level": "medium",
"risk_flags": [
{
"label": "90-Night Cap",
"severity": "medium"
},
{
"label": "High Enforcement",
"severity": "high"
}
]
},
"requirements": [
{
"requirement": "STR License",
"status": "required",
"details": "STR operating license required. Fee: $900"
},
{
"requirement": "Night Cap",
"status": "limited",
"details": "Maximum 90 nights per year for whole-home rentals"
},
{
"requirement": "Local Contact",
"status": "required",
"details": "Must respond within 120 minutes"
}
],
"tax": {
"combined_rate": 17,
"state_rate": 6,
"local_rate": 11,
"airbnb_collects": true,
"vrbo_collects": true
},
"enforcement": {
"level": "high",
"trend": "increasing",
"fine_range": {
"min": 500,
"max": 2000
}
},
"permits": {
"status": "accepting",
"cap": null,
"waitlist": false
},
"source_count": 6
}
}/v1/compliance/bulkPro+Batch property compliance assessment. Submit up to 25 addresses in one request and get compliance data for each. Pro tier supports 10 addresses per request, Enterprise supports 25.
Parameters
| addresses* | string[] | Array of full street addresses (JSON body) |
Example Request
curl -X POST "https://www.hostready.ai/api/v1/compliance/bulk" \
-H "Authorization: Bearer hr_live_your_key" \
-H "Content-Type: application/json" \
-d '{"addresses": ["2005 Charlotte St, Austin, TX 78703", "1901 Main St, Denver, CO 80211"]}'Response
{
"ok": true,
"data": {
"total": 2,
"succeeded": 2,
"failed": 0,
"results": [
{
"address": "2005 Charlotte St, Austin, TX 78703",
"status": "ok",
"compliance": {
"score": 64,
"risk_level": "medium",
"risk_flags": []
},
"requirements": [
{
"requirement": "STR License",
"status": "required"
}
],
"enforcement": {
"level": "high",
"fine_max": 5000
}
},
{
"address": "1901 Main St, Denver, CO 80211",
"status": "ok",
"compliance": {
"score": 56,
"risk_level": "medium",
"risk_flags": [
{
"label": "Primary Residence Required",
"severity": "high"
}
]
},
"requirements": [
{
"requirement": "STR License",
"status": "required"
},
{
"requirement": "Primary Residence",
"status": "required"
}
],
"enforcement": {
"level": "medium",
"fine_max": 999
}
}
]
}
}/v1/certificatePro+Generate a structured compliance certificate for any US address. Returns compliance score, status, all requirements, tax obligations, enforcement posture, permit status, and data quality indicators. Designed for embedding compliance badges in platform dashboards or sharing with guests and authorities.
Parameters
| address* | string | Full street address (e.g. 2005 Charlotte St, Austin, TX 78703) |
Example Request
curl "https://www.hostready.ai/api/v1/certificate?address=2005+Charlotte+St,+Austin,+TX+78703" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"address": "2005 Charlotte St, Austin, TX 78703",
"location": {
"city": "Austin",
"state": "TX",
"country": "USA",
"zip": "78703",
"market_slug": "austin-tx"
},
"compliance": {
"score": 53,
"risk_level": "medium",
"status": "at_risk",
"risk_flags": [
{
"label": "90-Night Cap",
"severity": "medium"
},
{
"label": "High Enforcement",
"severity": "high"
}
]
},
"property": {
"zoning": "SF-3",
"land_use": "Single Family Residential",
"zoning_compatible": true
},
"requirements": [
{
"requirement": "STR License/Permit",
"status": "required",
"details": "Short-term rental license required. Fee: $900"
},
{
"requirement": "Night Cap",
"status": "limited",
"details": "Maximum 90 nights per year"
},
{
"requirement": "Local Contact",
"status": "required",
"details": "Must respond within 120 minutes"
}
],
"requirements_summary": {
"total": 3,
"action_needed": 3
},
"tax": {
"combined_rate": 17,
"state_rate": 6,
"local_rate": 11,
"airbnb_collects": true,
"vrbo_collects": true,
"filing_frequency": "quarterly"
},
"enforcement": {
"level": "high",
"trend": "increasing",
"fine_range": {
"min": 500,
"max": 2000
}
},
"permits": {
"status": "accepting",
"cap": null,
"waitlist": false,
"transferable": null,
"renewal_frequency": "annual"
},
"data_quality": {
"source_count": 8,
"source_verified": true,
"confidence": 92,
"last_updated": "2026-05-12T08:00:00Z"
},
"certificate_url": "https://www.hostready.ai/preview/austin-tx",
"generated_at": "2026-05-13T20:00:00Z"
}
}/v1/lookupAll tiersLook up compliance data by city and state. Lighter than the full property compliance endpoint. Ideal for market-level checks during onboarding or search.
Parameters
| city* | string | City name (e.g., Austin) |
| state* | string | State abbreviation (e.g., TX) |
Example Request
curl "https://www.hostready.ai/api/v1/lookup?city=Austin&state=TX" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"city": "Austin",
"state": "TX",
"slug": "austin-tx",
"source_count": 13,
"rules": {
"license_required": true,
"enforcement_level": "high"
}
}
}/v1/tax/{slug}Pro+Get detailed tax obligations for a market. Includes state and local rates, platform collection status, and filing requirements.
Parameters
| slug* | string | Market slug |
Example Request
curl "https://www.hostready.ai/api/v1/tax/austin-tx" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"city": "Austin",
"state": "TX",
"tax": {
"tax_required": true,
"tax_rate": "17.000",
"state_tax_rate": "6",
"local_tax_rate": "11",
"airbnb_collects_lodging_tax": true,
"vrbo_collects_lodging_tax": false
}
}
}/v1/changes/factsPro+What actually changed in the rules, with the old value, the new value and the citation behind it. Every entry is labelled: a REGULATORY change means the source document itself was updated and our reading moved with it; a CORRECTION means the document is unchanged and we read it better. They are different events and they deserve different responses - push a regulatory change to your hosts, absorb a correction quietly. An entry flagged unstable is one where the value returned to an earlier reading, which we surface rather than hide. Filter with type=regulatory or type=correction, scope with market=<slug>, and page with since and limit. NEVER BILLED: we bill per answer about an address, and this is what the subscription is for.
Parameters
| since | ISO date | Only changes after this moment. Defaults to 30 days ago. |
| type | string | regulatory or correction. Omit for both. |
| market | slug | Scope to one market, e.g. telluride-co. |
| limit | number | Up to 500. Defaults to 100. |
Example Request
curl "https://www.hostready.ai/api/v1/changes/facts?since=2026-08-01&type=regulatory" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"since": "2026-08-01T00:00:00.000Z",
"total": 11,
"returned": 11,
"regulatory": 11,
"corrections": 0,
"changes": [
{
"market": "Telluride, CO",
"market_slug": "telluride-co",
"field": "tax_rate",
"previous_value": "10.75",
"new_value": "17.22",
"change_type": "regulatory",
"reason": "source_document_changed",
"unstable": false,
"source_url": "https://www.telluride-co.gov/...",
"source_quote": "...",
"changed_at": "2026-09-04T11:22:03.000Z",
"summary": "tax rate changed from 10.75 to 17.22 after the source document was updated"
}
]
}
}/v1/changesPro+Unified feed of regulation changes across all monitored markets. Merges news signals, legislation updates, enforcement actions, and platform policy changes into a single chronological feed. Filter by market, severity, change type, or time window.
Parameters
| since | string | ISO timestamp. Only return changes after this date (default: 7 days ago) |
| market | string | Filter to a specific market slug (e.g., miami-fl) |
| type | string | Filter by change type: news, legislation, enforcement, platform |
| severity | string | Filter by severity level (e.g., high, medium, low) |
| limit | integer | Max results (default: 50, Pro max: 100, Enterprise max: 200) |
Example Request
curl "https://www.hostready.ai/api/v1/changes?since=2026-05-06&severity=high&limit=10" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"changes": [
{
"type": "enforcement",
"title": "Miami Beach fines 12 unlicensed STRs in crackdown",
"summary": "The city issued $5,000 fines to 12 properties operating without required resort tax certificates...",
"severity": "high",
"market_slug": "miami-beach-fl",
"date": "2026-05-10",
"created_at": "2026-05-10T14:22:00Z",
"metadata": {
"event_type": "fine",
"fine_amount": 5000
}
},
{
"type": "legislation",
"title": "Denver City Council: Amend Chapter 33 - Short-Term Rental Density Limits",
"summary": "Proposed amendment to add 500ft density buffer between STR licenses in residential zones.",
"severity": "high",
"market_slug": "denver-co",
"date": "2026-05-08",
"created_at": "2026-05-09T06:15:00Z",
"metadata": {
"status": "proposed",
"signal_type": "council_agenda"
}
}
],
"count": 2,
"since": "2026-05-06T00:00:00.000Z",
"latest_change": "2026-05-10T14:22:00Z",
"filters": {
"market": null,
"severity": null,
"type": null
}
}
}/v1/markets/{slug}/permitsAll tiersLive STR permit registry data for a market — active / expired / pending counts plus property-type breakdown. Sourced directly from city open data portals and refreshed daily. Returns available:false when we don't yet have permit data for the market.
Parameters
| slug* | string | Market slug |
Example Request
curl "https://www.hostready.ai/api/v1/markets/boston-ma/permits" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"city": "Boston",
"state": "MA",
"available": true,
"permits": {
"total": 945,
"active": 945,
"expired": 0,
"pending": 0,
"revoked": 0
},
"property_types": {
"home_share_eligible": 48115,
"owner_adjacent_eligible": 23611
},
"status_breakdown": null,
"avg_bedrooms": null,
"data_source": {
"url": "https://data.boston.gov/dataset/short-term-rental-eligibility",
"type": "boston_csv",
"last_fetched": "2026-05-22T21:19:28.698Z"
}
}
}/v1/states/{state}All tiersState-level STR preemption laws + aggregate permit data. Tells operators whether state law overrides local STR bans, what authority cities retain, and how many active permits we track across the state. Useful for due diligence at the state-portfolio level.
Parameters
| state* | string | 2-letter state abbreviation (e.g., TX) |
Example Request
curl "https://www.hostready.ai/api/v1/states/TX" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"state": "TX",
"state_name": "Texas",
"preemption": {
"level": "partial",
"summary": "Cities retain STR licensing authority but cannot ban outright.",
"key_law": null,
"year_enacted": null,
"source_url": null
},
"city_authority": {
"can_ban": false,
"can_cap_permits": true,
"can_require_license": true,
"can_restrict_frequency": true
},
"tax": {
"state_lodging_tax_rate": 6,
"components": null,
"has_state_sales_tax": true,
"notes": null
},
"permits": {
"total_permits_tracked": 5000,
"active_permits_tracked": 4200,
"cities_with_live_data": 3
},
"market_count": 47
}
}/v1/dashboardAll tiersUsage stats for your API key — requests this month, top endpoints, error rate. Use to monitor your own consumption and stay ahead of rate limits.
Example Request
curl "https://www.hostready.ai/api/v1/dashboard" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"tier": "pro",
"requests_this_month": 1842,
"top_endpoints": [
{
"path": "/v1/compliance",
"count": 1200
},
{
"path": "/v1/markets/austin-tx",
"count": 320
}
]
}
}/v1/healthAll tiersPublic health check endpoint. No authentication required. Use this to verify the API is online and monitor uptime.
Example Request
curl "https://www.hostready.ai/api/v1/health"
Response
{
"ok": true,
"data": {
"status": "healthy",
"active_markets": 592,
"api_version": "v1",
"timestamp": "2026-05-13T18:30:00.000Z"
}
}Receive real-time notifications when regulations change. Register a webhook URL and HostReady will POST updates to your endpoint whenever new signals are detected in your subscribed markets. Payloads are HMAC-signed so you can verify authenticity.
/v1/webhooksRegister a webhookcurl -X POST "https://www.hostready.ai/api/v1/webhooks" \
-H "Authorization: Bearer hr_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.yourapp.com/webhooks/hostready",
"events": ["news", "enforcement", "legislation"],
"markets": ["miami-fl", "denver-co"],
"description": "Production compliance feed"
}'Event Types
| news | Regulatory news and coverage |
| legislation | City council agendas, proposed ordinances, state bills |
| enforcement | Fines, crackdowns, enforcement actions |
| platform | Airbnb/Vrbo policy changes affecting hosts |
| * | Subscribe to all event types |
/v1/webhooksList your subscriptions/v1/webhooks/{id}Subscription detail + delivery log/v1/webhooks/{id}Remove a subscription/v1/webhooks/testSend a test ping to verify your URLWebhook Payload
{
"event_type": "changes",
"timestamp": "2026-05-13T20:05:00Z",
"data": {
"count": 1,
"changes": [
{
"type": "enforcement",
"title": "Miami Beach fines 12 unlicensed STRs",
"summary": "The city issued $5,000 fines to 12 properties...",
"severity": "high",
"market_slug": "miami-beach-fl",
"date": "2026-05-13"
}
]
}
}Signature Verification
Every webhook includes an X-HostReady-Signature header for HMAC-SHA256 verification. Use the signing secret returned when you registered the webhook.
X-HostReady-Signature: t=1715630700,v1=a3f2b1c4d5e6...
/v1/usageAll tiersCheck your API key usage and limits.
Example Request
curl "https://www.hostready.ai/api/v1/usage" \ -H "Authorization: Bearer hr_live_your_key"
Response
{
"ok": true,
"data": {
"tier": "pro",
"usage": {
"today": 142,
"this_month": 3847,
"monthly_limit": 5000
},
"rate_limits": {
"per_minute": 30,
"per_day": 5000
}
}
}Rate limits are enforced per API key. Every response includes rate limit headers.
| Header | Description |
|---|---|
| X-RateLimit-Limit | Requests allowed per minute |
| X-RateLimit-Remaining | Requests remaining this window |
| X-RateLimit-Reset | Unix timestamp when the window resets |
| Code | Status | Description |
|---|---|---|
| UNAUTHORIZED | 401 | Invalid or missing API key |
| TIER_INSUFFICIENT | 403 | Endpoint requires a higher tier |
| NOT_FOUND | 404 | Market or resource not found |
| RATE_LIMIT_EXCEEDED | 429 | Too many requests |
| VALIDATION_ERROR | 400 | Missing or invalid parameters |
| API_DISABLED | 503 | API is not yet available |
| INTERNAL_ERROR | 500 | Server error |
Plug HostReady directly into Claude, ChatGPT, Cursor, and other AI assistants via the Model Context Protocol. Ask compliance questions in plain English and get answers from the API automatically.
Tools
hostready_lookupLook up compliance data by city and statehostready_get_marketGet the full cited rule set for a market, with the source behind each facthostready_list_marketsList all US markets we trackhostready_get_sourcesGet verified government sources for a markethostready_get_legislationGet recent STR legislation and billshostready_get_newsGet regulatory news and enforcement coveragehostready_get_enforcementGet enforcement actions and violation eventshostready_get_taxGet tax rates, filing requirements, platform collectionhostready_get_changesGet unified feed of recent regulatory changesInstall
npm install -g @hostready/mcp-serverConfigure
{
"mcpServers": {
"hostready": {
"command": "hostready-mcp",
"env": { "HOSTREADY_API_KEY": "hr_sandbox_..." }
}
}
}Every answer the assistant gets back carries the government page the fact was read from, which is the part that matters when an agent is going to act on it. Works with any MCP client. A free sandbox key is enough to try it.
A compliance lookup you can drop onto your own site. A visitor types an address and gets the rules that bind that jurisdiction, with the government source behind every fact. Two lines of HTML, no build step, no iframe.
<script src="https://www.hostready.ai/embed/v1.js"
data-hostready-key="hr_pk_your_publishable_key"></script>
<div id="hostready-lookup"></div>Publishable keys, not secret keys
The widget runs in your page, so anyone can read its key. A hr_pk_ key is built for that: it only works from the domains you register, and it is useless anywhere else. Never put an hr_live_ secret key in a browser.
Styling and isolation
The widget renders inside a shadow root, so your CSS cannot leak in and ours cannot leak out. It inherits nothing and breaks nothing. Mount it somewhere else with data-hostready-mount="your-id".
Publishable keys are issued per partner and locked to the domains you name. Send us the list, including any staging domains, and we will send back a key. A wildcard like *.yourdomain.com covers every subdomain.
Widget lookups are billed like any other answer, and a lookup we cannot answer costs nothing. Check your coverage first if you want to know what to expect before you launch.
Try the API instantly. Sandbox keys are free with 50 requests per month -no billing required.
HostReady API v1 · Usage Dashboard · Contact Support