Draft 0.1

Worked example: pet insurance

View as Markdown
Pages and sections
  1. 1. Find the distributor
  2. 2. Get the documents
  3. 3. Get the questions
  4. 4. Quote with partial answers
  5. 5. Get the missing fields
  6. 6. Quote with every answer
  7. 7. Compare the offers
  8. 8. Get a reason when there is no offer
  9. 9. Apply
  10. 10. Get a PAP operation
  11. 11. Keep the evidence
  12. 12. Add a dog

A broker, Example Pets, sells the pet insurance of an insurer, Example Mutual, in France. An agent quotes a cat called Miso for Camille Martin, applies, and later adds a dog to the policy. 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 4 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",
      "sectors": [
        "insurance"
      ],
      "categories": [
        "COA"
      ],
      "verification_url": "https://www.orias.fr/"
    }
  ],
  "countries": [
    "FR"
  ],
  "complaints_url": "https://pets.example.com/complaints",
  "ofap": {
    "version": "0.1",
    "conformance_level": 4,
    "interfaces": [
      "tools"
    ],
    "sectors": [
      "insurance"
    ],
    "lines": [
      "pet"
    ],
    "countries": [
      "FR"
    ],
    "can_conclude": false
  }
}

2.Get the documents

get_documents, result · examples/insurance-02-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
    }
  ]
}

3.Get the questions

get_question_set, result · examples/insurance-03-get_question_set.result.json

The questions come as a JSON Schema that builds on the insurance/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",
    "sector": "insurance",
    "line": "pet",
    "profile": "insurance/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"
      ]
    }
  }
}

4.Quote with partial answers

quote, params · examples/insurance-04-quote.params.partial.json

The agent quotes with the five answers it has.

{
  "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"
  },
  "language": "fr"
}

5.Get the missing fields

quote, result · examples/insurance-05-quote.result.needs_input.json

The server lists what is missing. The agent asks Camille.

{
  "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"
    }
  ]
}

6.Quote with every answer

quote, params · examples/insurance-06-quote.params.complete.json

The agent sends the full answers to the same question set version.

{
  "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
  },
  "language": "fr"
}

7.Compare the offers

quote, result · examples/insurance-07-quote.result.complete.json

Two offers, one per tier, in the same shape. answers_sha256 is the hash of the answers that the prices use.

{
  "status": "complete",
  "quote_request_id": "qr-7f3a",
  "question_set": {
    "question_set_id": "qs-pet-fr-essentiel",
    "version": "3"
  },
  "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
  "offers": [
    {
      "offer_id": "of-essentiel-70",
      "product_id": "pet-fr-essentiel",
      "sector": "insurance",
      "tier": "Essentiel 70",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer"
      },
      "indicative": false,
      "pricing": {
        "sector": "insurance",
        "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-essentiel-70"
    },
    {
      "offer_id": "of-essentiel-90",
      "product_id": "pet-fr-essentiel",
      "sector": "insurance",
      "tier": "Essentiel 90",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer"
      },
      "indicative": false,
      "pricing": {
        "sector": "insurance",
        "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-essentiel-90"
    }
  ]
}

8.Get a reason when there is no offer

quote, result · examples/insurance-08-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",
  "offers": [],
  "no_offer": {
    "reason_code": "age_not_accepted",
    "message": "Example Mutual does not start cover for a dog older than 9 years."
  }
}

9.Apply

submit_application, params · examples/insurance-09-submit_application.params.json

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

{
  "offer_id": "of-essentiel-70",
  "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
    },
    "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
    "accuracy_confirmed": true
  },
  "needs_assessment": {
    "sector": "insurance",
    "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"
}

10.Get a PAP operation

submit_application, result · examples/insurance-10-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-essentiel-70",
      "product_id": "pet-fr-essentiel",
      "sector": "insurance",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer"
      },
      "pricing": {
        "sector": "insurance",
        "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
        },
        "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
        "accuracy_confirmed": true
      },
      "needs_assessment": {
        "sector": "insurance",
        "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
  }
}

11.Keep the evidence

PAP operation, after confirmation · examples/insurance-11-operation.succeeded.json

Camille approves, and the agent confirms at the PAP operations endpoint. The operation succeeds and carries the evidence record, with the hash of the confirmed terms.

{
  "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-essentiel-70",
      "product_id": "pet-fr-essentiel",
      "sector": "insurance",
      "provider": {
        "name": "Example Mutual",
        "legal_name": "Example Mutual Assurances SA",
        "role": "insurer"
      },
      "pricing": {
        "sector": "insurance",
        "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
        },
        "answers_sha256": "3e9c2dddf3f4f8ea10c0cd851fc69b1c9d904e067b2ed3551fdd051ee792de67",
        "accuracy_confirmed": true
      },
      "needs_assessment": {
        "sector": "insurance",
        "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",
          "needs_assessment": {
            "sector": "insurance",
            "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": "20d1f65771484f5ede6dff46f793b821d6705cea266e3b91e3585d7bc7696dae"
        },
        "handoff_url": "https://pets.example.com/a/app-3310"
      }
    }
  }
}

12.Add a dog

amend_agreement, result · examples/insurance-12-amend_agreement.result.proposed.json

Later, Camille adds a dog. The premium changes and a subject is added, so Camille must approve this revision too.

{
  "operation": {
    "operation_id": "op-77d0",
    "revision": 1,
    "state": "proposed",
    "summary": "Add Pixel (beagle, born February 2025) from 1 December 2026. The premium goes from 14.90 to 31.20 EUR a month.",
    "terms": {
      "agreement_number": "EXP-2026-004812",
      "changes": [
        {
          "kind": "add_subject",
          "subject": {
            "subject_ref": "pet-2",
            "kind": "pet",
            "display_name": "Pixel",
            "attributes": {
              "species": "dog",
              "breed": "Beagle",
              "sex": "male",
              "is_neutered": false,
              "date_of_birth": "2025-02-10"
            }
          }
        }
      ],
      "effective_date": "2026-12-01",
      "pricing_before": {
        "sector": "insurance",
        "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"
      },
      "pricing_after": {
        "sector": "insurance",
        "premium": {
          "amount": {
            "amount": "31.20",
            "currency": "EUR"
          },
          "period": "month",
          "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"
      },
      "declaration": {
        "question_set": {
          "question_set_id": "qs-pet-fr-essentiel",
          "version": "3"
        },
        "answers": {
          "species": "dog",
          "breed": "Beagle",
          "sex": "male",
          "is_neutered": false,
          "date_of_birth": "2025-02-10"
        },
        "answers_sha256": "d9b538359cbe5f14a78bb6b38e7ec1e7a1c09a827e67e84b9864eb1131c428b0",
        "accuracy_confirmed": true
      },
      "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"
        }
      ]
    },
    "expires_at": "2026-11-20T12:00:00+01:00",
    "user_approval_required": true,
    "confirmation": null,
    "result": null
  }
}