Draft 0.1
Worked example: pet insurance
Pages and sections
- 1. Find the distributor
- 2. Look for a product
- 3. Read the underwriting scope
- 4. Get the documents
- 5. Get the questions
- 6. Quote with partial answers
- 7. Get the missing fields
- 8. Quote with every answer
- 9. Compare indicative offers
- 10. Get a reason when there is no offer
- 11. Refuse a risk outside the scope
- 12. Ask Camille to validate the answers
- 13. Get a validation operation
- 14. Record the validation
- 15. Quote with the validation
- 16. Get binding offers
- 17. Apply
- 18. Get a PAP operation
- 19. Keep the evidence
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 and checks them against the schema and the rules on every push.
1.Find the distributor
get_distributor, result · 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.
{
"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
Camille lives in France and wants to insure her cat. The agent asks for the products that cover a pet in France.
{
"country": "FR",
"insured_family": "pet"
}
3.Read the underwriting scope
list_products, result · 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.
{
"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
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.
{
"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
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.
{
"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
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.
{
"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
The server lists what is missing. The agent asks Camille, and her vet clinic's record gives the date of birth.
{
"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
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.
{
"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
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.
{
"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
For a dog born in 2015, the insurer makes no offer and gives a stable reason code.
{
"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
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.
{
"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
Camille wants a firm price. The agent sends the answers and their sources for validation.
{
"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
The server returns a PAP operation. Its summary shows each answer and where it came from, and only Camille can approve it.
{
"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
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.
{
"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
The agent sends the same answers and sources with the validation.
{
"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
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.
{
"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
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.
{
"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
Nothing is committed yet. The server returns a PAP operation whose terms hold the whole application, and Camille must approve this revision.
{
"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
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.
{
"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"
}
}
}
}