Partner API
CoverGuard API Reference
Build on top of CoverGuard. Property insurability, carrier availability signals, and team provisioning — REST + JSON over HTTPS, authenticated with a partner API key. Available to companies on a Team or Enterprise plan.
Predictable
Resource-oriented URLs, a stable { success, data } envelope.
Secure
Hashed API keys over TLS, per-key scopes, rate limits & quota.
Documented
A live OpenAPI 3.1 contract you can generate clients from.
Who can integrate
Access is gated on three independent axes — a call succeeds only when all three pass.
- • Paying. Keys can only be created on a Team or Enterprise plan, and every call re-checks that the account still has API access — a lapsed account is cut off automatically (
SUBSCRIPTION_INACTIVE). - • Approved. A key must be approved to integrate; a pending or suspended key is refused (
KEY_NOT_APPROVED). - • Scoped. Each endpoint requires a scope the key carries (
FORBIDDEN_SCOPEotherwise).
Quickstart
Get a key
On a Team or Enterprise plan, open Developer settings in-app and create an API key. The raw key (cg_live_…) is shown once — store it in your secrets manager. Send it as X-API-Key or Authorization: Bearer.
Your first request
curl https://api.coverguard.io/api/v1/me \
-H "X-API-Key: $CG_KEY"Response
{
"success": true,
"data": { "keyId": "…", "userId": "…", "scopes": ["insurability:read"] }
}Endpoints
Base URL https://api.coverguard.io. Full schemas in the OpenAPI document.
/api/v1/mescope: —Introspect the calling API key (id, owner, scopes). A credential health check.
/api/v1/properties/:id/insurabilityscope: insurability:readInsurability assessment derived from the property risk profile. Its score is a 0–100 difficulty: higher means harder to insure.
/api/v1/scorescope: insurability:read + properties:readAn insurability score by address, without looking up a property id first: a small, stable set of scoring fields plus a per-peril summary. The score is a 0–100 difficulty (higher means harder to insure), not the CoverGuard Score.
/api/v1/property-checksscope: properties:readSend an address, get back its risk and insurability. A new address is assessed in the background: subscribe to property.check_completed, or set wait: true in the request body.
/api/v1/propertiesscope: properties:readFind a property CoverGuard already knows, by ?address=.
/api/v1/clientsscope: clients:writeAdd a client to the key owner’s book.
/api/v1/clientsscope: clients:readFind a client by ?email= (case-insensitive), scoped to the key owner.
/api/v1/dealsscope: deals:writeOpen a pipeline deal.
/api/v1/deals/:idscope: deals:writeUpdate a deal’s stage, value or fallout.
/api/v1/quote-requestsscope: quotes:writeSend a quote request to CoverGuard’s brokerage team, which works with licensed insurance partners — never a promise of bindability, premium or coverage before a carrier confirms. The same request sent again within 2 minutes returns the original, with duplicate: true.
/api/v1/quote-requests/:id/statusscope: quotes:writeA carrier or broker integration reports a status update on a quote request your account owns. A status that cannot follow the current one is refused with 409 ILLEGAL_TRANSITION.
/api/v1/property-notesscope: clients:writeAttach a private note to a property.
/api/v1/team/membersscope: team:readPull the company’s members + seat usage (HRIS / CRM / IdP sync).
/api/v1/team/membersscope: team:writeProvision a seat — invite a user by email with a role.
/api/v1/team/members/:idscope: team:writeChange a member’s role.
/api/v1/team/members/:idscope: team:writeDeprovision a seat.
/api/v1/webhooksscope: webhooks:writeSubscribe an https URL to one or more events. Returns the subscription id and its signing secret, once.
/api/v1/webhooksscope: webhooks:writeList your subscriptions.
/api/v1/webhooks/:idscope: webhooks:writeUnsubscribe. Idempotent: 204 whether or not it existed.
/api/v1/webhooks/samplesscope: webhooks:writeRecent real payloads of one ?eventType= from your own account, for field mapping.
Webhooks
Register an HTTPS endpoint in Developer settings, or with POST /api/v1/webhooks, to receive signed events. Every delivery carries an X-CoverGuard-Signature: t=…,v1=… header — verify HMAC-SHA256(secret, "{t}.{body}") against the raw body and reject timestamps older than 5 minutes.
| Event | Fires when |
|---|---|
quote_request.created | A quote request was created. |
quote_request.updated | A quote request changed status. |
deal.updated | A pipeline deal changed. |
property.saved | A property was saved. |
carrier.exit | A carrier’s status for a saved property dropped from actively writing. |
client.renewal_due | A client’s policy is coming up for renewal (60, 30 and 7 days out). |
lead.captured | A shared snapshot turned a viewer into a prospect for the agent who shared it. |
subscription.payment_failed | A renewal payment failed (dunning started). |
subscription.payment_recovered | A previously-failed payment recovered. |
team.member.invited | A user was provisioned under the company. |
team.member.updated | A member’s role changed. |
team.member.removed | A user was deprovisioned. |
property.risk_changed | A watched property’s risk, carrier depth or modeled premium changed since the last check. |
property.check_completed | A property check you requested finished. |
client.created | A client was added to the book. |
book.renewal_due | A policy in an insurance book of business is approaching expiry. |
listing.status_changed | A watched property’s listing status changed (for sale, recently sold, off market, for rent). |
policy.bound | Reserved. CoverGuard does not bind coverage. |
Delivery payload
{
"id": "…", // delivery id
"type": "carrier.exit",
"created": 1751430000, // unix seconds
"data": { /* event-specific */ }
}Errors
Errors use the same envelope with a stable error.code and a human message. Rate-limit responses set RateLimit-* and Retry-After headers.
| Status / code | Meaning | Remediation |
|---|---|---|
401 MISSING_API_KEY | No key on the request. | Send X-API-Key or Authorization: Bearer cg_live_… |
401 INVALID_API_KEY | Unknown or revoked key. | Check the value; rotate if compromised. |
403 KEY_NOT_APPROVED | Key is pending approval or suspended. | Contact CoverGuard to enable the key. |
403 SUBSCRIPTION_INACTIVE | Account has no active plan with API access. | Renew, or move to a Team or Enterprise plan. |
403 FORBIDDEN_SCOPE | Key lacks the required scope. | Re-issue the key with the scope it needs. |
429 RATE_LIMITED | Per-minute limit exceeded. | Back off; honor the Retry-After header. |
429 QUOTA_EXCEEDED | Monthly quota used up. | Wait for the reset or raise the quota. |
Versioning
- • The API is versioned in the path (
/api/v1). Pin a version and upgrade deliberately. - • Additive changes (new fields, new endpoints) can ship within a version — ignore unknown fields.
- • Breaking changes get a new version path and a migration window.
Ready to integrate?
Create keys in-app on a Team or Enterprise plan, or talk to us about production partner access.
From the CoverGuard Record to a quote request — without the surprises
With carriers exiting major markets, insurance is killing deals at closing. CoverGuard reads the CoverGuard Record, models which carriers are likely to write the risk and what cover should cost, and sends your quote request to CoverGuard’s brokerage team — before anyone signs on the dotted line.
CoverGuard is in Private Preview. Ask for an invitation and a member of our team will review it — usually within one business day. Available in all 50 states.