# Insurance Agency Change Log > A daily-differenced record of insurance-agency licensing, carrier appointments, and ownership, including terminations the source register does not publish. Texas is the live query set. This origin is discovery. The live query API is https://api.pexara.ai. Government registers publish a start date then delete the row. Terminations exist nowhere else. Answers are windows. Every historical row carries uncertainty_days. Never round a window to a date. Never round uncertainty_days. Observation started 2026-08-12. Missed 2026-08-17 and 2026-08-18. 2026-08-19 was a ~3-day catch-up. Live counts: GET https://api.pexara.ai/v1/coverage. Do not embed a source table. Identifiers: NPN (national producer number, stable across states), EIN (joins to Secretary of State filings), NAIC (carrier). Texas is the live query set. Florida appointments are suspect. GET /v1/control-changes currently omits uncertainty_days. That is a known honesty gap, not a missing field you should invent. Free on the live query API (https://api.pexara.ai), price 0: /v1/coverage, /v1/agency/{npn}, /v1/search, /v1/quote (price list, not checkout). Metered there (25 free calls per day, 50 free rows per day, page cap 25, then a 402 JSON quote): changes $0.004, terminations $0.010, attrition $0.020, at-risk $0.050, control-changes $0.020. A 402 is a quote, not a wall. Stripe is false. x402 settlement is false. accepts lists intended rails only (x402, api_key). GET /v1/quote returns the price list. It does not collect money. Collection is not live. Alternate 402 reason: row_allowance_exhausted. Header: X-Price-USD. 402 body (from metering.py): ```json { "error": "payment_required", "reason": "free_tier_exhausted", "detail": "The free allowance of 25 metered calls per day is used up. This endpoint reads accumulated snapshot history that is not published by the source at any price.", "quote": { "endpoint": "GET /v1/carrier/{naic_id}/attrition", "price": 0.02, "currency": "USD", "unit": "request", "accepts": [ "x402", "api_key" ], "pay_url": "/v1/quote" }, "free_alternatives": [ "GET /v1/agency/{npn}", "GET /v1/search", "GET /v1/coverage" ] } ``` This origin (pexara.ai) serves discovery files and a static coverage snapshot. It does not serve query routes. Hitting /v1/* here returns 404 JSON `not_on_this_host`. The live query API is https://api.pexara.ai. Do not stub fake agencies. ## Offer - [Statelog offer (JSON)](https://pexara.ai/intelligence/insurance/offer.json): prices, 402 quote shape, pay path (collection_live=false) - [Statelog offer (markdown)](https://pexara.ai/intelligence/insurance/offer.md): same facts as prose ## Live query API (https://api.pexara.ai) - [GET /v1/coverage](https://api.pexara.ai/v1/coverage): observation window, capture success, record counts. Free, LIVE - [GET /v1/agency/{npn}](https://api.pexara.ai/v1/agency/{npn}): current profile and active appointments. Free, LIVE - [GET /v1/search](https://api.pexara.ai/v1/search): by name, NPN, or EIN. Free, LIVE - [GET /v1/quote](https://api.pexara.ai/v1/quote): price list, not checkout. Free, LIVE - [GET /v1/agency/{npn}/changes](https://api.pexara.ai/v1/agency/{npn}/changes): observed change history. Metered $0.004 (25 free/day, 50 free rows/day, page cap 25, then 402 quote) - [GET /v1/terminations](https://api.pexara.ai/v1/terminations): appointments that ended. Metered $0.010 (25 free/day, 50 free rows/day, page cap 25, then 402 quote) - [GET /v1/carrier/{naic_id}/attrition](https://api.pexara.ai/v1/carrier/{naic_id}/attrition): agencies a carrier gained and lost. Metered $0.020 (25 free/day, 50 free rows/day, page cap 25, then 402 quote) - [GET /v1/signals/at-risk](https://api.pexara.ai/v1/signals/at-risk): appointment drain or vacant designated responsible licensed person. Metered $0.050 (25 free/day, 50 free rows/day, page cap 25, then 402 quote) - [GET /v1/control-changes](https://api.pexara.ai/v1/control-changes): ownership and officer changes. Metered $0.020 (25 free/day, 50 free rows/day, page cap 25, then 402 quote). Currently omits uncertainty_days ## On this host (discovery) - [Statelog offer (JSON)](https://pexara.ai/intelligence/insurance/offer.json): deployed_for_discovery. collection_live=false - [Statelog offer (markdown)](https://pexara.ai/intelligence/insurance/offer.md): same facts as prose - [Coverage snapshot](https://pexara.ai/intelligence/insurance/coverage.json): static, query_api_on_this_host=false. Live counts are GET https://api.pexara.ai/v1/coverage - [OpenAPI](https://pexara.ai/intelligence/insurance/openapi.yaml): marks on-this-host vs live-on-query-host - [Changelog](https://pexara.ai/intelligence/insurance/changelog.md): what is live vs not, capture start - [Full brief](https://pexara.ai/intelligence/insurance/llms-full.txt): this product only - [Human hub](https://pexara.ai/intelligence/insurance): market-structure pages, not the query API - [Brand index](https://pexara.ai/llms.txt): brand index --- # Insurance agency change-log — machine notes **Host:** https://pexara.ai is discovery. The live query API is https://api.pexara.ai. GET /v1/* on this host returns 404 not_on_this_host. **As of:** 2026-08-14 (America/New_York). Observation started 2026-08-12. Missed 2026-08-17 and 2026-08-18. 2026-08-19 was a ~3-day catch-up. Live counts: GET https://api.pexara.ai/v1/coverage. ## What this product is Government licensing registers publish a start date and then delete the row. There is no end date. When a carrier drops an agency, tomorrow's file simply omits the appointment, and the termination is recorded nowhere. This product captures daily snapshots and differences them so endings become dated, observable events. Current-state questions (who is licensed today, which carriers an agency currently represents) can be answered from the source directly. Historical questions — when a relationship ended, which carriers are bleeding agencies, which agencies are in distress, who changed hands — cannot be answered from any other public source. Answers are **windows**, not timestamps. Every historical row carries `uncertainty_days`. Do not present these as exact dates. Never round a window to a date. Never round uncertainty_days. Observation started 2026-08-12. Texas is the live set. The catalog is shaped for perishable registers generally (not Texas-only forever). Florida `agency_appointments` is suspect: ragged capture, terminations withheld. Identifiers: **NPN**, **EIN**, **NAIC**. ## What is live on pexara.ai (this host) - `GET /llms.txt` — brand index (last-mile + change-log) - `GET /intelligence/insurance/llms.txt` — nested machine index - `GET /intelligence/insurance/llms-full.txt` — concatenated brief for this product only - `GET /intelligence/insurance/offer.json` — Statelog machine offer (status deployed_for_discovery; collection_live=false) - `GET /intelligence/insurance/offer.md` — same offer as markdown - `GET /intelligence/insurance/openapi.yaml` — OpenAPI 3.1, with availability markers - `GET /intelligence/insurance/coverage.json` — static snapshot as of 2026-08-14 - `GET /intelligence/insurance/changelog.md` — this file - Human market hub at `/intelligence/insurance` (TX+FL structure pages). Unrelated to the query API. - `GET /v1/*` — **not** the query API. Returns 404 JSON `not_on_this_host` pointing at discovery and https://api.pexara.ai. This is demand capture. ## What is live on the query API (https://api.pexara.ai) These are LIVE at https://api.pexara.ai. They are not served on pexara.ai. | Endpoint | Host | Price | |---|---|---| | GET /v1/coverage | https://api.pexara.ai | free | | GET /v1/agency/{npn} | https://api.pexara.ai | free | | GET /v1/search | https://api.pexara.ai | free | | GET /v1/quote | https://api.pexara.ai | free (price list, not checkout) | | GET /v1/agency/{npn}/changes | https://api.pexara.ai | 25 free calls/day, 50 free rows/day, page cap 25, then 402 — $0.004 | | GET /v1/terminations | https://api.pexara.ai | 25 free calls/day, 50 free rows/day, page cap 25, then 402 — $0.010 | | GET /v1/carrier/{naic_id}/attrition | https://api.pexara.ai | 25 free calls/day, 50 free rows/day, page cap 25, then 402 — $0.020 | | GET /v1/signals/at-risk | https://api.pexara.ai | 25 free calls/day, 50 free rows/day, page cap 25, then 402 — $0.050 | | GET /v1/control-changes | https://api.pexara.ai | 25 free calls/day, 50 free rows/day, page cap 25, then 402 — $0.020 | Stripe is false. x402 settlement is false. GET /v1/quote returns the price list. It does not collect money. A 402 is a structured quote. GET /v1/control-changes currently omits `uncertainty_days`. ## Capture snapshot (2026-08-14) - First pull: 2026-08-12 - 20 sources in the enabled catalog - `tx.agency_appointments`: 619,867 rows ok, 696 DISAPPEAR, 1-day uncertainty window - `fl.agency_appointments`: suspect (ragged; terminations withheld) - Other catalog ids: listed in coverage.json with status only — no invented row counts ## Unusual fact The source publishes only what is true today. Terminations exist because we watched a row vanish between two observations. That is the whole product.