Draft 0.1

Worked example: pet insurance

View as Markdown
Pages and sections
  1. 1. Find the distributor
  2. 2. Look for a product
  3. 3. Read the underwriting scope
  4. 4. Get the documents
  5. 5. Get the questions
  6. 6. Quote with partial answers
  7. 7. Get the missing fields
  8. 8. Quote with every answer
  9. 9. Compare indicative offers
  10. 10. Get a reason when there is no offer
  11. 11. Refuse a risk outside the scope
  12. 12. Ask Camille to validate the answers
  13. 13. Get a validation operation
  14. 14. Record the validation
  15. 15. Quote with the validation
  16. 16. Get binding offers
  17. 17. Apply
  18. 18. Get a PAP operation
  19. 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"
      }
    }
  }
}