> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agenticinsuranceprotocol.org/llms.txt
> Use this file to discover all available pages before exploring further.

# AIP registry

> The AIP registry: how an AI agent finds the sellers of a country, checks a licence in the public registers, and loads the rules of a country.

This is draft 0.1 of the registry. A later draft can break it until 1.0. The registry server defines its types and its tools in [`registry/src/schema.ts`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/registry/src/schema.ts), and the [schema reference](https://docs.agenticinsuranceprotocol.org/0.1/reference.md#r1-common-types) shows them from section R1. This page gives the rules. The tools of each seller are in the [specification](https://docs.agenticinsuranceprotocol.org/0.1/spec.md).

## 1. Overview

A buying agent calls the registry before it sends anything to a seller. The registry answers three questions, and it needs no customer data to answer them:

* **Who sells here?** `search_distributors` returns the sellers that speak AIP in a country, for a line.
* **Can this seller sell here?** `verify_licence` checks a seller, or the insurer behind an offer, in the public registers. It works for a seller that the registry does not list.
* **Which rules apply here?** `get_country_rules` returns the rules of a country for the AIP skill.

Each seller runs its own MCP server with the tools of the specification. The registry is the global search, and the server of each seller is the one-to-one. The registry does not price, it does not check the underwriting scope of a product, and it does not copy what a server publishes. Those stay on the seller's server.

### 1.1 Roles

* **Operator.** The organisation that runs the registry. It follows the rules on this page, and section 1.2 says who it is.
* **Agent.** The AI agent that acts for the customer. It calls the registry, then the seller.
* **Seller.** A distributor: the company that runs an MCP server with the AIP tools and sells the product.
* **Provider.** The insurer that carries the risk. It can be the seller itself.
* **Register.** A public list of licensed insurers or intermediaries, kept by a regulator or for one. The registry reads it and never replaces it.

### 1.2 Who runs the registry

A regulator decides who holds a licence, and the operator reads that decision in the public register. The operator adds no judgement of its own. Each seller goes through the same steps, and each answer names the register entry it rests on. This keeps the operator independent of the sellers.

The operator changes in three stages:

1. **Draft 0.1.** The AIP maintainers run a test registry, with fictional register entries. They take the requests to be listed, and answer them.
2. **An independent body.** A body with a public charter runs the registry. Insurers, distributors, makers of AI agents and consumer groups can be members, and regulators can be members or observers. No member decides a listing, because the rules on this page decide.
3. **The regulators.** Each regulator can take over its country. It opens its register through an API, owns the rules file of its country in the skill, and can run the part of the registry for its country.

The rules files of the skill take the same path, from the AIP maintainers to the regulator of each country.

## 2. Conventions

The [conventions of the specification](https://docs.agenticinsuranceprotocol.org/0.1/spec.md#2-conventions) apply. A subdivision is an ISO 3166-2 code, such as `US-TX`. A domain is a lower-case host name with no scheme and no path, such as `pets.example.com`.

### 2.1 Network reads

Anyone can give the registry an address: a seller that asks to be listed, or an AI agent that gives a domain to `verify_licence`. Each read that the registry makes of an address of a seller, its `aip.json` and the `mcp_url` that it gives included, follows these rules:

* The registry MUST read only HTTPS on port 443, on a host whose addresses are all public. It MUST check the addresses on each connection, so that a DNS answer that changes after a check cannot send it to a private network.
* It MUST NOT follow a redirect to another host, and it MUST limit the time and the size of each read.
* It MUST NOT put the body of a response or the text of a network error in a result, or in an answer to a seller.

## 3. Discovery

The AIP skill gives the address of the registry. The registry declares its extension under `capabilities.extensions["org.agenticinsuranceprotocol/registry"]` in its MCP `server/discover` response. The value is a [`RegistrySettings`](https://docs.agenticinsuranceprotocol.org/0.1/reference#registrysettings) object: the version, the countries where the registry checks licences, the countries that have rules, every register it reads, and the page where the operator publishes its method.

The registry SHOULD also serve the AIP skill through the [MCP Skills extension](https://modelcontextprotocol.io/extensions/skills/overview). An agent whose host loads skills over MCP then gets the whole skill from the registry. `get_country_rules` serves the same country files to every other agent.

## 4. Tools

| Tool | Params → result |
| - | - |
| `search_distributors` | [`SearchDistributorsParams`](https://docs.agenticinsuranceprotocol.org/0.1/reference#searchdistributorsparams) → [`SearchDistributorsResult`](https://docs.agenticinsuranceprotocol.org/0.1/reference#searchdistributorsresult) |
| `verify_licence` | [`VerifyLicenceParams`](https://docs.agenticinsuranceprotocol.org/0.1/reference#verifylicenceparams) → [`VerifyLicenceResult`](https://docs.agenticinsuranceprotocol.org/0.1/reference#verifylicenceresult) |
| `get_country_rules` | [`GetCountryRulesParams`](https://docs.agenticinsuranceprotocol.org/0.1/reference#getcountryrulesparams) → [`GetCountryRulesResult`](https://docs.agenticinsuranceprotocol.org/0.1/reference#getcountryrulesresult) |

Every registry tool is read-only and needs no session, so the registry never learns who the customer is. The params describe a market or a company, never a person. A registry tool MUST refuse a call whose params do not match its input schema, a param that this draft does not define included, and keep nothing of the call. The refusal is an MCP tool result with `isError: true` and the reason as text.

## 5. Search

`search_distributors` takes a country, and optionally a subdivision, a line, an insured family and a minimum conformance level. It returns [`ListedDistributor`](https://docs.agenticinsuranceprotocol.org/0.1/reference#listeddistributor) objects: the legal and trading names, the domain, the MCP endpoint, the roles, the conformance level, the lines, the countries, the insured families, the complaints page, and a licence check for the market of the search.

* Each result MUST match every param of the search.
* The registry MUST return every listed seller that matches, across the pages.
* For a country where it lists no seller, the registry returns `country_not_covered`. An agent then does not read an empty list as "no seller exists".
* The order carries no meaning. The registry MUST NOT rank a seller for a payment or for any commercial link, and it SHOULD shuffle the order for each new search. An agent MUST NOT show the order to the customer as a ranking.

The `licence_check` of each seller is a whole [`VerifyLicenceResult`](https://docs.agenticinsuranceprotocol.org/0.1/reference#verifylicenceresult): the check that `verify_licence` gives for the seller's domain, in the country, the subdivision and the line of the search. Its verdict is `licensed`, because a search returns only licensed sellers, and it MUST rest on reads made at most seven days before it. An agent MAY rely on it in place of its own `verify_licence` call when it is at most seven days old and the agent sends the answers to the `mcp_url` of the listing. The agent keeps it with the record of the sale, as any check. A seller found anywhere else needs `verify_licence`.

The address of a server is the only proof of its domain. An AI agent MAY rely on a listing, or on a `verify_licence` result for a domain, only when it knows the address of the server that receives the answers, and that address is on that domain. It knows the address when it called the `mcp_url` itself, or when its host gives the address of each server that it connected, for example in its instructions or its configuration. The `domain` that the server gives in `get_distributor` MUST then be that domain. When it is not, the AI agent MUST NOT send the customer's answers to that server.

When the AI agent does not know the address of the server, it cannot tie the server to a domain. It MUST then treat the licence as `unknown`, tell the customer why, and send no answers to that server. The `domain` that a server gives about itself never proves its domain. Many hosts connect MCP servers before the conversation and do not show their address: see the [open points](https://docs.agenticinsuranceprotocol.org/0.1/spec.md#15-open-points) of the specification.

## 6. Licence check

`verify_licence` answers one question: can this party sell, or carry the risk, for a customer in this country, subdivision and line? It MUST work for a seller that the registry does not list. An agent can find a seller anywhere on the web, and the check matters most then.

### 6.1 What the agent asks

The params are a [`VerifyLicenceParams`](https://docs.agenticinsuranceprotocol.org/0.1/reference#verifylicenceparams) object. Its `capacity` says what the agent checks.

* **A seller**, with the capacity `distributor`. The agent gives the domain of the server or the website that will receive the customer's answers. It can add the register entry and the legal name that the seller shows, for example in the legal notice of its website. A register number alone does not prove who runs a website, so a seller check always names the domain.
* **A provider**, with the capacity `provider`, for example the insurer in [`Product.provider`](https://docs.agenticinsuranceprotocol.org/0.1/reference#product) or [`Offer.provider`](https://docs.agenticinsuranceprotocol.org/0.1/reference#offer). The agent gives its domain, a register entry, or both. Only a provider role counts.

Both give the customer's country and, when the agent knows it, the line. Where a licence applies per subdivision, the subdivision is REQUIRED. In draft 0.1 that is the United States, where each state grants its own licences.

### 6.2 What the registry reads

The result lists every register entry that the registry read for the party, as [`LicenceCheck`](https://docs.agenticinsuranceprotocol.org/0.1/reference#licencecheck) objects, and that includes the entries that are not active. Each entry gives the register and the identifier, the role, the categories, the subdivisions, the countries of an EU passport, the name in the register, the time of the read, how the registry read it, and the public page where anyone can check it.

| Status | Meaning |
| - | - |
| `active` | The entry is in force |
| `pending` | The regulator has not approved the entry yet |
| `lapsed` | The entry ended with no sanction: not renewed, expired, or removed at the holder's request |
| `suspended` | The regulator suspended the entry for a time |
| `revoked` | The regulator withdrew the entry, or struck it off as a sanction |
| `not_found` | The register has no entry with this identifier |
| `name_mismatch` | The entry exists, but its name does not match the name that the seller declares or shows |

`register_status` keeps the status in the words of the register, for example "Authorised" or "Inscrit".

When the params give a domain, the registry SHOULD read `get_distributor` on the MCP server of the domain, through its `aip.json`, under the rules of [network reads](#2-1-network-reads). For a listed server, it uses the licences that it keeps and the `mcp_url` that it already checked, and makes no new read. It reads each licence that the server claims in the register, with the domain link `claimed`. A claimed identifier that the register does not have gives `not_licensed` with the reason `no_entry`.

### 6.3 Domains

Any domain can claim any register entry, for example in the `get_distributor` result of its MCP server. That proves control of the domain and nothing more. [`DomainLink`](https://docs.agenticinsuranceprotocol.org/0.1/reference#domainlink) says how the registry tied the domain to the entries:

| Link | Meaning | Supports `licensed` |
| - | - | - |
| `register` | The register gives this domain for the entry | Yes |
| `confirmed` | The operator confirmed with the holder of the entry, through contact details that the register or the regulator gives | Yes |
| `claimed` | Only the domain says that the entries are its own | No |
| `not_linked` | Nothing ties the domain to the entries | No |

### 6.4 Verdict

The registry tests each entry in this order: the country (or an EU passport into it), the subdivision, the line, the role for a provider, then the status. An entry that passes the five tests covers the question.

| Verdict | When | Reasons |
| - | - | - |
| `licensed` | An entry covers the question, and the domain link, when a domain is given, is `register` or `confirmed` | None |
| `not_licensed` | The registry read every register that applies, and no entry covers the question. The reason names the first test that the closest entry failed | `no_entry`, `subdivision_not_covered`, `line_not_covered`, `role_not_covered`, `name_mismatch`, `licence_not_active` |
| `unknown` | The registry cannot decide | `country_not_covered`, `subdivision_required`, `register_unavailable`, `subject_not_identified`, `domain_not_linked` |

Each verdict comes with a message in plain words that the agent can pass to the customer. A verdict MUST rest only on reads made at most seven days before it (`MAX_READ_AGE_DAYS`). The registry SHOULD read the register again for each call when the register has an API or a web page.

### 6.5 What the agent does

| Verdict | The agent |
| - | - |
| `licensed` | Goes on, and keeps the result with the record of the sale |
| `not_licensed` | MUST NOT send the customer's answers to that party, and MUST NOT apply through it. It MUST tell the customer why |
| `unknown` | MUST tell the customer that the licence could not be checked, and why. It MUST NOT apply, and SHOULD NOT send the customer's answers. It MAY ask the seller for its register entry and check again |

The agent MUST check the seller before it sends any of the customer's answers, with `verify_licence` or with the licence check of a search, for the domain of the address of the server that receives the answers (see [Search](#5-search)). It MUST check the provider of an offer before it applies, when the provider is not the seller. The AIP skill checks the provider earlier, when `list_products` names it, so that the customer does not answer questions for an insurer that fails the check. It MUST keep each result that it relies on with the record of the sale, and SHOULD give the customer a copy. The result repeats the params of the call, so it is a complete record on its own.

## 7. Country rules

`get_country_rules` returns the rules files of the AIP skill for a country. The file of the country comes first. The file of the subdivision and the file of the line follow, when they exist. The agent MUST follow every file of the result. For a country with no file, the registry returns `country_not_covered`.

Each file is Markdown with a YAML front matter:

```yaml theme={null}
---
country: FR
version: 0.1.0
owner: AIP maintainers
status: draft
language: en
effective_from: 2026-10-24
sources:
  - title: Directive (EU) 2016/97 on insurance distribution
    url: https://eur-lex.europa.eu/eli/dir/2016/97/oj
---
```

* `owner` is the AIP maintainers, until a regulator takes the file over.
* `status` is `draft`, or `endorsed` when a regulator endorsed this version. An endorsed file names the regulator in `endorsed_by`.
* `reviewed_at` is the date of the last legal review. The key is absent when no review happened.
* `language` is the language of the text, as a BCP 47 tag.
* `effective_from` is the first day the version applies. A version that follows a change in the law can be published before that day.
* A file of a subdivision or of a line adds `subdivision` or `line`. In the skill, the file of a country is `countries/<code>/country.md`, the file of a subdivision is in `states/`, and the file of a line is in `lines/`.
* `sources` lists the legal texts that the file rests on.

A [`RulesFile`](https://docs.agenticinsuranceprotocol.org/0.1/reference#rulesfile) gives the same values, the whole file in `content`, its public address, and its URI in the skill that the registry serves over MCP. The text MUST be the same as the file of the same version in the skill. When the registry does not answer, the agent uses the copy in its installed skill, and SHOULD tell the customer which version it used.

A regulator that takes over the rules of its country changes one file. Each agent that loads the rules from the registry gets the change on its next call.

## 8. Listing

A seller that runs an MCP server with the AIP tools asks to be listed at the `listing_url` of the registry. The test registry takes the requests on the [submission form](https://agenticinsuranceprotocol.org/submit) of this site. The form runs steps 2, 3 and 5 of section 8.1 before it sends a request, under the rules of [network reads](#2-1-network-reads), and takes the name, the countries, the roles and the licences from `get_distributor`.

### 8.1 Ask to be listed

The seller gives its website, or the address of its MCP server or of its `aip.json`, and an email address for the answer. The registry reads the rest from the `aip.json` and from `get_distributor`.

The operator follows these steps:

1. The seller asks. The operator finds the domain: the host of the website or of the `aip.json`, or the `domain` that `get_distributor` returns on the MCP server.
2. The registry reads `https://{domain}/.well-known/aip.json`, the seller's [`AipDocument`](https://docs.agenticinsuranceprotocol.org/0.1/reference#aipdocument). Its `domain` MUST be the domain. The document comes from that host, so it proves that the seller controls the domain.
3. It calls `get_distributor` on the MCP server that the document names in `mcp_url`. The `domain` of the result MUST be the domain.
4. It checks each licence of the result in the public register of its country, as `verify_licence` does. It also confirms with the holder of each entry that the domain is theirs: the register gives the domain, or the operator asks the holder through contact details that the register or the regulator gives.
5. It checks that the server has every tool of the level it declares, and that the results of the level 1 tools match the schema.
6. It lists the server, and answers the seller.

The operator runs the steps after the request, with a person or a program. Some registers need an agreement or a person to read them.

### 8.2 Answer

| Answer | When | What the seller does |
| - | - | - |
| Listed | Steps 2, 3 and 5 pass, and step 4 passes for at least one licence | Nothing. The registry checks the server again at least every seven days |
| On hold | Steps 2, 3 and 5 pass, and no licence passes step 4 yet, because the registry cannot read the register or the holder has not confirmed the domain | Confirms the domain through the contact details that the register gives, or waits for the registry to read the register |
| Refused | Step 2, 3 or 5 fails, a licence is not in its register or has another name there, or no licence is active | Fixes the cause and asks again. A seller that disagrees with a register entry goes to the regulator |

Each answer names each step that did not pass. For a licence, it names the register entry and the date of the read.

### 8.3 Rules for the operator

* The operator MUST answer each request, as section 8.2 says.
* The operator MUST apply the same steps to each seller. It MUST NOT list, refuse or delay a seller for a commercial reason.
* The operator reads the register, and adds no judgement of its own. A seller that disagrees with a register entry goes to the regulator. A seller MAY ask again at any time.
* Each read of the listing follows the rules of [network reads](#2-1-network-reads). The registry shows the seller a reason for each step.
* The registry MUST list a server only when steps 2, 3 and 5 pass, and step 4 passes for at least one licence. A server that lacks one tool of its level MUST NOT be listed.
* The registry MUST NOT list a server that claims a licence whose status is `not_found` or `name_mismatch`. It MUST NOT link a register entry to a second domain unless the holder of the entry confirms the second domain too.
* A listed server appears in a search for a country only while its verdict there is `licensed`.
* The registry MUST check each listed server again at least every seven days (`RECHECK_DAYS`), and when the seller or a regulator asks. It SHOULD also check again when anyone reports a problem.
* When a licence stops being active, the registry MUST remove what that licence covered from the listing before it answers another search.
* When `aip.json` or the MCP server goes away, or the server fails step 5, the registry MUST remove the listing.
* The registry keeps the fields of [`ListedDistributor`](https://docs.agenticinsuranceprotocol.org/0.1/reference#listeddistributor) and the licences. It MUST NOT copy the products, the underwriting scopes, the prices or the documents of a server.

## 9. Data sources

The registry reads public registers. It MUST read a register only through an access that the terms of the register allow, and under an agreement when the terms ask for one. This table gives what we found on the official pages on 24 October 2026. "Not verified" marks each fact that no official page confirmed.

| Country | Register | Covers | Identifier | Access | Terms of use | Cost | Changes | At launch |
| - | - | - | - | - | - | - | - | - |
| US | [NIPR Producer Database](https://nipr.com/industry-solutions/reports-and-alerts) | Producers (people and agencies), with each state licence and its lines of authority. A carrier report covers insurers | NPN (format not published), and each state licence number | Batch reports and an alerts web service, for subscribers | Fair Credit Reporting Act: a "permissible purpose" only. Needs an access form and a licence agreement | Paid per report and per tracked NPN (current prices not verified) | Every weeknight | Agreement and payment |
| US | [State lookups of 34 jurisdictions](https://sbs.naic.org/solar-external-lookup/), run by the NAIC for the state departments | Licensees and companies of those jurisdictions. Not California, Florida, New York or Texas | Licence number, NPN | Web page only | Bans automated downloads and republishing | Free | Not verified | No |
| US | [Texas Department of Insurance open data](https://data.texas.gov/dataset/Insurance-agencies-and-businesses-approved-to-mana/3yqc-fcdt) | Texas agents, adjusters and agencies | NPN, TDI licence number | Bulk file and query API. No status column: the expiry date gives it | No licence stated (not verified) | Free | Not stated. Rows changed on 22 and 23 October 2026 | Yes, Texas only |
| US | [NAIC Consumer Insurance Search](https://content.naic.org/cis_consumer_information.htm) | Insurers, with their lines, their licensed states and their website | NAIC company code, 5 digits | Web page only | No terms on the page. The NAIC sells its data under a licence agreement | Free to view | Not verified | Agreement |
| UK | [FCA Financial Services Register](https://register.fca.org.uk/s/legal-information) and its API | Authorised firms: intermediaries, appointed representatives, and insurers, including those that the PRA authorises | FRN, 6 or 7 digits | Web pages, and a free API with a key, for one firm per call (50 requests per 10 seconds) | A data feed to another website needs the FCA's written permission. No robots. The terms of the API itself are behind a login (not verified) | Free with a key | About every 24 hours | Agreement to serve the data to agents |
| UK | [FCA Register Extract Service](https://www.fca.org.uk/publication/documents/register-extract-handbook.pdf) | Most Register data, with no websites or email addresses | FRN | Bulk files | Signed subscriber agreement. A "re-sale use" licence covers services that help users check if a firm is regulated | About £11,300 a year plus VAT, for weekly firm data | Weekly or monthly | Paid |
| FR | [ORIAS](https://www.orias.fr/webService/mentionsLegalesWebService) | Intermediaries in insurance, banking and finance, and EEA intermediaries that work in France (category EII) | ORIAS number, 8 digits (seen on every entry, rule not published), and SIREN | Web search, and a SOAP web service after authorisation | No commercial reuse, no derived database, no robots | Web search free. Web service cost not stated | Not verified. Each entry renews every year by 1 March | Agreement |
| FR | [ACPR REGAFI, insurance part](https://www.regafi.fr/pages/api-acpr) | Insurers, mutuals and provident institutions, EEA insurers on a passport, and branches of non-EEA insurers | SIREN, LEI, ACPR id | Open-data API and exports, with no account | The terms "have not been defined yet". No dataset licence | Free | Daily | Yes, after written confirmation from the ACPR |
| EU | [EIOPA Register of Insurance Undertakings](https://register.eiopa.europa.eu/registers/register-of-insurance-undertakings) | EEA insurers, with their cross-border status in each country and their website | National code, LEI | Web, and CSV or Excel export | Reproduction allowed with the source acknowledged | Free | Weekly, on Friday | Yes |
| EU | [EIOPA register of insurance intermediaries](https://www.eiopa.europa.eu/tools-and-data/registers-lists-and-databases/register-insurance-intermediaries_en) | Links to the national registers only | None | Links | Not applicable | Free | Not applicable | No data |
| All | [GLEIF](https://www.gleif.org/en/meta/lei-data-terms-of-use) | Legal entities | LEI, 20 characters | API with no key, and full files | CC0 | Free | Three times a day | Yes |

### 9.1 At launch

With no agreement, a first registry can check:

* the insurers of France, from REGAFI, after the ACPR confirms in writing that the registry may reuse the data;
* the insurers of the EEA, including those that sell in France on a passport, from the EIOPA register;
* the agents and agencies of Texas, from the open data of the Texas Department of Insurance;
* the legal identity of a company in any country, from GLEIF. The LEI and the SIREN join GLEIF to REGAFI, EIOPA and ORIAS.

The intermediaries of the three countries need an agreement: NIPR for the United States, the FCA for the United Kingdom, and ORIAS for France. The insurers of the United States need one with the NAIC. NIPR also asks for a "permissible purpose" under the Fair Credit Reporting Act, and we have not verified that a registry qualifies. Until these agreements exist, `verify_licence` returns `unknown` with the reason `country_not_covered` for what the registry cannot read. The FCA's "re-sale use" licence names the use of the registry: to help users find out if a firm is regulated.

### 9.2 Domains in the registers

ORIAS, the EIOPA register and the NAIC show the website of an entry. The FCA Register can show one, and we have not verified that its API returns it. NIPR and the Texas data show none. When a register gives the website, the registry can tie a domain to the entry with the link `register`. The firm declares its website to the register itself, so another firm cannot add its own domain to the entry. In the other cases, the operator confirms the domain with the holder of the entry.

### 9.3 Status labels

The registry maps the labels of each register to a [`LicenceStatus`](https://docs.agenticinsuranceprotocol.org/0.1/reference#licencestatus), and keeps the label in `register_status`:

| Register | Labels |
| - | - |
| NIPR | Active, Pending, Inactive. Lines of authority such as Property, Casualty, Personal Lines, Life, and Accident and Health or Sickness |
| FCA | Authorised, EEA Authorised, Appointed representative, Registered, No longer authorised, Cancelled, Lapsed, Suspended, Revoked |
| ORIAS | Inscrit, Radié for the entry. Inscrit or Supprimé for each category: AGA, COA, MA, MAL, MIA and EII in insurance |
| REGAFI | Actif for an authorisation. An event can say that the insurer may not sell new contracts |

## 10. Trust and privacy

* Every result says where its data comes from and when the registry read it: the register, the access (API, file or web page), the date of the data in the source, the time of the read, and the public page of the entry.
* The registry never receives customer data. Its tools need no session, and their params describe a market or a company. Check RG8 tests the params of each tool against a closed list of fields.
* The registry SHOULD keep each `verify_licence` result under its `check_id` for at least five years, so that it can confirm later what it said.
* Draft 0.1 does not sign results, so an agent cannot yet prove alone what the registry said. See the open points.

## 11. Errors

A registry tool returns its result in `structuredContent`, and the same JSON as text in `content`, as the [specification](https://docs.agenticinsuranceprotocol.org/0.1/spec.md#1-overview) says. It returns an error in an MCP tool result with `isError: true`, as a [`RegistryError`](https://docs.agenticinsuranceprotocol.org/0.1/reference#registryerror) in `structuredContent.error`, and the same JSON as text in `content`.

| Code | Meaning |
| - | - |
| `country_not_covered` | The registry lists no server in this country, or has no rules file for it. |

## 12. Worked example

These calls go with the [pet insurance flow](https://docs.agenticinsuranceprotocol.org/0.1/example.md). The rules, the search and the seller checks come before it, and the insurer check comes before the application. All companies are fictional.

### Load the rules of the country

*get\_country\_rules*

Alice lives in France and wants to insure her cat. The agent first loads the rules of France. The file is the one of the AIP skill, unchanged, with its version, its owner, its status and its hash.

```json spec/examples/registry-01-get_country_rules.params.json theme={null}
{
  "country": "FR",
  "line": "pet"
}
```

```json spec/examples/registry-02-get_country_rules.result.json theme={null}
{
  "files": [
    {
      "country": "FR",
      "version": "0.1.0",
      "owner": "AIP maintainers",
      "status": "draft",
      "language": "en",
      "effective_from": "2026-10-24",
      "content": "---\ncountry: FR\nversion: 0.1.0\nowner: AIP maintainers\nstatus: draft\nlanguage: en\neffective_from: 2026-10-24\nsources:\n  - title: Directive (EU) 2016/97 on insurance distribution\n    url: https://eur-lex.europa.eu/eli/dir/2016/97/oj/eng\n  - title: Code des assurances\n    url: https://www.legifrance.gouv.fr/codes/texte_lc/LEGITEXT000006073984/\n  - title: Code de la consommation, articles L612-1 and L612-2 (mediation)\n    url: https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000032224805\n  - title: Regulation (EU) 2016/679 (GDPR)\n    url: https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng\n  - title: ACPR recommendation 2024-R-02 on complaints\n    url: https://acpr.banque-france.fr/system/files/2024-12/20240702_Recommandation_2024-R-02.pdf\n  - title: ACPR recommendation 2024-R-03 on the duty to advise\n    url: https://acpr.banque-france.fr/system/files/2024-12/20241022_recommandation_2024-R-03_0.pdf\n---\n\n# France\n\nDraft. No lawyer and no regulator has reviewed this file. Each rule gives its source and its review status. Follow this file as well as the procedure of the skill.\n\n## Who may sell\n\n1. Only an insurer that the ACPR authorises, or an insurer of another EU or EEA country under its passport, may carry the risk for a customer in France. Check the insurer behind each offer with `verify_licence`, the capacity \"provider\" and the country FR. Source: Code des assurances, art. L310-2 and L321-1. Not reviewed.\n2. A person who distributes insurance for a payment must be in the ORIAS register, unless it is the insurer itself or its staff. Check the seller with `verify_licence`, the capacity \"distributor\" and the country FR, before you send any answer of the customer. Source: Code des assurances, art. L511-1 III, L512-1 I and R512-1. Not reviewed.\n3. The registry checks intermediaries in ORIAS, and insurers in REGAFI, which lists the insurers allowed to operate in France. For an insurer of another EU country, the register of its home country and the EIOPA register also apply. Source: ACPR, page on insurance intermediaries. Not reviewed.\n\n## What you may say\n\n1. Helping a customer to conclude an insurance contract is insurance distribution. A person who does it for a payment or any other advantage linked to the sale is an intermediary, and must be in ORIAS. Follow this skill only when you, and the company that runs you, get no commission, fee or other advantage linked to the sale. Source: Code des assurances, art. L511-1 I and III, R511-3 I and L512-1 I. Not reviewed.\n2. Do not recommend an offer, and do not say which offer is best for the customer. Giving recommendations on insurance contracts is insurance distribution, and the advice belongs to the seller. When the customer asks for advice, say that you cannot give it, and that the seller can. Source: Code des assurances, art. L511-1 I and L521-4; ACPR, page on insurance intermediaries. Not reviewed.\n3. Do not rank the offers, and do not compare them on price or cover against criteria of your own. Give the facts of each offer as `quote` returns them, side by side, with the same fields in the same order, so that the customer compares them alone. Source: Code des assurances, art. L511-1 I and II 4°. Not reviewed.\n4. Give the cover in the seller's words, from the offer and the documents. Do not add your own reading of what a term means for the customer. Explaining the cover with a view to a subscription is presentation, a part of distribution. When the customer asks what a term means for them, send the question to the seller. Source: Code des assurances, art. R511-1. Not reviewed.\n\n## Documents before commitment\n\n1. Before the contract is concluded, give the customer the IPID of a non-life product. It is the document with the type `ipid` and `required_before_commitment: true`. Source: Code des assurances, art. L112-2; Directive (EU) 2016/97, art. 20(5) to 20(8); Commission Implementing Regulation (EU) 2017/1469. Not reviewed.\n2. Before the contract, an intermediary gives its identity, its address, its ORIAS number, its complaints and mediation procedures, its links with insurers, whether it gives a personal recommendation, and how it is paid. Take this from `get_distributor` and from the seller's documents, and give it to the customer. Source: Code des assurances, art. L521-2 I and II. Not reviewed.\n3. For a sale at a distance, the customer gets before commitment the information that the law lists, including the total premium, the cover and the exclusions, the right to withdraw with a model form, the complaints procedure and the IPID. Give the customer each document that the seller marks `required_before_commitment: true`. Source: Code des assurances, art. L112-2-1 III. Not reviewed.\n\n## Demands and needs\n\n1. Before the contract, the seller states in writing the customer's demands and needs, based on what the customer said, and proposes a contract that matches them, with its reasons. In France this advice is mandatory. Record the customer's need in their own words in step 1 of the procedure. The seller gives its statement of demands and needs on its own page, before the customer approves. Source: Code des assurances, art. L521-4 I; ACPR recommendation 2024-R-03. Not reviewed.\n2. When the seller gives a personal recommendation, tell the customer that it comes from the seller. You never give one. Source: Code des assurances, art. L521-4 II. Not reviewed.\n3. Ask the customer whether they already hold cover for the same risk, and tell them when the new cover overlaps it. Source: ACPR recommendation 2024-R-03, point 2.1.2.2. Not reviewed.\n\n## Withdrawal\n\n1. A consumer who buys a contract at a distance can withdraw within 14 calendar days, with no reason and no penalty. The period starts at the conclusion, or on the day the customer receives the terms and the information if that is later. Tell the customer this period, and where the seller's online withdrawal function is. Source: Code des assurances, art. L112-2-1 II, as amended by ordonnance 2026-2. Not reviewed.\n2. The 14 days do not apply to travel or baggage cover of less than one month, to compulsory motor liability cover, or to a contract fully performed at the customer's express request. Source: Code des assurances, art. L112-2-1 II. Not reviewed.\n3. When the customer buys cover that adds to a good or a service sold by a supplier, for example cover for a device sold with it, the customer can withdraw within 30 days. Pet health cover bought on its own is under the 14 days. Source: Code des assurances, art. L112-10. Not reviewed.\n\n## Sensitive data\n\n1. Health data of a person needs an exception of the GDPR, for example explicit consent. Never collect health details of a person. The customer gives them on the seller's page. Source: Regulation (EU) 2016/679 (GDPR), art. 4(15) and 9. Not reviewed.\n2. Never collect a social security number, a bank account number or an identity document number. The customer gives them on the seller's page. Source: Regulation (EU) 2016/679 (GDPR), art. 5(1)(c). Not reviewed.\n\n## Complaints\n\n1. The customer first complains in writing to the seller, at its `complaints_url`. The seller acknowledges within 10 working days and answers within 2 months. Give the customer that address. Source: ACPR recommendation 2024-R-02. Not reviewed.\n2. After the seller's answer, or 2 months after the written complaint, the customer can go to La Médiation de l'Assurance, for free, within 1 year of the complaint, when the seller is a member. Source: Code de la consommation, art. L612-1 and L612-2. Not reviewed.\n3. The ACPR does not settle a single dispute. A customer can report a problem to it, and ABE Info Service gives general information. Source: ACPR, page on complaints for customers. Not reviewed.\n",
      "url": "https://registry.example.com/rules/fr/country/0.1.0.md",
      "skill_uri": "skill://agentic-insurance-protocol/references/countries/fr/country.md"
    }
  ]
}
```

### Find the sellers

*search\_distributors*

The agent asks the registry for the sellers of pet insurance in France that can at least quote. The registry returns Example Pets, with a licence check for this market that it made overnight. The check is less than seven days old, so the agent can rely on it and keep it with the record of the sale.

```json spec/examples/registry-03-search_distributors.params.json theme={null}
{
  "country": "FR",
  "line": "pet",
  "min_conformance_level": 2
}
```

```json spec/examples/registry-04-search_distributors.result.json theme={null}
{
  "distributors": [
    {
      "legal_name": "Example Pets SAS",
      "trading_name": "Example Pets",
      "domain": "pets.example.com",
      "mcp_url": "https://pets.example.com/mcp",
      "roles": [
        "broker"
      ],
      "conformance_level": 3,
      "lines": [
        "pet"
      ],
      "countries": [
        "FR"
      ],
      "insured_families": [
        "pet"
      ],
      "complaints_url": "https://pets.example.com/complaints",
      "licence_check": {
        "check_id": "chk-4c90",
        "params": {
          "capacity": "distributor",
          "subject": {
            "domain": "pets.example.com"
          },
          "country": "FR",
          "line": "pet"
        },
        "subject": {
          "legal_name": "Example Pets SAS",
          "domain": "pets.example.com",
          "domain_link": "register",
          "listed": true,
          "mcp_url": "https://pets.example.com/mcp"
        },
        "licences": [
          {
            "country": "FR",
            "regulator": "ACPR",
            "register": "ORIAS",
            "identifier_type": "orias_number",
            "identifier": "00000000",
            "role": "broker",
            "status": "active",
            "register_status": "Inscrit",
            "categories": [
              "COA"
            ],
            "name_in_register": "EXAMPLE PETS SAS",
            "access": "api",
            "checked_at": "2026-10-20T03:00:00+02:00",
            "source_url": "https://www.orias.fr/"
          }
        ],
        "outcome": {
          "verdict": "licensed",
          "message": "Example Pets SAS is in the ORIAS register as an insurance broker (COA), and the entry is active."
        },
        "checked_at": "2026-10-20T03:00:01+02:00"
      },
      "listed_since": "2026-10-01"
    }
  ]
}
```

### Check a seller that the customer names

*verify\_licence*

When Alice names a seller herself, the agent checks it with `verify_licence` before it sends any answer. It gives the domain that will receive the answers. The registry reads the ORIAS entry again, and the entry gives the website of Example Pets, so the link is `register`. The verdict is `licensed`, and the agent keeps the result with the record of the sale.

```json spec/examples/registry-05-verify_licence.params.licensed.json theme={null}
{
  "capacity": "distributor",
  "subject": {
    "domain": "pets.example.com"
  },
  "country": "FR",
  "line": "pet"
}
```

```json spec/examples/registry-06-verify_licence.result.licensed.json theme={null}
{
  "check_id": "chk-4d1e",
  "params": {
    "capacity": "distributor",
    "subject": {
      "domain": "pets.example.com"
    },
    "country": "FR",
    "line": "pet"
  },
  "subject": {
    "legal_name": "Example Pets SAS",
    "domain": "pets.example.com",
    "domain_link": "register",
    "listed": true,
    "mcp_url": "https://pets.example.com/mcp"
  },
  "licences": [
    {
      "country": "FR",
      "regulator": "ACPR",
      "register": "ORIAS",
      "identifier_type": "orias_number",
      "identifier": "00000000",
      "role": "broker",
      "status": "active",
      "register_status": "Inscrit",
      "categories": [
        "COA"
      ],
      "name_in_register": "EXAMPLE PETS SAS",
      "access": "api",
      "checked_at": "2026-10-20T09:58:00+02:00",
      "source_url": "https://www.orias.fr/"
    }
  ],
  "outcome": {
    "verdict": "licensed",
    "message": "Example Pets SAS is in the ORIAS register as an insurance broker (COA), and the entry is active."
  },
  "checked_at": "2026-10-20T09:58:01+02:00"
}
```

### Check a seller found on the web

*verify\_licence*

Another site sells pet cover and gives an ORIAS number in its legal notice. ORIAS has no such entry. The verdict is `not_licensed`, so the agent sends nothing to that site and tells Alice why.

```json spec/examples/registry-07-verify_licence.params.no_licence.json theme={null}
{
  "capacity": "distributor",
  "subject": {
    "domain": "petcover.example.com",
    "identifier": {
      "country": "FR",
      "identifier_type": "orias_number",
      "identifier": "99031742"
    },
    "legal_name": "Pet Cover Online SARL"
  },
  "country": "FR",
  "line": "pet"
}
```

```json spec/examples/registry-08-verify_licence.result.no_licence.json theme={null}
{
  "check_id": "chk-4d2a",
  "params": {
    "capacity": "distributor",
    "subject": {
      "domain": "petcover.example.com",
      "identifier": {
        "country": "FR",
        "identifier_type": "orias_number",
        "identifier": "99031742"
      },
      "legal_name": "Pet Cover Online SARL"
    },
    "country": "FR",
    "line": "pet"
  },
  "subject": {
    "domain": "petcover.example.com",
    "domain_link": "not_linked",
    "listed": false
  },
  "licences": [
    {
      "country": "FR",
      "regulator": "ACPR",
      "register": "ORIAS",
      "identifier_type": "orias_number",
      "identifier": "99031742",
      "status": "not_found",
      "access": "api",
      "checked_at": "2026-10-20T09:59:00+02:00",
      "source_url": "https://www.orias.fr/"
    }
  ],
  "outcome": {
    "verdict": "not_licensed",
    "reason": "no_entry",
    "message": "ORIAS has no entry with the number 99031742, and no entry in the name of Pet Cover Online SARL. This seller is not registered to sell insurance in France."
  },
  "checked_at": "2026-10-20T09:59:01+02:00"
}
```

### Load the rules of a state and a line

*get\_country\_rules*

In another sale, a customer in Texas wants to insure a cat. The agent asks for the rules of the United States, with the state and the line. Texas has no file of its own yet, so the result holds the file of the United States, then the file of pet insurance there. Each file is the file of the skill, unchanged.

```json spec/examples/registry-13-get_country_rules.params.state_line.json theme={null}
{
  "country": "US",
  "subdivision": "US-TX",
  "line": "pet"
}
```

```json spec/examples/registry-14-get_country_rules.result.state_line.json theme={null}
{
  "files": [
    {
      "country": "US",
      "version": "0.1.0",
      "owner": "AIP maintainers",
      "status": "draft",
      "language": "en",
      "effective_from": "2026-10-24",
      "content": "---\ncountry: US\nversion: 0.1.0\nowner: AIP maintainers\nstatus: draft\nlanguage: en\neffective_from: 2026-10-24\nsources:\n  - title: NAIC Producer Licensing Model Act (#218)\n    url: https://content.naic.org/sites/default/files/model-law-218.pdf\n  - title: NAIC Privacy of Consumer Financial and Health Information Regulation (#672)\n    url: https://content.naic.org/sites/default/files/model-law-672.pdf\n  - title: NAIC Insurance Data Security Model Law (#668)\n    url: https://content.naic.org/sites/default/files/model-law-668.pdf\n  - title: Gramm-Leach-Bliley Act, 15 U.S.C. 6805\n    url: https://www.law.cornell.edu/uscode/text/15/6805\n  - title: NAIC, state insurance departments\n    url: https://content.naic.org/state-insurance-departments\n---\n\n# United States\n\nDraft. No lawyer and no regulator has reviewed this file. Each rule gives its source and its review status. Follow this file as well as the procedure of the skill.\n\nEach state regulates insurance with its own laws and its own insurance department. Most states build their laws on the NAIC model acts, and their texts differ. This file holds the points that the model acts share. The files of the states come later, in `states/`. The rules of one line are in `lines/`, for example `lines/pet.md`.\n\n## Who may sell\n\n1. A person who sells, solicits or negotiates insurance in a state must hold a producer licence of that state for the line of authority. Check the seller with `verify_licence`, the capacity \"distributor\", the country US and the subdivision of the customer's state, for example US-TX, before you send any answer of the customer. Source: NAIC Producer Licensing Model Act, s. 3. Not reviewed.\n2. A licence of one state does not cover a customer in another state. When the verdict is `not_licensed` with the reason `subdivision_not_covered` or `licence_not_active`, stop with this seller. Source: NAIC Producer Licensing Model Act, s. 3. Not reviewed.\n3. An insurer transacts insurance in a state only under a certificate of authority of that state. Check the insurer behind each offer in the same way, with the capacity \"provider\". Source: state insurance codes, for example Washington RCW 48.05.030(1). Not reviewed.\n\n## What you may say\n\n1. To solicit is to try to sell insurance, or to ask or urge a person to apply for a kind of insurance from a particular company. Only a licensed producer may do it, paid or not. Do not urge the customer to buy from a particular company, and do not recommend an offer. When the customer asks for advice, say that you cannot give it, and that a licensed producer can. Source: NAIC Producer Licensing Model Act, s. 2 and s. 3. Not reviewed.\n2. To negotiate is to confer with or advise a buyer on the benefits, terms or conditions of a particular contract, by a person who sells insurance or obtains it for buyers. Give the cover in the seller's words, from the offer and the documents, and do not add your own reading of what a term means for the customer. Send that question to the seller. Source: NAIC Producer Licensing Model Act, s. 2. Not reviewed.\n3. A person with no licence may not take a commission for selling, soliciting or negotiating insurance. Follow this skill only when you, and the company that runs you, get no commission, fee or other advantage linked to the sale. Source: NAIC Producer Licensing Model Act, s. 13. Not reviewed.\n4. Give the facts of each offer as `quote` returns them, side by side, with the same fields in the same order, so that the customer compares them alone. Do not rank the offers. Source: NAIC Producer Licensing Model Act, s. 2. Not reviewed.\n\n## Documents before commitment\n\n1. No general rule names one document before commitment for property and casualty insurance. Give the customer every document with `required_before_commitment: true`, and the policy form when the seller gives it. Source: no general rule found in the NAIC model acts for property and casualty insurance. Not reviewed.\n\n## Demands and needs\n\n1. No general rule asks the seller to record the demands and needs for property and casualty insurance. Record the customer's need in their own words anyway, in step 1 of the procedure. Source: no general rule found in the NAIC model acts for property and casualty insurance. Not reviewed.\n\n## Withdrawal\n\n1. The right to return a policy after the purchase depends on the state and on the line. Most \"free look\" periods cover life, health and annuities. For other lines, tell the customer what the documents of the offer say about cancellation. Source: state insurance codes. Not reviewed.\n\n## Sensitive data\n\n1. The insurance department of each state enforces the federal privacy rules against insurers. An insurer and a producer give a privacy notice, and ask for the customer's authorisation before they disclose health information about a person. Source: Gramm-Leach-Bliley Act, 15 U.S.C. 6805(a)(6); NAIC Privacy of Consumer Financial and Health Information Regulation, s. 18. Not reviewed.\n2. Never collect a Social Security number, a bank account number or health details of a person. The customer gives them on the seller's page. Source: NAIC Insurance Data Security Model Law. Not reviewed.\n\n## Complaints\n\n1. The customer first complains to the seller, at its `complaints_url`. Give the customer that address. Source: NAIC, page on how to file a complaint. Not reviewed.\n2. The customer can then file a complaint with the insurance department of their state, which investigates for free. Give the customer its name. Source: NAIC, page on how to file a complaint. Not reviewed.\n",
      "url": "https://registry.example.com/rules/us/country/0.1.0.md",
      "skill_uri": "skill://agentic-insurance-protocol/references/countries/us/country.md"
    },
    {
      "country": "US",
      "line": "pet",
      "version": "0.1.0",
      "owner": "AIP maintainers",
      "status": "draft",
      "language": "en",
      "effective_from": "2026-10-24",
      "content": "---\ncountry: US\nline: pet\nversion: 0.1.0\nowner: AIP maintainers\nstatus: draft\nlanguage: en\neffective_from: 2026-10-24\nsources:\n  - title: NAIC Pet Insurance Model Act (#633)\n    url: https://content.naic.org/sites/default/files/model-law-633.pdf\n  - title: NAIC, states that adopted the Pet Insurance Model Act\n    url: https://content.naic.org/sites/default/files/model-law-state-page-633_1.pdf\n---\n\n# United States, pet insurance\n\nDraft. No lawyer and no regulator has reviewed this file. It adds to the file of the United States, for pet insurance only. Its rules apply in the states that adopted the NAIC Pet Insurance Model Act. When you do not know if the customer's state adopted it, follow the rules anyway: each one asks only for facts that the offer and the documents give. Each rule gives its source and its review status.\n\n## Who may sell\n\n1. A producer may not sell, solicit or negotiate pet insurance before it holds the licence and has completed the training on pet insurance. Source: NAIC Pet Insurance Model Act, s. 7. Not reviewed.\n\n## Documents before commitment\n\n1. Before the purchase, the insurer discloses the exclusions for pre-existing, hereditary, congenital or chronic conditions, the waiting periods, the deductibles and the limits, and whether the premium rises with the age of the pet or with claims. Show the customer each of these points from the offer and the documents. Source: NAIC Pet Insurance Model Act, s. 4. Not reviewed.\n\n## Withdrawal\n\n1. The customer can return a pet insurance policy within 15 days of receiving it, for a full refund, unless they filed a claim. Tell the customer this period. Source: NAIC Pet Insurance Model Act, s. 4B; for example Washington RCW 48.205.040(2)(a). Not reviewed.\n\n## Complaints\n\n1. The policy gives the contact details of the insurance department of the customer's state. Give them to the customer. Source: NAIC Pet Insurance Model Act, s. 4K. Not reviewed.\n",
      "url": "https://registry.example.com/rules/us/lines/pet/0.1.0.md",
      "skill_uri": "skill://agentic-insurance-protocol/references/countries/us/lines/pet.md"
    }
  ]
}
```

### Check a seller whose licence lapsed

*verify\_licence*

In the same sale in Texas, a licence applies per state, so the agent gives the state. The operator confirmed the agency's domain when it listed it. The Texas licence lapsed, and the Oklahoma licence does not cover a customer in Texas. The verdict is `not_licensed`, and the reason comes from the Texas entry.

```json spec/examples/registry-09-verify_licence.params.lapsed.json theme={null}
{
  "capacity": "distributor",
  "subject": {
    "domain": "agency.example.com"
  },
  "country": "US",
  "subdivision": "US-TX",
  "line": "pet"
}
```

```json spec/examples/registry-10-verify_licence.result.lapsed.json theme={null}
{
  "check_id": "chk-7b90",
  "params": {
    "capacity": "distributor",
    "subject": {
      "domain": "agency.example.com"
    },
    "country": "US",
    "subdivision": "US-TX",
    "line": "pet"
  },
  "subject": {
    "legal_name": "Example Pet Agency LLC",
    "domain": "agency.example.com",
    "domain_link": "confirmed",
    "listed": false
  },
  "licences": [
    {
      "country": "US",
      "register": "NIPR Producer Database",
      "identifier_type": "npn",
      "identifier": "00000000",
      "role": "agent",
      "categories": [
        "Property",
        "Casualty"
      ],
      "lines": [
        "home",
        "renters",
        "motor",
        "pet"
      ],
      "name_in_register": "EXAMPLE PET AGENCY LLC",
      "access": "api",
      "checked_at": "2026-10-21T15:40:00-05:00",
      "source_url": "https://nipr.com/",
      "regulator": "Texas Department of Insurance",
      "subdivisions": [
        "US-TX"
      ],
      "status": "lapsed",
      "register_status": "Inactive",
      "valid_until": "2026-08-31"
    },
    {
      "country": "US",
      "register": "NIPR Producer Database",
      "identifier_type": "npn",
      "identifier": "00000000",
      "role": "agent",
      "categories": [
        "Property",
        "Casualty"
      ],
      "lines": [
        "home",
        "renters",
        "motor",
        "pet"
      ],
      "name_in_register": "EXAMPLE PET AGENCY LLC",
      "access": "api",
      "checked_at": "2026-10-21T15:40:00-05:00",
      "source_url": "https://nipr.com/",
      "regulator": "Oklahoma Insurance Department",
      "subdivisions": [
        "US-OK"
      ],
      "status": "active",
      "register_status": "Active",
      "valid_until": "2027-05-31"
    }
  ],
  "outcome": {
    "verdict": "not_licensed",
    "reason": "licence_not_active",
    "message": "Example Pet Agency LLC holds no active licence in Texas. Its Texas licence ended on 31 August 2026. Its licence in Oklahoma is active, but it does not cover a customer in Texas."
  },
  "checked_at": "2026-10-21T15:40:01-05:00"
}
```

### Check the insurer

*verify\_licence*

Back in France, before it asks Alice any question, the agent checks Example Mutual, the insurer that `list_products` names in [`Product.provider`](https://docs.agenticinsuranceprotocol.org/0.1/reference#product). A provider check can use the register entry from [`Product.provider`](https://docs.agenticinsuranceprotocol.org/0.1/reference#product) alone. The ACPR register shows an active authorisation, so the verdict is `licensed`.

```json spec/examples/registry-11-verify_licence.params.provider.json theme={null}
{
  "capacity": "provider",
  "subject": {
    "identifier": {
      "country": "FR",
      "identifier_type": "lei",
      "identifier": "EXAMPLEMUTUAL0000042"
    }
  },
  "country": "FR",
  "line": "pet"
}
```

```json spec/examples/registry-12-verify_licence.result.provider.json theme={null}
{
  "check_id": "chk-4d3c",
  "params": {
    "capacity": "provider",
    "subject": {
      "identifier": {
        "country": "FR",
        "identifier_type": "lei",
        "identifier": "EXAMPLEMUTUAL0000042"
      }
    },
    "country": "FR",
    "line": "pet"
  },
  "subject": {
    "legal_name": "Example Mutual Assurances SA",
    "lei": "EXAMPLEMUTUAL0000042",
    "listed": false
  },
  "licences": [
    {
      "country": "FR",
      "regulator": "ACPR",
      "register": "REGAFI",
      "identifier_type": "lei",
      "identifier": "EXAMPLEMUTUAL0000042",
      "role": "insurer",
      "status": "active",
      "register_status": "Actif",
      "categories": [
        "Non-vie"
      ],
      "name_in_register": "EXAMPLE MUTUAL ASSURANCES SA",
      "access": "api",
      "source_date": "2026-10-19",
      "checked_at": "2026-10-20T10:00:20+02:00",
      "source_url": "https://www.regafi.fr/"
    }
  ],
  "outcome": {
    "verdict": "licensed",
    "message": "Example Mutual Assurances SA is in the ACPR register of insurers, and its authorisation is active."
  },
  "checked_at": "2026-10-20T10:00:21+02:00"
}
```

## 13. Checks

The repository checks the examples against `schema.json`, and against the registry rules that a JSON Schema cannot express:

* **RG1** a search returns only listed servers that match every param.
* **RG2** the verdict of a licence check follows from the entries it read and from the domain link.
* **RG3** every entry was read at most seven days before the verdict.
* **RG4** a licence check repeats the params of the call.
* **RG5** a check in a country where licences apply per subdivision gives the subdivision.
* **RG6** the front matter of a rules file matches the file.
* **RG7** the rules start with the file of the country.
* **RG8** the params of the registry tools hold no customer data.
* **RG9** a rules file that the registry serves is the same text as the file of the skill.
* **RG10** the licence check of a listed server in a search checks that server for the market of the search, and its verdict follows from entries read at most seven days before.

The listing steps, the order of the search results and the schedule of the checks are rules about how the operator works. A test of a live registry can check them. The examples cannot.

## 14. Open points

1. **Signed results.** A signature on each `verify_licence` result would let an agent prove later what the registry said, with no call to the registry. Draft 0.1 leaves signatures out. A later draft can add them, for example with a key that [`RegistrySettings`](https://docs.agenticinsuranceprotocol.org/0.1/reference#registrysettings) publishes.
2. **Reading a past check.** The registry keeps each result under its `check_id`, but no tool reads it back yet.
3. **Confirming a domain.** The operator confirms the link between a domain and a register entry with its own method. A later draft can define one channel for it, for example a code that the register or the regulator sends to the holder.
4. **Names and categories.** How the registry compares a name with the name in a register, and how it maps the categories of a register to lines, is the operator's method for now. The operator publishes it at `policy_url`.
5. **US states.** The rules files of the US states come later. The US file covers the common points and says that the rules differ by state.
6. **Data agreements.** The intermediaries of the United States, the United Kingdom and France need an agreement with NIPR, the FCA and ORIAS. The insurers of the United States need one with the NAIC. See [At launch](#9-1-at-launch).
7. **Registry address.** A test registry runs at `registry.agenticinsuranceprotocol.org`, with fictional register entries. The skill does not pin it yet, so an agent cannot tell the registry from a copy. A later draft says how the skill pins its address.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.