API reference

Base URL: https://commonelements.com/api/v1

Authentication

All API requests must include an Authorization header with a bearer token. Generate an API key from your account settings.

Authorization: Bearer ce_live_your_key_here

Keys are prefixed with ce_live_ for production and ce_test_ for sandbox environments. Never expose keys in client-side code or commit them to version control.

Rate limits

Limits are enforced per API key on a rolling monthly window. When you exceed your limit, requests return 429 Too Many Requests until the window resets.

TierRequests/monthMax requests/second
Free1002
Builder2,50010
Growth15,00030
EnterpriseUnlimitedCustom

Response headers include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset (Unix timestamp) on every response.

Monitoring your usage

Your API keys settings page is the self-serve way to see where you stand. Every key you hold shows its current usage as a running count, for example 742 / 10,000 requests this month, next to its tier and status. Check it before a scheduled job or bulk import to confirm you have room, rather than finding out from a 429.

A quota-exhausted request returns a 429 with this body:

{
  "ok": false,
  "error": "quota_exceeded",
  "message": "Monthly request quota exceeded."
}

Monthly quota resets at the start of the next calendar month; there is no partial reset and no automatic overage charge. If you are building an integration that calls the API on a schedule, check your usage on the API keys page before a large batch, and back off with an increasing delay after a 429 rather than retrying immediately in a tight loop.

Endpoints

POST/api/v1/compliance/scan

Submit a community association document for automated compliance analysis. Returns a structured assessment against Florida and multi-state statutory requirements, plus best-practice governance rules.

Request body

ParameterTypeDescription
text*stringThe full text of the governing document to analyze.
state*stringTwo-letter state code (e.g. "FL", "GA").
doc_typestringOptional. One of: "cc_rs", "bylaws", "rules_regs", "budget".

Example request

curl -X POST https://commonelements.com/api/v1/compliance/scan \
  -H "Authorization: Bearer ce_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Article I. Name. The name of this Association...",
    "state": "FL",
    "doc_type": "cc_rs"
  }'

Example response

{
  "scan_id": "scan_01JZB...",
  "health_score": 74,
  "rules_checked": 13,
  "rules_passed": 9,
  "rules_failed": 4,
  "findings": [
    {
      "rule_id": "FL_720_reserve_study",
      "status": "fail",
      "severity": "high",
      "summary": "No reserve study provision found in CC&Rs.",
      "citation": "F.S. 720.303(6)"
    }
  ],
  "created_at": "2026-06-14T12:00:00Z"
}

GET/api/v1/associations/lookup

Search for community associations by address, name, or registration number. Returns a list of matching records with basic contact and governance information.

Query parameters

ParameterTypeDescription
qstringFree-text name or address search.
statestringTwo-letter state filter, e.g. "FL".
registration_numberstringState registration or DBPR number.
limitnumberMax results to return (default 20, max 100).
offsetnumberPagination offset (default 0).

Example request

curl "https://commonelements.com/api/v1/associations/lookup?q=Pelican+Bay&state=FL" \
  -H "Authorization: Bearer ce_live_your_key_here"

Example response

{
  "total": 3,
  "results": [
    {
      "id": "org_01JZA...",
      "name": "Pelican Bay Community Association",
      "org_type": "association",
      "state": "FL",
      "county": "Collier",
      "registration_number": "HOA-FL-20041102",
      "verification_status": "verified",
      "unit_count": 742
    }
  ]
}

GET/api/v1/associations/{id}/risk

Retrieve flood zone, reserve-study health, and geographic risk signals for a specific association. Useful for underwriting, due diligence, and loan origination workflows.

Path parameters

ParameterTypeDescription
id*stringAssociation ID from the lookup endpoint.

Example request

curl "https://commonelements.com/api/v1/associations/org_01JZA.../risk" \
  -H "Authorization: Bearer ce_live_your_key_here"

Example response

{
  "association_id": "org_01JZA...",
  "flood_zone": "AE",
  "fema_firm_panel": "12021C0454H",
  "reserve_health": {
    "funded_percent": 62,
    "study_year": 2023,
    "next_study_due": 2028
  },
  "risk_signals": [
    { "type": "coastal_proximity", "value": "0.8mi", "severity": "medium" }
  ],
  "data_as_of": "2026-01-15"
}

Error codes

All errors follow a consistent JSON envelope with a machine-readable code and a human-readable message.

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Monthly request limit reached. Resets 2026-07-01T00:00:00Z.",
    "status": 429
  }
}
HTTP statusCodeDescription
400INVALID_REQUESTMissing or malformed request body or parameters.
401UNAUTHORIZEDMissing or invalid Authorization header.
403FORBIDDENValid key but insufficient tier for this endpoint.
404NOT_FOUNDThe requested resource does not exist.
422UNPROCESSABLERequest is valid but the document could not be processed.
429RATE_LIMIT_EXCEEDEDMonthly or per-second rate limit reached.
500INTERNAL_ERRORUnexpected server error. Retry with exponential backoff.
503SERVICE_UNAVAILABLETemporary outage. Check status.commonelements.com.

MCP integration

Common Elements exposes an MCP (Model Context Protocol) server that lets AI agents — including Claude — call the API directly as tools without writing HTTP client code.

{
  "mcpServers": {
    "common-elements": {
      "command": "npx",
      "args": ["-y", "@common-elements/mcp"],
      "env": {
        "CE_API_KEY": "ce_live_your_key_here"
      }
    }
  }
}

Once connected, your agent can call tools like compliance_scan and association_lookup conversationally, with structured responses automatically parsed. MCP server documentation and changelog live at commonelements.com/developers/mcp.

Command-line tool

The ce CLI wraps this API for terminal and scripting use. It reads your key from CE_API_KEY and shares the same scopes and quota as every other surface.

npm install -g @common-elements/cli
export CE_API_KEY=ce_live_your_key_here

ce associations search --state FL --query "sunset" --limit 5
ce statutes search "reserve study" --state FL
ce export associations --state FL --out fl-associations.csv

Full command and option reference lives at commonelements.com/developers/cli.

FAQ

What happens when I get a 429 response?
A 429 means either your monthly request quota is used up or you sent requests faster than the max requests/second for your tier. The body carries a JSON error envelope with "quota_exceeded" as the error code. For quota exhaustion, wait for the reset at the start of the next calendar month or upgrade your tier from your API keys settings; there is no automatic overage charge. For a per-second burst, back off and retry with an increasing delay (for example 1s, then 2s, then 4s) instead of retrying immediately.
How do API keys map to scopes?
Every key carries a list of scopes set when it is created, one per data domain: associations, compliance, risk, licenses, professionals, vendors, and statutes. A request is only authorized if the key carries the scope the endpoint requires; a key without the "vendors" scope gets a 403 from vendor endpoints even with a valid, unexpired key.
What does "read-only" vs "full-access" mean for a scope?
Every scope on a Developer API key is read and analysis access to the public dataset: no Developer API key can write to your account or to anyone else, regardless of scope. The "all" scope is full access, unlocking every endpoint across every domain. Narrower scopes like "associations" or "compliance" unlock only endpoints in that one domain, so a key you hand to a teammate or embed in a single-purpose integration can be scoped down to just what it needs.
Where can I see my usage?
Your API keys settings page shows live usage for every key you hold, as requests used against requests included for the current calendar month. It is the fastest way to check how close a key is to its limit before you hit a 429.

Ready to integrate?

Generate a free API key from your account settings and start building.

Get your API key