# Worked example: pet insurance

A broker, Example Pets, sells the pet insurance of an insurer, Example Mutual, in France. An agent finds the product, quotes a cat called Miso for Camille Martin, has her validate the answers, and applies for the first binding offer. All companies, people and prices are fictional. The repository writes these files with [`scripts/examples.ts`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/scripts/examples.ts) and checks them against the [schema](https://agenticinsuranceprotocol.org/spec/0.1/reference) and the rules on every push.

## 1. Find the distributor

*get_distributor, result* · [`examples/insurance-01-get_distributor.result.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-01-get_distributor.result.json)

The agent asks who sells and under which licence. Example Pets is a broker in the ORIAS register, and it declares level 3 for pet insurance in France.

```json
{
  "legal_name": "Example Pets SAS",
  "trading_name": "Example Pets",
  "domain": "pets.example.com",
  "roles": [
    "broker"
  ],
  "licences": [
    {
      "country": "FR",
      "regulator": "ACPR",
      "register": "ORIAS",
      "identifier_type": "orias_number",
      "identifier": "00000000",
      "role": "broker",
      "categories": [
        "COA"
      ],
      "verification_url": "https://www.orias.fr/"
    }
  ],
  "countries": [
    "FR"
  ],
  "complaints_url": "https://pets.example.com/complaints",
  "aip": {
    "version": "0.1",
    "conformance_level": 3,
    "interfaces": [
      "tools"
    ],
    "lines": [
      "pet"
    ],
    "countries": [
      "FR"
    ],
    "can_conclude": false
  }
}
```

## 2. Look for a product

*list_products, params* · [`examples/insurance-02-list_products.params.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-02-list_products.params.json)

Camille lives in France and wants to insure her cat. The agent asks for the products that cover a pet in France.

```json
{
  "country": "FR",
  "insured_family": "pet"
}
```

## 3. Read the underwriting scope

*list_products, result* · [`examples/insurance-03-list_products.result.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-03-list_products.result.json)

The product publishes its scope before any question: France only, cats and dogs, and four conditions in plain words. The agent checks the conditions against what Camille said, and asks her when it is not sure.

```json
{
  "products": [
    {
      "product_id": "pet-fr-essentiel",
      "name": "Essentiel",
      "line": "pet",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer",
        "domain": "mutual.example.com",
        "lei": "EXAMPLEMUTUAL0000042",
        "licences": [
          {
            "country": "FR",
            "regulator": "ACPR",
            "register": "REGAFI",
            "identifier_type": "lei",
            "identifier": "EXAMPLEMUTUAL0000042",
            "role": "insurer",
            "verification_url": "https://www.regafi.fr/"
          }
        ]
      },
      "underwriting_scope": {
        "version": "2026-09",
        "geography": {
          "countries": [
            "FR"
          ]
        },
        "insured": [
          {
            "family": "pet",
            "kinds": [
              "cat",
              "dog"
            ]
          }
        ],
        "conditions": [
          "The pet lives with the subscriber, in France.",
          "The pet is identified by a microchip or a tattoo.",
          "Not for a dog of category 1 or 2 under French law (attack, guard and defence dogs).",
          "Not for a pet kept for breeding or for professional use."
        ]
      },
      "summary": "Pays back the vet costs of a cat or a dog after an accident or an illness, at 70% or 90%.",
      "details": {
        "cover": {
          "included": [
            "Accident",
            "Illness",
            "Surgery"
          ],
          "limits": [
            {
              "key": "vet_costs_per_year",
              "label": "Frais vétérinaires par an",
              "limit": {
                "amount": "1500.00",
                "currency": "EUR"
              },
              "reimbursement_rate": 0.7
            }
          ],
          "excess": {
            "amount": "0.00",
            "currency": "EUR"
          },
          "main_exclusions": [
            "Pre-existing conditions"
          ],
          "waiting_period_days": 45
        },
        "options": [
          {
            "key": "prevention",
            "label": "Forfait prévention",
            "price": {
              "amount": {
                "amount": "3.00",
                "currency": "EUR"
              },
              "period": "month",
              "taxes_included": true
            }
          }
        ]
      },
      "subscription_paths": [
        "application",
        "handoff"
      ]
    }
  ]
}
```

## 4. Get the documents

*get_documents, result* · [`examples/insurance-04-get_documents.result.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-04-get_documents.result.json)

Two documents must reach the customer before they commit: the IPID and the general conditions. Each one has a version and the hash of its file.

```json
{
  "documents": [
    {
      "document_id": "doc-ipid-pet-fr",
      "type": "ipid",
      "title": "IPID Example Pets Essentiel",
      "language": "fr",
      "version": "2026-09",
      "url": "https://pets.example.com/docs/ipid-essentiel-2026-09.pdf",
      "media_type": "application/pdf",
      "sha256": "fcc6278ba8b67d6258f56c9e5ce11ea5604bde5a49e005416e19891863b99a8d",
      "required_before_commitment": true
    },
    {
      "document_id": "doc-cg-pet-fr",
      "type": "general_conditions",
      "title": "Conditions générales",
      "language": "fr",
      "version": "2026-09",
      "url": "https://pets.example.com/docs/cg-2026-09.pdf",
      "media_type": "application/pdf",
      "sha256": "430aaae4bb2e758857c68516a6077a52c8f46031f445a3d082af80a0e5da2414",
      "required_before_commitment": true
    }
  ]
}
```

## 5. Get the questions

*get_question_set, result* · [`examples/insurance-05-get_question_set.result.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-05-get_question_set.result.json)

The questions come as a JSON Schema that builds on the `pet@0.1` profile. The microchip number is collected on the distributor's page, so the agent never asks for it.

```json
{
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3",
    "product_id": "pet-fr-essentiel",
    "line": "pet",
    "profile": "pet@0.1",
    "answers_schema": {
      "type": "object",
      "properties": {
        "country": {
          "type": "string",
          "pattern": "^[A-Z]{2}$",
          "x-profile-key": "country"
        },
        "postal_code": {
          "type": "string",
          "x-profile-key": "postal_code",
          "x-ask": "What is your postal code?"
        },
        "species": {
          "type": "string",
          "enum": [
            "dog",
            "cat"
          ],
          "x-profile-key": "species"
        },
        "pet_name": {
          "type": "string",
          "x-profile-key": "pet_name"
        },
        "breed": {
          "type": "string",
          "x-profile-key": "breed"
        },
        "sex": {
          "type": "string",
          "enum": [
            "female",
            "male"
          ],
          "x-profile-key": "sex"
        },
        "is_neutered": {
          "type": "boolean",
          "x-profile-key": "is_neutered"
        },
        "date_of_birth": {
          "type": "string",
          "format": "date",
          "x-profile-key": "date_of_birth"
        },
        "lifestyle": {
          "type": "string",
          "enum": [
            "indoor",
            "outdoor"
          ],
          "x-profile-key": "lifestyle"
        },
        "currently_insured": {
          "type": "boolean",
          "x-ask": "Is your pet insured with another company today?"
        },
        "microchip_number": {
          "type": "string",
          "x-collected-by": "distributor_page",
          "description": "Collected on the distributor's page after the quote."
        }
      },
      "required": [
        "country",
        "postal_code",
        "species",
        "pet_name",
        "breed",
        "sex",
        "is_neutered",
        "date_of_birth",
        "currently_insured"
      ]
    }
  }
}
```

## 6. Quote with partial answers

*quote, params* · [`examples/insurance-06-quote.params.partial.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-06-quote.params.partial.json)

The agent quotes with the five answers it has. Each answer has a source. Camille gave four of them, and the agent read the breed from her photo.

```json
{
  "product_id": "pet-fr-essentiel",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers": {
    "country": "FR",
    "postal_code": "69003",
    "species": "cat",
    "pet_name": "Miso",
    "breed": "European shorthair"
  },
  "answer_sources": {
    "country": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "postal_code": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "species": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "pet_name": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "breed": {
      "origin": "agent",
      "validated_by_customer": false
    }
  },
  "language": "fr"
}
```

## 7. Get the missing fields

*quote, result* · [`examples/insurance-07-quote.result.needs_input.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-07-quote.result.needs_input.json)

The server lists what is missing. The agent asks Camille, and her vet clinic's record gives the date of birth.

```json
{
  "status": "needs_input",
  "quote_request_id": "qr-7f3a",
  "missing_fields": [
    {
      "field": "sex",
      "issue": "missing"
    },
    {
      "field": "is_neutered",
      "issue": "missing"
    },
    {
      "field": "date_of_birth",
      "issue": "missing",
      "message": "An approximate date is fine."
    },
    {
      "field": "currently_insured",
      "issue": "missing"
    }
  ]
}
```

## 8. Quote with every answer

*quote, params* · [`examples/insurance-08-quote.params.complete.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-08-quote.params.complete.json)

The agent sends the full answers and their sources to the same question set version. The date of birth comes from a third party, named in `source_name`.

```json
{
  "product_id": "pet-fr-essentiel",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers": {
    "country": "FR",
    "postal_code": "69003",
    "species": "cat",
    "pet_name": "Miso",
    "breed": "European shorthair",
    "sex": "female",
    "is_neutered": true,
    "date_of_birth": "2023-04-01",
    "lifestyle": "indoor",
    "currently_insured": false
  },
  "answer_sources": {
    "country": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "postal_code": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "species": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "pet_name": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "breed": {
      "origin": "agent",
      "validated_by_customer": false
    },
    "sex": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "is_neutered": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "date_of_birth": {
      "origin": "third_party",
      "validated_by_customer": false,
      "source_name": "veterinary clinic record (FR)"
    },
    "lifestyle": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "currently_insured": {
      "origin": "customer",
      "validated_by_customer": true
    }
  },
  "language": "fr"
}
```

## 9. Compare indicative offers

*quote, result* · [`examples/insurance-09-quote.result.indicative.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-09-quote.result.indicative.json)

Two offers, one per tier, in the same shape. They are indicative, because Camille has not validated the answers yet. The two hashes cover the answers and their sources.

```json
{
  "status": "complete",
  "quote_request_id": "qr-7f3a",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
  "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d",
  "offers": [
    {
      "offer_id": "of-3c81",
      "product_id": "pet-fr-essentiel",
      "tier": "Essentiel 70",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer",
        "domain": "mutual.example.com",
        "lei": "EXAMPLEMUTUAL0000042",
        "licences": [
          {
            "country": "FR",
            "regulator": "ACPR",
            "register": "REGAFI",
            "identifier_type": "lei",
            "identifier": "EXAMPLEMUTUAL0000042",
            "role": "insurer",
            "verification_url": "https://www.regafi.fr/"
          }
        ]
      },
      "underwriting_scope_version": "2026-09",
      "indicative": true,
      "pricing": {
        "premium": {
          "amount": {
            "amount": "14.90",
            "currency": "EUR"
          },
          "period": "month",
          "taxes_included": true
        },
        "alternative_premiums": [
          {
            "amount": {
              "amount": "171.00",
              "currency": "EUR"
            },
            "period": "year",
            "taxes_included": true
          }
        ],
        "cover": {
          "included": [
            "Accident",
            "Illness",
            "Surgery"
          ],
          "limits": [
            {
              "key": "vet_costs_per_year",
              "label": "Frais vétérinaires par an",
              "limit": {
                "amount": "1500.00",
                "currency": "EUR"
              },
              "reimbursement_rate": 0.7
            }
          ],
          "excess": {
            "amount": "0.00",
            "currency": "EUR"
          },
          "main_exclusions": [
            "Pre-existing conditions"
          ],
          "waiting_period_days": 45
        },
        "options": [
          {
            "key": "prevention",
            "label": "Forfait prévention",
            "price": {
              "amount": {
                "amount": "3.00",
                "currency": "EUR"
              },
              "period": "month",
              "taxes_included": true
            }
          }
        ],
        "start_date": "2026-11-01"
      },
      "valid_until": "2026-11-19T23:59:59+01:00",
      "subscription_paths": [
        "application",
        "handoff"
      ],
      "handoff_url": "https://pets.example.com/q/of-3c81"
    },
    {
      "offer_id": "of-3c82",
      "product_id": "pet-fr-essentiel",
      "tier": "Essentiel 90",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer",
        "domain": "mutual.example.com",
        "lei": "EXAMPLEMUTUAL0000042",
        "licences": [
          {
            "country": "FR",
            "regulator": "ACPR",
            "register": "REGAFI",
            "identifier_type": "lei",
            "identifier": "EXAMPLEMUTUAL0000042",
            "role": "insurer",
            "verification_url": "https://www.regafi.fr/"
          }
        ]
      },
      "underwriting_scope_version": "2026-09",
      "indicative": true,
      "pricing": {
        "premium": {
          "amount": {
            "amount": "21.40",
            "currency": "EUR"
          },
          "period": "month",
          "taxes_included": true
        },
        "alternative_premiums": [
          {
            "amount": {
              "amount": "246.00",
              "currency": "EUR"
            },
            "period": "year",
            "taxes_included": true
          }
        ],
        "cover": {
          "included": [
            "Accident",
            "Illness",
            "Surgery"
          ],
          "limits": [
            {
              "key": "vet_costs_per_year",
              "label": "Frais vétérinaires par an",
              "limit": {
                "amount": "2500.00",
                "currency": "EUR"
              },
              "reimbursement_rate": 0.9
            }
          ],
          "excess": {
            "amount": "0.00",
            "currency": "EUR"
          },
          "main_exclusions": [
            "Pre-existing conditions"
          ],
          "waiting_period_days": 45
        },
        "options": [
          {
            "key": "prevention",
            "label": "Forfait prévention",
            "price": {
              "amount": {
                "amount": "3.00",
                "currency": "EUR"
              },
              "period": "month",
              "taxes_included": true
            }
          }
        ],
        "start_date": "2026-11-01"
      },
      "valid_until": "2026-11-19T23:59:59+01:00",
      "subscription_paths": [
        "application",
        "handoff"
      ],
      "handoff_url": "https://pets.example.com/q/of-3c82"
    }
  ]
}
```

## 10. Get a reason when there is no offer

*quote, result* · [`examples/insurance-10-quote.result.no_offer.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-10-quote.result.no_offer.json)

For a dog born in 2015, the insurer makes no offer and gives a stable reason code.

```json
{
  "status": "complete",
  "quote_request_id": "qr-8b21",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers_sha256": "49b096f890adbb6b541efdcd3987264a175976808541b51a6efd3e84cd620f2a",
  "answer_sources_sha256": "99a922bc4704f2ef8ea4df1f437780362a903248286a830f44ac3b907e31c7d9",
  "offers": [],
  "no_offer": {
    "reason_code": "age_not_accepted",
    "message": "Example Mutual does not start cover for a dog older than 9 years."
  }
}
```

## 11. Refuse a risk outside the scope

*quote, result* · [`examples/insurance-11-quote.result.outside_scope.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-11-quote.result.outside_scope.json)

A cat that lives in Belgium is outside the geography of the scope. An agent that follows the rules does not send this quote. The server refuses it anyway, with the reason `outside_underwriting_scope`.

```json
{
  "status": "complete",
  "quote_request_id": "qr-4e07",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers_sha256": "35f2482e9f503e31c5d088f55de1340495be6cef15616cd76885521753366e10",
  "answer_sources_sha256": "1754890bee6d12d2167b78df587c8c70f19522288eaa4c3d4b71e42549ee33ee",
  "offers": [],
  "no_offer": {
    "reason_code": "outside_underwriting_scope",
    "message": "Essentiel covers pets that live in France. Pixel lives in Belgium."
  }
}
```

## 12. Ask Camille to validate the answers

*validate_answers, params* · [`examples/insurance-12-validate_answers.params.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-12-validate_answers.params.json)

Camille wants a firm price. The agent sends the answers and their sources for validation.

```json
{
  "product_id": "pet-fr-essentiel",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers": {
    "country": "FR",
    "postal_code": "69003",
    "species": "cat",
    "pet_name": "Miso",
    "breed": "European shorthair",
    "sex": "female",
    "is_neutered": true,
    "date_of_birth": "2023-04-01",
    "lifestyle": "indoor",
    "currently_insured": false
  },
  "answer_sources": {
    "country": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "postal_code": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "species": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "pet_name": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "breed": {
      "origin": "agent",
      "validated_by_customer": false
    },
    "sex": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "is_neutered": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "date_of_birth": {
      "origin": "third_party",
      "validated_by_customer": false,
      "source_name": "veterinary clinic record (FR)"
    },
    "lifestyle": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "currently_insured": {
      "origin": "customer",
      "validated_by_customer": true
    }
  },
  "language": "en"
}
```

## 13. Get a validation operation

*validate_answers, result* · [`examples/insurance-13-validate_answers.result.proposed.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-13-validate_answers.result.proposed.json)

The server returns a PAP operation. Its summary shows each answer and where it came from, and only Camille can approve it.

```json
{
  "operation": {
    "operation_id": "op-2d71",
    "revision": 1,
    "state": "proposed",
    "summary": "Check Miso's answers before Example Mutual gives a firm price. You said: lives in France, postal code 69003, a female cat named Miso, spayed, stays indoors, not insured today. Your assistant read the breed from your photo, and you have not checked it yet: European shorthair. Your vet clinic's record gives the date of birth, and you have not checked it yet: 1 April 2023. If an answer is false, Example Mutual can refuse to pay a claim or cancel the cover.",
    "terms": {
      "product_id": "pet-fr-essentiel",
      "question_set": {
        "question_set_id": "qs-pet-fr-essentiel",
        "version": "3"
      },
      "answers": {
        "country": "FR",
        "postal_code": "69003",
        "species": "cat",
        "pet_name": "Miso",
        "breed": "European shorthair",
        "sex": "female",
        "is_neutered": true,
        "date_of_birth": "2023-04-01",
        "lifestyle": "indoor",
        "currently_insured": false
      },
      "answer_sources": {
        "country": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "postal_code": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "species": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "pet_name": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "breed": {
          "origin": "agent",
          "validated_by_customer": false
        },
        "sex": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "is_neutered": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "date_of_birth": {
          "origin": "third_party",
          "validated_by_customer": false,
          "source_name": "veterinary clinic record (FR)"
        },
        "lifestyle": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "currently_insured": {
          "origin": "customer",
          "validated_by_customer": true
        }
      },
      "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
      "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
    },
    "expires_at": "2026-10-20T10:30:00+02:00",
    "user_approval_required": true,
    "url": "https://pets.example.com/ops/op-2d71",
    "confirmation": null,
    "result": null
  }
}
```

## 14. Record the validation

*PAP operation, after confirmation* · [`examples/insurance-14-operation.validation.succeeded.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-14-operation.validation.succeeded.json)

Camille approves, and the agent confirms at the PAP operations endpoint. The server records who validated, when, and the hashes of the answers and their sources.

```json
{
  "operation": {
    "operation_id": "op-2d71",
    "revision": 1,
    "state": "succeeded",
    "summary": "Check Miso's answers before Example Mutual gives a firm price. You said: lives in France, postal code 69003, a female cat named Miso, spayed, stays indoors, not insured today. Your assistant read the breed from your photo, and you have not checked it yet: European shorthair. Your vet clinic's record gives the date of birth, and you have not checked it yet: 1 April 2023. If an answer is false, Example Mutual can refuse to pay a claim or cancel the cover.",
    "terms": {
      "product_id": "pet-fr-essentiel",
      "question_set": {
        "question_set_id": "qs-pet-fr-essentiel",
        "version": "3"
      },
      "answers": {
        "country": "FR",
        "postal_code": "69003",
        "species": "cat",
        "pet_name": "Miso",
        "breed": "European shorthair",
        "sex": "female",
        "is_neutered": true,
        "date_of_birth": "2023-04-01",
        "lifestyle": "indoor",
        "currently_insured": false
      },
      "answer_sources": {
        "country": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "postal_code": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "species": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "pet_name": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "breed": {
          "origin": "agent",
          "validated_by_customer": false
        },
        "sex": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "is_neutered": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "date_of_birth": {
          "origin": "third_party",
          "validated_by_customer": false,
          "source_name": "veterinary clinic record (FR)"
        },
        "lifestyle": {
          "origin": "customer",
          "validated_by_customer": true
        },
        "currently_insured": {
          "origin": "customer",
          "validated_by_customer": true
        }
      },
      "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
      "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
    },
    "user_approval_required": true,
    "url": "https://pets.example.com/ops/op-2d71",
    "confirmation": {
      "revision": 1,
      "approved_by": "user",
      "confirmed_at": "2026-10-20T10:04:10+02:00"
    },
    "result": {
      "summary": "Camille Martin validated the answers for Miso.",
      "data": {
        "validation": {
          "operation_id": "op-2d71",
          "revision": 1,
          "validated_at": "2026-10-20T10:04:10+02:00",
          "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
          "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
        }
      }
    }
  }
}
```

## 15. Quote with the validation

*quote, params* · [`examples/insurance-15-quote.params.validated.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-15-quote.params.validated.json)

The agent sends the same answers and sources with the validation.

```json
{
  "product_id": "pet-fr-essentiel",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers": {
    "country": "FR",
    "postal_code": "69003",
    "species": "cat",
    "pet_name": "Miso",
    "breed": "European shorthair",
    "sex": "female",
    "is_neutered": true,
    "date_of_birth": "2023-04-01",
    "lifestyle": "indoor",
    "currently_insured": false
  },
  "answer_sources": {
    "country": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "postal_code": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "species": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "pet_name": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "breed": {
      "origin": "agent",
      "validated_by_customer": false
    },
    "sex": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "is_neutered": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "date_of_birth": {
      "origin": "third_party",
      "validated_by_customer": false,
      "source_name": "veterinary clinic record (FR)"
    },
    "lifestyle": {
      "origin": "customer",
      "validated_by_customer": true
    },
    "currently_insured": {
      "origin": "customer",
      "validated_by_customer": true
    }
  },
  "validation": {
    "operation_id": "op-2d71",
    "revision": 1,
    "validated_at": "2026-10-20T10:04:10+02:00",
    "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
    "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
  },
  "language": "fr"
}
```

## 16. Get binding offers

*quote, result* · [`examples/insurance-16-quote.result.binding.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-16-quote.result.binding.json)

The answers are validated, so the offers are binding. Each one gives its excess and its limits, and the version of the scope it applied.

```json
{
  "status": "complete",
  "quote_request_id": "qr-7f3a",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
  "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d",
  "validation": {
    "operation_id": "op-2d71",
    "revision": 1,
    "validated_at": "2026-10-20T10:04:10+02:00",
    "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
    "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
  },
  "offers": [
    {
      "offer_id": "of-5d10",
      "product_id": "pet-fr-essentiel",
      "tier": "Essentiel 70",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer",
        "domain": "mutual.example.com",
        "lei": "EXAMPLEMUTUAL0000042",
        "licences": [
          {
            "country": "FR",
            "regulator": "ACPR",
            "register": "REGAFI",
            "identifier_type": "lei",
            "identifier": "EXAMPLEMUTUAL0000042",
            "role": "insurer",
            "verification_url": "https://www.regafi.fr/"
          }
        ]
      },
      "underwriting_scope_version": "2026-09",
      "indicative": false,
      "pricing": {
        "premium": {
          "amount": {
            "amount": "14.90",
            "currency": "EUR"
          },
          "period": "month",
          "taxes_included": true
        },
        "alternative_premiums": [
          {
            "amount": {
              "amount": "171.00",
              "currency": "EUR"
            },
            "period": "year",
            "taxes_included": true
          }
        ],
        "cover": {
          "included": [
            "Accident",
            "Illness",
            "Surgery"
          ],
          "limits": [
            {
              "key": "vet_costs_per_year",
              "label": "Frais vétérinaires par an",
              "limit": {
                "amount": "1500.00",
                "currency": "EUR"
              },
              "reimbursement_rate": 0.7
            }
          ],
          "excess": {
            "amount": "0.00",
            "currency": "EUR"
          },
          "main_exclusions": [
            "Pre-existing conditions"
          ],
          "waiting_period_days": 45
        },
        "options": [
          {
            "key": "prevention",
            "label": "Forfait prévention",
            "price": {
              "amount": {
                "amount": "3.00",
                "currency": "EUR"
              },
              "period": "month",
              "taxes_included": true
            }
          }
        ],
        "start_date": "2026-11-01"
      },
      "valid_until": "2026-11-19T23:59:59+01:00",
      "subscription_paths": [
        "application",
        "handoff"
      ],
      "handoff_url": "https://pets.example.com/q/of-5d10"
    },
    {
      "offer_id": "of-5d11",
      "product_id": "pet-fr-essentiel",
      "tier": "Essentiel 90",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer",
        "domain": "mutual.example.com",
        "lei": "EXAMPLEMUTUAL0000042",
        "licences": [
          {
            "country": "FR",
            "regulator": "ACPR",
            "register": "REGAFI",
            "identifier_type": "lei",
            "identifier": "EXAMPLEMUTUAL0000042",
            "role": "insurer",
            "verification_url": "https://www.regafi.fr/"
          }
        ]
      },
      "underwriting_scope_version": "2026-09",
      "indicative": false,
      "pricing": {
        "premium": {
          "amount": {
            "amount": "21.40",
            "currency": "EUR"
          },
          "period": "month",
          "taxes_included": true
        },
        "alternative_premiums": [
          {
            "amount": {
              "amount": "246.00",
              "currency": "EUR"
            },
            "period": "year",
            "taxes_included": true
          }
        ],
        "cover": {
          "included": [
            "Accident",
            "Illness",
            "Surgery"
          ],
          "limits": [
            {
              "key": "vet_costs_per_year",
              "label": "Frais vétérinaires par an",
              "limit": {
                "amount": "2500.00",
                "currency": "EUR"
              },
              "reimbursement_rate": 0.9
            }
          ],
          "excess": {
            "amount": "0.00",
            "currency": "EUR"
          },
          "main_exclusions": [
            "Pre-existing conditions"
          ],
          "waiting_period_days": 45
        },
        "options": [
          {
            "key": "prevention",
            "label": "Forfait prévention",
            "price": {
              "amount": {
                "amount": "3.00",
                "currency": "EUR"
              },
              "period": "month",
              "taxes_included": true
            }
          }
        ],
        "start_date": "2026-11-01"
      },
      "valid_until": "2026-11-19T23:59:59+01:00",
      "subscription_paths": [
        "application",
        "handoff"
      ],
      "handoff_url": "https://pets.example.com/q/of-5d11"
    }
  ]
}
```

## 17. Apply

*submit_application, params* · [`examples/insurance-17-submit_application.params.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-17-submit_application.params.json)

The agent applies for the first offer. It sends the parties, the validated declaration, the demands and needs, the documents it delivered and the contact consent.

```json
{
  "offer_id": "of-5d10",
  "parties": [
    {
      "party_ref": "p1",
      "kind": "person",
      "roles": [
        "subscriber",
        "insured",
        "payer"
      ],
      "display_name": "Camille Martin",
      "country_of_residence": "FR"
    }
  ],
  "declaration": {
    "question_set": {
      "question_set_id": "qs-pet-fr-essentiel",
      "version": "3"
    },
    "answers": {
      "country": "FR",
      "postal_code": "69003",
      "species": "cat",
      "pet_name": "Miso",
      "breed": "European shorthair",
      "sex": "female",
      "is_neutered": true,
      "date_of_birth": "2023-04-01",
      "lifestyle": "indoor",
      "currently_insured": false
    },
    "answer_sources": {
      "country": {
        "origin": "customer",
        "validated_by_customer": true
      },
      "postal_code": {
        "origin": "customer",
        "validated_by_customer": true
      },
      "species": {
        "origin": "customer",
        "validated_by_customer": true
      },
      "pet_name": {
        "origin": "customer",
        "validated_by_customer": true
      },
      "breed": {
        "origin": "agent",
        "validated_by_customer": false
      },
      "sex": {
        "origin": "customer",
        "validated_by_customer": true
      },
      "is_neutered": {
        "origin": "customer",
        "validated_by_customer": true
      },
      "date_of_birth": {
        "origin": "third_party",
        "validated_by_customer": false,
        "source_name": "veterinary clinic record (FR)"
      },
      "lifestyle": {
        "origin": "customer",
        "validated_by_customer": true
      },
      "currently_insured": {
        "origin": "customer",
        "validated_by_customer": true
      }
    },
    "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
    "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d",
    "accuracy_confirmed": true,
    "validation": {
      "operation_id": "op-2d71",
      "revision": 1,
      "validated_at": "2026-10-20T10:04:10+02:00",
      "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
      "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
    }
  },
  "needs_assessment": {
    "kind": "demands_and_needs",
    "statement": "Cover vet bills for an indoor cat, with a budget under 20 EUR a month.",
    "advice_given": false,
    "recorded_at": "2026-10-20T10:02:00+02:00"
  },
  "documents_delivered": [
    {
      "document_id": "doc-ipid-pet-fr",
      "version": "2026-09",
      "sha256": "fcc6278ba8b67d6258f56c9e5ce11ea5604bde5a49e005416e19891863b99a8d",
      "delivered_at": "2026-10-20T10:03:00+02:00"
    },
    {
      "document_id": "doc-cg-pet-fr",
      "version": "2026-09",
      "sha256": "430aaae4bb2e758857c68516a6077a52c8f46031f445a3d082af80a0e5da2414",
      "delivered_at": "2026-10-20T10:03:00+02:00"
    }
  ],
  "contact_consent": {
    "channels": [
      "email"
    ],
    "details_collected_by": "distributor_page",
    "providers_may_contact": false,
    "purposes": [
      "this_application"
    ]
  },
  "start_date": "2026-11-01"
}
```

## 18. Get a PAP operation

*submit_application, result* · [`examples/insurance-18-submit_application.result.proposed.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-18-submit_application.result.proposed.json)

Nothing is committed yet. The server returns a PAP operation whose terms hold the whole application, and Camille must approve this revision.

```json
{
  "operation": {
    "operation_id": "op-51c2",
    "revision": 1,
    "state": "proposed",
    "summary": "Apply for Essentiel 70 cat insurance for Miso with Example Mutual, 14.90 EUR a month from 1 November 2026. You finish on Example Pets' site.",
    "terms": {
      "offer_id": "of-5d10",
      "product_id": "pet-fr-essentiel",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer",
        "domain": "mutual.example.com",
        "lei": "EXAMPLEMUTUAL0000042",
        "licences": [
          {
            "country": "FR",
            "regulator": "ACPR",
            "register": "REGAFI",
            "identifier_type": "lei",
            "identifier": "EXAMPLEMUTUAL0000042",
            "role": "insurer",
            "verification_url": "https://www.regafi.fr/"
          }
        ]
      },
      "pricing": {
        "premium": {
          "amount": {
            "amount": "14.90",
            "currency": "EUR"
          },
          "period": "month",
          "taxes_included": true
        },
        "alternative_premiums": [
          {
            "amount": {
              "amount": "171.00",
              "currency": "EUR"
            },
            "period": "year",
            "taxes_included": true
          }
        ],
        "cover": {
          "included": [
            "Accident",
            "Illness",
            "Surgery"
          ],
          "limits": [
            {
              "key": "vet_costs_per_year",
              "label": "Frais vétérinaires par an",
              "limit": {
                "amount": "1500.00",
                "currency": "EUR"
              },
              "reimbursement_rate": 0.7
            }
          ],
          "excess": {
            "amount": "0.00",
            "currency": "EUR"
          },
          "main_exclusions": [
            "Pre-existing conditions"
          ],
          "waiting_period_days": 45
        },
        "options": [
          {
            "key": "prevention",
            "label": "Forfait prévention",
            "price": {
              "amount": {
                "amount": "3.00",
                "currency": "EUR"
              },
              "period": "month",
              "taxes_included": true
            }
          }
        ],
        "start_date": "2026-11-01"
      },
      "options": [],
      "start_date": "2026-11-01",
      "parties": [
        {
          "party_ref": "p1",
          "kind": "person",
          "roles": [
            "subscriber",
            "insured",
            "payer"
          ],
          "display_name": "Camille Martin",
          "country_of_residence": "FR"
        }
      ],
      "declaration": {
        "question_set": {
          "question_set_id": "qs-pet-fr-essentiel",
          "version": "3"
        },
        "answers": {
          "country": "FR",
          "postal_code": "69003",
          "species": "cat",
          "pet_name": "Miso",
          "breed": "European shorthair",
          "sex": "female",
          "is_neutered": true,
          "date_of_birth": "2023-04-01",
          "lifestyle": "indoor",
          "currently_insured": false
        },
        "answer_sources": {
          "country": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "postal_code": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "species": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "pet_name": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "breed": {
            "origin": "agent",
            "validated_by_customer": false
          },
          "sex": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "is_neutered": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "date_of_birth": {
            "origin": "third_party",
            "validated_by_customer": false,
            "source_name": "veterinary clinic record (FR)"
          },
          "lifestyle": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "currently_insured": {
            "origin": "customer",
            "validated_by_customer": true
          }
        },
        "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
        "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d",
        "accuracy_confirmed": true,
        "validation": {
          "operation_id": "op-2d71",
          "revision": 1,
          "validated_at": "2026-10-20T10:04:10+02:00",
          "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
          "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
        }
      },
      "needs_assessment": {
        "kind": "demands_and_needs",
        "statement": "Cover vet bills for an indoor cat, with a budget under 20 EUR a month.",
        "advice_given": false,
        "recorded_at": "2026-10-20T10:02:00+02:00"
      },
      "documents_delivered": [
        {
          "document_id": "doc-ipid-pet-fr",
          "version": "2026-09",
          "sha256": "fcc6278ba8b67d6258f56c9e5ce11ea5604bde5a49e005416e19891863b99a8d",
          "delivered_at": "2026-10-20T10:03:00+02:00"
        },
        {
          "document_id": "doc-cg-pet-fr",
          "version": "2026-09",
          "sha256": "430aaae4bb2e758857c68516a6077a52c8f46031f445a3d082af80a0e5da2414",
          "delivered_at": "2026-10-20T10:03:00+02:00"
        }
      ],
      "contact_consent": {
        "channels": [
          "email"
        ],
        "details_collected_by": "distributor_page",
        "providers_may_contact": false,
        "purposes": [
          "this_application"
        ]
      },
      "withdrawal_period_days": 14
    },
    "expires_at": "2026-10-20T11:00:00+02:00",
    "user_approval_required": true,
    "url": "https://pets.example.com/ops/op-51c2",
    "confirmation": null,
    "result": null
  }
}
```

## 19. Keep the evidence

*PAP operation, after confirmation* · [`examples/insurance-19-operation.application.succeeded.json`](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/examples/insurance-19-operation.application.succeeded.json)

Camille approves, and the agent confirms at the PAP operations endpoint. The operation succeeds and carries the evidence record: the hash of the confirmed terms, the hashes of the answers and their sources, the validation and the version of the scope.

```json
{
  "operation": {
    "operation_id": "op-51c2",
    "revision": 1,
    "state": "succeeded",
    "summary": "Apply for Essentiel 70 cat insurance for Miso with Example Mutual, 14.90 EUR a month from 1 November 2026. You finish on Example Pets' site.",
    "terms": {
      "offer_id": "of-5d10",
      "product_id": "pet-fr-essentiel",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer",
        "domain": "mutual.example.com",
        "lei": "EXAMPLEMUTUAL0000042",
        "licences": [
          {
            "country": "FR",
            "regulator": "ACPR",
            "register": "REGAFI",
            "identifier_type": "lei",
            "identifier": "EXAMPLEMUTUAL0000042",
            "role": "insurer",
            "verification_url": "https://www.regafi.fr/"
          }
        ]
      },
      "pricing": {
        "premium": {
          "amount": {
            "amount": "14.90",
            "currency": "EUR"
          },
          "period": "month",
          "taxes_included": true
        },
        "alternative_premiums": [
          {
            "amount": {
              "amount": "171.00",
              "currency": "EUR"
            },
            "period": "year",
            "taxes_included": true
          }
        ],
        "cover": {
          "included": [
            "Accident",
            "Illness",
            "Surgery"
          ],
          "limits": [
            {
              "key": "vet_costs_per_year",
              "label": "Frais vétérinaires par an",
              "limit": {
                "amount": "1500.00",
                "currency": "EUR"
              },
              "reimbursement_rate": 0.7
            }
          ],
          "excess": {
            "amount": "0.00",
            "currency": "EUR"
          },
          "main_exclusions": [
            "Pre-existing conditions"
          ],
          "waiting_period_days": 45
        },
        "options": [
          {
            "key": "prevention",
            "label": "Forfait prévention",
            "price": {
              "amount": {
                "amount": "3.00",
                "currency": "EUR"
              },
              "period": "month",
              "taxes_included": true
            }
          }
        ],
        "start_date": "2026-11-01"
      },
      "options": [],
      "start_date": "2026-11-01",
      "parties": [
        {
          "party_ref": "p1",
          "kind": "person",
          "roles": [
            "subscriber",
            "insured",
            "payer"
          ],
          "display_name": "Camille Martin",
          "country_of_residence": "FR"
        }
      ],
      "declaration": {
        "question_set": {
          "question_set_id": "qs-pet-fr-essentiel",
          "version": "3"
        },
        "answers": {
          "country": "FR",
          "postal_code": "69003",
          "species": "cat",
          "pet_name": "Miso",
          "breed": "European shorthair",
          "sex": "female",
          "is_neutered": true,
          "date_of_birth": "2023-04-01",
          "lifestyle": "indoor",
          "currently_insured": false
        },
        "answer_sources": {
          "country": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "postal_code": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "species": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "pet_name": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "breed": {
            "origin": "agent",
            "validated_by_customer": false
          },
          "sex": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "is_neutered": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "date_of_birth": {
            "origin": "third_party",
            "validated_by_customer": false,
            "source_name": "veterinary clinic record (FR)"
          },
          "lifestyle": {
            "origin": "customer",
            "validated_by_customer": true
          },
          "currently_insured": {
            "origin": "customer",
            "validated_by_customer": true
          }
        },
        "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
        "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d",
        "accuracy_confirmed": true,
        "validation": {
          "operation_id": "op-2d71",
          "revision": 1,
          "validated_at": "2026-10-20T10:04:10+02:00",
          "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
          "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
        }
      },
      "needs_assessment": {
        "kind": "demands_and_needs",
        "statement": "Cover vet bills for an indoor cat, with a budget under 20 EUR a month.",
        "advice_given": false,
        "recorded_at": "2026-10-20T10:02:00+02:00"
      },
      "documents_delivered": [
        {
          "document_id": "doc-ipid-pet-fr",
          "version": "2026-09",
          "sha256": "fcc6278ba8b67d6258f56c9e5ce11ea5604bde5a49e005416e19891863b99a8d",
          "delivered_at": "2026-10-20T10:03:00+02:00"
        },
        {
          "document_id": "doc-cg-pet-fr",
          "version": "2026-09",
          "sha256": "430aaae4bb2e758857c68516a6077a52c8f46031f445a3d082af80a0e5da2414",
          "delivered_at": "2026-10-20T10:03:00+02:00"
        }
      ],
      "contact_consent": {
        "channels": [
          "email"
        ],
        "details_collected_by": "distributor_page",
        "providers_may_contact": false,
        "purposes": [
          "this_application"
        ]
      },
      "withdrawal_period_days": 14
    },
    "user_approval_required": true,
    "url": "https://pets.example.com/ops/op-51c2",
    "confirmation": {
      "revision": 1,
      "approved_by": "user",
      "confirmed_at": "2026-10-20T10:05:12+02:00"
    },
    "result": {
      "summary": "Application received. Camille finishes on Example Pets' site.",
      "data": {
        "application_id": "app-3310",
        "evidence": {
          "record_id": "ev-90aa",
          "operation_id": "op-51c2",
          "revision": 1,
          "approved_by": "user",
          "confirmed_at": "2026-10-20T10:05:12+02:00",
          "documents_delivered": [
            {
              "document_id": "doc-ipid-pet-fr",
              "version": "2026-09",
              "sha256": "fcc6278ba8b67d6258f56c9e5ce11ea5604bde5a49e005416e19891863b99a8d",
              "delivered_at": "2026-10-20T10:03:00+02:00"
            },
            {
              "document_id": "doc-cg-pet-fr",
              "version": "2026-09",
              "sha256": "430aaae4bb2e758857c68516a6077a52c8f46031f445a3d082af80a0e5da2414",
              "delivered_at": "2026-10-20T10:03:00+02:00"
            }
          ],
          "question_set": {
            "question_set_id": "qs-pet-fr-essentiel",
            "version": "3"
          },
          "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
          "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d",
          "validation": {
            "operation_id": "op-2d71",
            "revision": 1,
            "validated_at": "2026-10-20T10:04:10+02:00",
            "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
            "answer_sources_sha256": "c888687248b688b77862bc408acb5e9284d8f18ade76d7b48373b1cb814a286d"
          },
          "underwriting_scope_version": "2026-09",
          "needs_assessment": {
            "kind": "demands_and_needs",
            "statement": "Cover vet bills for an indoor cat, with a budget under 20 EUR a month.",
            "advice_given": false,
            "recorded_at": "2026-10-20T10:02:00+02:00"
          },
          "contact_consent": {
            "channels": [
              "email"
            ],
            "details_collected_by": "distributor_page",
            "providers_may_contact": false,
            "purposes": [
              "this_application"
            ]
          },
          "terms_sha256": "ede419408847a2ab5875b2c291b33ed749fb9a8ebe9c6999368ab15b0259b242"
        },
        "handoff_url": "https://pets.example.com/a/app-3310"
      }
    }
  }
}
```

---

Licensed under the [Apache License 2.0](https://github.com/Agentic-Insurance-Foundation/agentic-insurance-protocol/blob/main/LICENSE).
