---
title: "Issue Policy"
url: "https://apipartners.mosaicinsurance.com/apis/trident-ap-is-beta/versions/018fd555-bac2-494f-872b-ac47b74f1e75/operations/orchestratePolicy"
---

> Full API specification: https://apipartners.mosaicinsurance.com/apis/trident-ap-is-beta/versions/018fd555-bac2-494f-872b-ac47b74f1e75.md

# Issue Policy

`POST` `/policy/issue`

Operation ID: `orchestratePolicy`

Runs the complete Mosaic submission pipeline (Shell → Full → Quote → Bind) in a single request, orchestrated by an internal state machine. **You send one payload — the platform handles all lifecycle stages internally.** There is no need to make separate calls for shell, full, quote, or bind. The shell step runs synchronously and returns `policyNo`, `policyKey`, and `policyActivityKey` in the response. The full, quote, and bind steps continue asynchronously — poll `GET /policies/orchestrate/{policyNo}/stepStatus` to track progress. ## Payload structure | Block | Purpose | Required? | |---|---|---| | `fullRequest` | Shell (account / policy / producer) + Full (underwriting) data | Yes | | `quoteRequest` | Pricing, sections, coverages, lines (includes bind-time & FON attributes per section/line) | Recommended | | `bindRequest` | Policy-level bind data (insured enrichment, sanction check, surplus broker, FON activity) | Recommended | ## Response timing The shell step typically completes within 35–40 seconds. Full, quote, and bind steps complete asynchronously.

## Header parameters

- `X-Origination-Source` (string, required) - Identifies the calling system or channel that originated this request. Used for traceability and auditing across the platform.
- `X-Audit-UserId` (string, required) - Identifier of the end user on whose behalf this request is made, recorded for audit trail purposes.

## Request body (required)

Content types: `application/json`

## Responses

- `202` - Base step succeeded; the full step is running asynchronously.
- `500` - Base step failed (4xx upstream error or 5xx after retries). Use POST /retry after investigation.

## OpenAPI definition

```yaml
openapi: 3.0.1
info:
  title: Trident APIs
  version: uat
servers:
  - url: https://apinonprod.mosaicinsurance.com
    description: Generated server url
paths:
  /policy/issue:
    post:
      security:
        - api_key: []
      tags:
        - Policy
      summary: Issue Policy
      description: >-
        Runs the complete Mosaic submission pipeline (Shell → Full → Quote →
        Bind) in a single request, orchestrated by an internal state machine.


        **You send one payload — the platform handles all lifecycle stages
        internally.** There is no need to make separate calls for shell, full,
        quote, or bind.


        The shell step runs synchronously and returns `policyNo`, `policyKey`,
        and `policyActivityKey` in the response. The full, quote, and bind steps
        continue asynchronously — poll `GET
        /policies/orchestrate/{policyNo}/stepStatus` to track progress.


        ## Payload structure


        | Block | Purpose | Required? |

        |---|---|---|

        | `fullRequest` | Shell (account / policy / producer) + Full
        (underwriting) data | Yes |

        | `quoteRequest` | Pricing, sections, coverages, lines (includes
        bind-time & FON attributes per section/line) | Recommended |

        | `bindRequest` | Policy-level bind data (insured enrichment, sanction
        check, surplus broker, FON activity) | Recommended |


        ## Response timing


        The shell step typically completes within 35–40 seconds. Full, quote,
        and bind steps complete asynchronously.
      operationId: orchestratePolicy
      parameters:
        - $ref: "#/components/parameters/XOriginationSource"
        - $ref: "#/components/parameters/XAuditUserId"
      requestBody:
        description: "Container carrying the submission bodies for the
          TridentGlobalSubmission state machine: `fullRequest` (required;
          includes shell+full data), `quoteRequest` (quote + merged
          section-level bind attributes, optional), and `bindRequest`
          (policy-level bind, no sections, optional). Each object is forwarded
          verbatim to its matching step — use the same JSON the standalone
          endpoints accept."
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/IssuePolicyRequest"
            examples:
              Complete Global Submission:
                summary: Example global submission with one quote section
                description: Complete Global Submission
                value:
                  fullRequest:
                    insured:
                      companyName: Veritas Capital Test 3
                      domicileCountry:
                        code: USA
                      domicileState:
                        code: NJ
                      mailingAddress1: 1123 Cedar Street
                      mailingAddressCity: Green Bay
                      email: noemail@example.com
                      zipCode: "75039"
                    producer:
                      id: "2000556"
                      contactliaison:
                        firstName: John
                        lastName: Smith
                        state:
                          code: UT
                        city:
                          description: Green Bay
                        region:
                          description: GBR
                        email: john.smith@broker.com
                        phoneNo: +1-212-555-0100
                        faxNo: +1-212-555-0101
                    policy:
                      effectiveDate: 2026-01-15
                      expiryDate: 2027-01-15
                      currency:
                        code: USD
                      product:
                        id: "4"
                      territory:
                        code: GBR
                    directAssumed:
                      id: "1"
                    typeOfBilling:
                      id: "1"
                    division:
                      id: "2"
                    writtenLine: 100
                    sectionIdentifier:
                      id: "1"
                    referenceType:
                      id: "2"
                    class:
                      code: CY
                    producingCompany:
                      id: "2"
                    typeOfPlacementBespoke:
                      id: "1"
                    underWriter:
                      id: "2001685"
                    producingUnderwriter:
                      id: "2001685"
                    mosaicOccupation:
                      id: "792"
                    revTurnover: 50000
                    lloydsIndustrialSector:
                      id: "10"
                    sBFClass:
                      id: "7"
                    policyDescription: UAT Test
                  quoteRequest:
                    summaryCurrency:
                      code: USD
                    typeOfCyberClauseStatus:
                      id: "1"
                    uSClassification:
                      id: "3"
                    uMR: B1234CYB2026020
                    noOfEmployees: 150
                    noOfPIIRecords: 300000
                    productTemplateSectionToAdd: Directors and Officers
                    bindProbability:
                      id: 5
                    sections:
                      - description: Cyber Liability Third Party
                        gELR: 50
                        typeOfLayer:
                          id: "1"
                        solvencyIIClass:
                          id: "13"
                        typeOfLimitBasis:
                          id: "82"
                        excess: 0
                        100%Limit: 1000000
                        aggregateLimit: 1000000
                        agreement:
                          agreement: AGR0000202
                          agreementActivity: AGR0000202-23-09
                          agreementSection: "1"
                        coverage:
                          - code: SPL
                            limitCurrency:
                              code: USD
                            limitOccurrence: 500000
                            limitAggregate: 500000
                            premium: 15000
                            premiumSplit%: 50
                            premiumCurrency:
                              code: USD
                            settlementCcy:
                              code: USD
                            premiumBasis:
                              id: "1"
                            typeofClaimBasis:
                              id: "3"
                        deduction:
                          - deduction:
                              id: "3"
                            deductionRate: 30
                            typeOfDeductionPayable:
                              id: "1"
                            amountOfPremium: 50
                          - deduction:
                              id: "53"
                            deductionRate: 20
                            typeOfDeductionPayable:
                              id: "2"
                            amountOfPremium: 50
                        deductible:
                          typeOfDeductible:
                            id: "24"
                          deductibleBasis:
                            id: "10"
                          allRiskDeductible: 1
                        conditions:
                          - typeOfClause:
                              id: "1"
                            clauseCode: LSW 3001
                            clauseTitle: Cyber affirmation clause
                            clauseNo: 2
                        reinstatements:
                          reinstatementsApplicable: true
                          unlimitedReinstatements: false
                          noOfReinstatements: 1
                          availableReinstatements: 1
                          proRata: true
                          reinstatementPercent: 100
                        regulatoryCoding:
                          - code: 1E
                            codeSplitPc: 50
                            overrideAgreementRiskCode: true
                        marketSplit:
                          - careerPercent: 60
                            carrier:
                              code: "1609"
                            carrierReference: MR-CYB-2026-001
                          - careerPercent: 25
                            carrier:
                              code: "2010"
                            carrierReference: MR-CYB-2026-002
                          - careerPercent: 15
                            carrier:
                              code: "2610"
                            carrierReference: MR-CYB-2026-002
                        riskAdjustedRateChange: 5
                        instalmentbasis:
                          id: "1"
                        paymentDays: 30
                      - description: Cyber Liability First Party
                        gELR: 50
                        typeOfLayer:
                          id: "1"
                        solvencyIIClass:
                          id: "13"
                        typeOfLimitBasis:
                          id: "84"
                        excess: 1000000
                        100%Limit: 1000000
                        aggregateLimit: 1000000
                        agreement:
                          agreement: AGR0000202
                          agreementActivity: AGR0000202-23-09
                          agreementSection: "1"
                        coverage:
                          - code: BRC
                            limitCurrency:
                              code: USD
                            limitOccurrence: 500000
                            limitAggregate: 500000
                            premium: 15000
                            premiumSplit%: 50
                            premiumCurrency:
                              code: USD
                            settlementCcy:
                              code: USD
                            premiumBasis:
                              id: "1"
                            typeofClaimBasis:
                              id: "5"
                          - code: NBI
                            limitCurrency:
                              code: USD
                            limitOccurrence: 500000
                            limitAggregate: 500000
                            premium: 15000
                            premiumSplit%: 50
                            premiumCurrency:
                              code: USD
                            settlementCcy:
                              code: USD
                            premiumBasis:
                              id: "1"
                            typeofClaimBasis:
                              id: "5"
                            waitingPeriodAmount: 25000
                            waitingPeriodMeasurement:
                              id: 14
                            waitingPeriodTime: 12
                        deduction:
                          - deduction:
                              id: "3"
                            deductionRate: 30
                            typeOfDeductionPayable:
                              id: "1"
                            amountOfPremium: 60
                          - deduction:
                              id: "53"
                            deductionRate: 20
                            typeOfDeductionPayable:
                              id: "2"
                            amountOfPremium: 40
                        deductible:
                          typeOfDeductible:
                            id: "25"
                          deductibleBasis:
                            id: "10"
                          allRiskDeductible: 1
                        conditions:
                          - typeOfClause:
                              id: "1"
                            clauseCode: CW3
                            clauseTitle: Type 3 Cyber War Clause
                            clauseNo: 2
                        reinstatements:
                          reinstatementsApplicable: true
                          unlimitedReinstatements: false
                          noOfReinstatements: 1
                          availableReinstatements: 1
                          proRata: true
                          reinstatementPercent: 80
                        regulatoryCoding:
                          - code: 1E
                            codeSplitPc: 50
                            overrideAgreementRiskCode: true
                        marketSplit:
                          - careerPercent: 60
                            carrier:
                              code: "1609"
                            carrierReference: MR-CYB-2026-001
                          - careerPercent: 25
                            carrier:
                              code: "2010"
                            carrierReference: MR-CYB-2026-002
                          - careerPercent: 15
                            carrier:
                              code: "2610"
                            carrierReference: MR-CYB-2026-002
                        riskAdjustedRateChange: 5
                        instalmentbasis:
                          id: "1"
                        paymentDays: 30
                      - description: Electronic Fraud
                        gELR: 50
                        typeOfLayer:
                          id: "1"
                        solvencyIIClass:
                          id: "13"
                        typeOfLimitBasis:
                          id: "17"
                        excess: 0
                        100%Limit: 1000000
                        aggregateLimit: 1000000
                        agreement:
                          agreement: AGR0000202
                          agreementActivity: AGR0000202-23-09
                          agreementSection: "1"
                        coverage:
                          - code: FFT
                            limitCurrency:
                              code: USD
                            limitOccurrence: 500000
                            limitAggregate: 500000
                            premium: 15000
                            premiumSplit%: 50
                            premiumCurrency:
                              code: USD
                            settlementCcy:
                              code: USD
                            premiumBasis:
                              id: "1"
                            typeofClaimBasis:
                              id: "4"
                        deduction:
                          - deduction:
                              id: "3"
                            deductionRate: 30
                            typeOfDeductionPayable:
                              id: "1"
                            amountOfPremium: 50
                          - deduction:
                              id: "53"
                            deductionRate: 20
                            typeOfDeductionPayable:
                              id: "2"
                            amountOfPremium: 50
                        deductible:
                          typeOfDeductible:
                            id: "24"
                          deductibleBasis:
                            id: "1"
                          allRiskDeductible: 1
                        conditions:
                          - typeOfClause:
                              id: "1"
                            clauseCode: CW3
                            clauseCondition: Type 3 Cyber War Clause
                            clauseNo: 2
                        reinstatements:
                          reinstatementsApplicable: true
                          unlimitedReinstatements: false
                          noOfReinstatements: 1
                          availableReinstatements: 1
                          proRata: true
                          reinstatementPercent: 100
                        regulatoryCoding:
                          - code: 1E
                            codeSplitPc: 50
                            overrideAgreementRiskCode: true
                        marketSplit:
                          - careerPercent: 60
                            carrier:
                              code: "1609"
                            carrierReference: MR-CYB-2026-001
                          - careerPercent: 25
                            carrier:
                              code: "2010"
                            carrierReference: MR-CYB-2026-002
                          - careerPercent: 15
                            carrier:
                              code: "2610"
                            carrierReference: MR-CYB-2026-002
                        riskAdjustedRateChange: 5
                        instalmentbasis:
                          id: "1"
                        paymentDays: 30
                      - description: TRIA
                        gELR: 50
                        typeOfLayer:
                          id: "1"
                        solvencyIIClass:
                          id: "13"
                        typeOfLimitBasis:
                          id: "84"
                        excess: 0
                        100%Limit: 1000000
                        aggregateLimit: 1000000
                        agreement:
                          agreement: AGR0000202
                          agreementActivity: AGR0000202-23-09
                          agreementSection: "1"
                        coverage:
                          - code: TRI
                            limitCurrency:
                              code: USD
                            limitOccurrence: 500000
                            limitAggregate: 500000
                            premium: 15000
                            premiumSplit%: 50
                            premiumCurrency:
                              code: USD
                            settlementCcy:
                              code: USD
                            premiumBasis:
                              id: "1"
                            typeofClaimBasis:
                              id: "3"
                        deduction:
                          - deduction:
                              id: "3"
                            deductionRate: 30
                            typeOfDeductionPayable:
                              id: "1"
                            amountOfPremium: 50
                          - deduction:
                              id: "53"
                            deductionRate: 20
                            typeOfDeductionPayable:
                              id: "2"
                            amountOfPremium: 50
                        deductible:
                          typeOfDeductible:
                            id: "25"
                          deductibleBasis:
                            id: "10"
                          allRiskDeductible: 1
                        conditions:
                          - typeOfClause:
                              id: "1"
                            clauseCode: LSW 3001
                            clauseCondition: Cyber affirmation clause
                            clauseNo: 2
                        reinstatements:
                          reinstatementsApplicable: true
                          unlimitedReinstatements: false
                          noOfReinstatements: 1
                          availableReinstatements: 1
                          proRata: true
                          reinstatementPercent: 100
                        regulatoryCoding:
                          - code: 1E
                            codeSplitPc: 50
                            overrideAgreementRiskCode: true
                        marketSplit:
                          - careerPercent: 60
                            carrier:
                              code: "1609"
                            carrierReference: MR-CYB-2026-001
                          - careerPercent: 25
                            carrier:
                              code: "2010"
                            carrierReference: MR-CYB-2026-002
                          - careerPercent: 15
                            carrier:
                              code: "2610"
                            carrierReference: MR-CYB-2026-002
                        riskAdjustedRateChange: 5
                        instalmentbasis:
                          id: "1"
                        paymentDays: 30
                    lines:
                      - underWriter:
                          id: "2001685"
                        typeOfBilling:
                          id: "1"
                        division:
                          id: "2"
                        writtenLine: 100
                        sBFClass:
                          id: "7"
                        producingUnderwriter:
                          id: "2001685"
                        ourRole:
                          id: "1"
                        bureauLead:
                          id: "1"
                        leadingInsurer:
                          id: "1"
                        lloydsPlatform:
                          id: "1"
                        isThirdPartyCapacityDeployed: true
                        syndicateCapitalManagement:
                          code: ACR
                        signedLinePercentage: 100
                        claimsAgreementParty: true
                        defenseCostsCovered:
                          id: "1"
                        actualDateWritten: 2026-02-15
                        dateSigned: 2026-02-15
                        policyLineReferenceOverride: PCY1051126AA
                  bindRequest:
                    prebindSanctionCheckComplete: true
                    obligor:
                      id: "2055225"
                    territory:
                      code: USA
                    typeofRIBasis:
                      id: "1"
                    tailEffectiveDate: 2026-01-01
                    priorPending: 2026-01-01
                    priorActs: true
                    retroactiveDate: 2026-01-01
                    insured:
                      occupationSource:
                        id: "5"
                      occupation:
                        code: "541211"
                      issuanceAddressSameAsInsured: true
                      policyholderType:
                        id: "2"
                      assetsUnderManagement: "5000000"
                      assetSize: 100000
                      mailingAddressTo: Test
                      mailingAddress1: 1123 Cedar Street
                      mailingAddress2: 1123 Cedar Street
                      mailingAddressCity: Green Bay
                      "mailingAddressState ":
                        code: "472"
                      mailingAddressPostCode: "75039"
                      canadianBusinessNumber: 123456789RC0001
                      taxIdPortugal: "501964843"
                      taxIdItaly: "12345678901"
                      taxIdSpain: B12345678
                      fein: 12-3456789
                      webSite: www.test.com
                    surplusBroker:
                      id: "2005760"
                      typeOfAdmitted:
                        id: "2"
                      brokerLicense: SL-CA-12345
                      producerHomeState:
                        code: CA
                      slaNumber: AB123-26-00001
                    fon:
                      fonDate: 2026-01-01
                      jurisdictionCountry:
                        code: USA
                      jurisdictionState:
                        code: NJ
                      riskRegulatoryLocation:
                        code: USA
                    programs:
                      - programKey:
                          id: "10"
                      - programKey:
                          id: "11"
                    peerReviewRequest:
                      checkedBy:
                        id: 545
                      checkedDate: 2026-09-10
        required: true
      responses:
        "202":
          description: Base step succeeded; the full step is running asynchronously.
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
            Access-Control-Allow-Methods:
              schema:
                type: string
            Access-Control-Allow-Headers:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GlobalSubmissionResponse"
              examples:
                Base Step Succeeded:
                  summary: Base step succeeded
                  description: Base Step Succeeded
                  value:
                    submissionId: 9b3f7c1c-1f0a-4e2d-9d7c-2e3a8b4c6d2e
                    policyNo: Q0038456
                    policyKey: "20894"
                    policyActivityKey: "45632"
                    status: ACCEPTED
                    message: Base submission succeeded. Full, quote and bind steps are running
                      asynchronously.
        "500":
          description: Base step failed (4xx upstream error or 5xx after retries). Use
            POST /retry after investigation.
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
            Access-Control-Allow-Methods:
              schema:
                type: string
            Access-Control-Allow-Headers:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GlobalSubmissionResponse"
              examples:
                Base Step Failed:
                  summary: Base step failed
                  description: Base Step Failed
                  value:
                    submissionId: 9b3f7c1c-1f0a-4e2d-9d7c-2e3a8b4c6d2e
                    status: FAILED
                    message: "Base step failed: base /v1/trident/submission/base -> 500: ..."
security:
  - api_key: []
components:
  parameters:
    XOriginationSource:
      name: X-Origination-Source
      in: header
      required: true
      description: Identifies the calling system or channel that originated this
        request. Used for traceability and auditing across the platform.
      schema:
        type: string
      example: S01x
    XAuditUserId:
      name: X-Audit-UserId
      in: header
      required: true
      description: Identifier of the end user on whose behalf this request is made,
        recorded for audit trail purposes.
      schema:
        type: string
      example: jsmith
  schemas:
    IssuePolicyRequest:
      type: object
      description: >-
        Single-call submission payload. Combines Shell + Full + Quote + Bind
        data so external consumers send everything once — the platform executes
        each stage internally in sequence.


        `fullRequest` is required and carries the insured/policy/producer
        identifiers (shell) plus underwriting enrichment (full). `quoteRequest`
        carries all pricing, section, and line data, including bind-time
        attributes for each section and line. `bindRequest` carries the
        policy-level bind attributes that are not tied to a specific section or
        line.
      required:
        - fullRequest
      properties:
        fullRequest:
          allOf:
            - $ref: "#/components/schemas/FullRequest"
          description: >-
            **Required.** Shell (Step 1) and Full (Step 2) data combined.


            **Required fields:** `underWriter` (id), `revTurnover`.


            **Required shell fields (first submission):** `insured`, `producer`,
            `policy` (effectiveDate, expiryDate, currency, product, territory),
            `directAssumed`, `typeOfBilling`, `division`, `writtenLine`,
            `sectionIdentifier`, `referenceType`, `typeOfPlacementBespoke`.


            Optional fields: `producingUnderwriter` (id), `producingCompany`
            (id), `lloydsIndustrialSector` (id).


            Per-line fields (`ourRole`, `signedLinePercentage`) belong in
            `quoteRequest.lines[]`.
        quoteRequest:
          allOf:
            - $ref: "#/components/schemas/QuoteRequest"
          description: >-
            Quote, FON, and bind attributes at the section and line level.


            **Required quote fields:** `sections` (array, at least one),
            `summaryCurrency` (code), `typeOfCyberClauseStatus` (id),
            `uSClassification` (id).


            Each entry in `sections[]` carries coverage lines, deductions,
            deductibles, reinstatements, regulatory coding, and bind-time
            attributes (instalmentbasis, paymentDays, premiumBasis,
            typeofClaimBasis).


            Each entry in `lines[]` represents an **agency** line and carries
            submission fields (underWriter, typeOfBilling, division,
            writtenLine, producingCompany, sBFClass), quote fields (ourRole,
            signedLinePercentage, producingUnderwriter, lloydsPlatform,
            bureauLead, isThirdPartyCapacityDeployed), FON fields
            (brokerOrderPercent, signedOrderPercent, policyLineReference), and
            bind fields (claimsAgreementParty, defenseCostsCovered,
            leaderPercent, leaderReference, actualDateWritten, dateSigned,
            policyLineReferenceOverride). Syndicate lines and derived fields
            (originating division/office, global-risk cross-reference, inclusive
            line) are handled by Trident.
        bindRequest:
          allOf:
            - $ref: "#/components/schemas/BindRequest"
          description: >-
            Policy-level bind attributes — 


            **Key required fields:** `prebindSanctionCheckComplete`.


            Supply `insured` for bind-time enrichment (occupation, mailing
            address, TINs). Supply `surplusBroker` when risk premium originates
            from the United States. Supply `fon` for FON activity attributes (CY
            LOB only).


            `claimsAgreementParty` is a per-line attribute — supply it on each
            entry in `quoteRequest.lines[]`, not here.


            Section/line attributes (premiumBasis, typeofClaimBasis,
            instalmentbasis, leaderPercent, etc.) are carried in `quoteRequest`
            — not repeated here.
    GlobalSubmissionResponse:
      type: object
      description: Minimal response returned after the base Step Function completes.
      properties:
        submissionId:
          type: string
          format: uuid
          description: Correlation id for tracing the background full + quote executions
            in logs
          example: 9b3f7c1c-1f0a-4e2d-9d7c-2e3a8b4c6d2e
        policyNo:
          type: string
          description: Policy number produced by the base submission step
          example: Q0038456
        policyKey:
          type: string
          description: Policy key produced by the base submission step, propagated to the
            async steps
          example: "20894"
        policyActivityKey:
          type: string
          description: Policy activity key produced by the base submission step
          example: "45632"
        status:
          type: string
          enum:
            - ACCEPTED
            - FAILED
          description: ACCEPTED means the full step is running in background; FAILED means
            the base step failed
          example: ACCEPTED
        message:
          type: string
          description: Human-readable message
          example: Base submission succeeded. The full step is running asynchronously.
    FullRequest:
      type: object
      description: >-
        Combines Shell (Step 1) and Full (Step 2) submission data.


        **Required:** `underWriter` (id), `revTurnover`.


        Shell fields (`insured`, `producer`, `policy`, `directAssumed`,
        `typeOfBilling`, `division`, `writtenLine`, `sectionIdentifier`,
        `referenceType`, `typeOfPlacementBespoke`, `class`) are required on
        first submission and optional on subsequent re-submissions (already on
        the draft).


        Optional fields: `producingUnderwriter` (id), `producingCompany` (id),
        `lloydsIndustrialSector` (id), `marketSource` (id).


        Per-line fields (`ourRole`, `signedLinePercentage`) are set via
        `lines[]` in `quoteRequest`.
      required:
        - insured
        - producer
        - policy
        - directAssumed
        - typeOfBilling
        - division
        - writtenLine
        - sectionIdentifier
        - referenceType
        - typeOfPlacementBespoke
        - underWriter
        - mosaicOccupation
        - revTurnover
      properties:
        underWriter:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Underwriter who submitted the risk request — `id`
            only. Must be the underwriter with authority to write the business.
            Source: underwriter's email or document."
        mosaicOccupation:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Mosaic occupation — `id` only. Required for all
            LOBs. Source: insured occupation lookup."
        producingCompany:
          $ref: "#/components/schemas/IdReference"
          description: "**Conditional.** Producing company — id only. Required when
            division is Mosaic Asta Europe (MAE)."
          x-conditional-required: Required when division is Mosaic Asta Europe (MAE).
        lloydsIndustrialSector:
          $ref: "#/components/schemas/IdReference"
          description: "**Conditional.** Lloyd's Industrial Sector override — id only.
            Required for all LOBs. When supplied, takes precedence over the
            server's automatic derivation (UC8). Leave blank to allow automatic
            derivation."
          x-conditional-required: Required for all LOBs. Leave blank to allow automatic derivation.
        revTurnover:
          type: integer
          minimum: 0
          format: int32
          description: "**Required.** Insured's annual revenue or turnover (numeric).
            Required for CY, FI, PL and Casualty LOBs. Source: booking sheet or
            Tyche rater. Update if a more accurate figure is available at quote
            stage."
          example: 0
        insured:
          $ref: "#/components/schemas/SubmissionInsured"
          description: "**Required.** Insured details — use `insureContacts.id` for an
            existing contact, or supply `companyName` + domicile fields for a
            new insured."
        producer:
          $ref: "#/components/schemas/SubmissionProducer"
          description: "**Required.** Producer (broker) reference. Supply `id` (producer
            `id` only). Optionally include a `contactliaison` block to attach,
            create, or update the broker contact liaison recorded on the policy
            (see ContactLiaisonSubmission)."
        policy:
          $ref: "#/components/schemas/SubmissionPolicy"
          description: "**Required.** Policy node (dates, currency, product, territory)."
        directAssumed:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Business type — `id` only (Direct or Assumed)."
        typeOfBilling:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** `id` only."
        division:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** `id` only."
        writtenLine:
          type: integer
          minimum: 1
          format: int32
          description: Written line percentage (numeric, e.g. 100). Default to 100 if not
            specified by the underwriter. If provided, enter the value from the
            underwriter’s email or document. For Agency Share %, enter the
            agency percentage here. Can be updated at any stage.
          example: 100
        policyDescription:
          type: string
          description: Optional. Free-text policy description. Defaulted/derived
            server-side when omitted.
          example: Cyber primary 2026 renewal
        sectionIdentifier:
          $ref: "#/components/schemas/SectionIdentifierRef"
          description: "**Required.** Section identifier — `id` only (1 = C&C, 2 = Non
            C&C)."
        referenceType:
          $ref: "#/components/schemas/ReferenceTypeRef"
          description: "**Required.** Reference type — `id` only (1 = EEA, 2 = Non-EEA, 3
            = Both)."
        class:
          $ref: "#/components/schemas/CodeReference"
          description: 'Optional. Risk class — `code` only (e.g. `{ "code": "CY" }`).'
        typeOfPlacementBespoke:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Mosaic MOP / bespoke type of placement — `id` only."
        producingUnderwriter:
          $ref: "#/components/schemas/IdReference"
          description: "**Optional.** Producing underwriter — `id` only. The underwriter
            who produced this submission."
        marketSource:
          $ref: "#/components/schemas/IdReference"
          description: Optional. Market source — `id` only.
    QuoteRequest:
      type: object
      description: Request body for POST /policies/quote — Step 3 of the submission
        lifecycle.
      required:
        - sections
        - summaryCurrency
        - typeOfCyberClauseStatus
        - uSClassification
      properties:
        summaryCurrency:
          $ref: "#/components/schemas/CodeReference"
          description: '**Required.** Summary (reporting) currency — `code` only (e.g. `{
            "code": "USD" }`).'
        typeOfCyberClauseStatus:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Type of Cyber clause status — `id` only. Enter Cyber
            clause details per the quote document. Leave blank if not available
            at quote stage."
        uSClassification:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** US classification — `id` only. Source: fiscal and
            regulatory section of the slip. Select 'Regulated' or
            'Non-Regulated' when risk originates from the United States. Select
            'Non-Regulated' when the risk does not originate from the United
            States. Leave blank if details are not yet available at quote stage
            (do not query)."
        uMR:
          type: string
          description: "Unique Market Reference. Required. Source: risk details section of
            the UK slip. Leave blank if not yet available."
          example: B1234CYB2026001
        noOfEmployees:
          type: integer
          format: int32
          example: 250
          description: "Number of employees. **Required for CY, FI and PL LOBs.** Source:
            submission documentation or rater."
        noOfPIIRecords:
          type: integer
          format: int64
          example: 100000
          description: "Number of Personally Identifiable Information (PII) records held
            by the insured. **Required for CY LOB.** Source: submission
            documentation."
        productTemplateSectionToAdd:
          type: string
          description: This is section description as configured in XFI. Required to
            create section in XFI. Non-business field managed by orchestration
            layer.
          example: Directors and Officers
        bindProbability:
          type: string
          description: Bind probability expressed as a percentage string (e.g. '100%').
            Indicates the likelihood the risk will proceed to bind. Supplied by
            the underwriter or front-end.
          example: 100%
        majorPeril:
          type: string
          description: Major peril description (e.g. 'Cyber Property'). Server-derived
            from the risk’s class; supply if known, otherwise leave blank for
            automatic derivation.
          example: Cyber Property
        sections:
          type: array
          description: "**Required.** One or two section objects. Each section represents
            one complete policy (all its layers/coverages grouped under the
            section for one agency entity). Supply **one section** for non-EEA
            risks (main Agency); supply **two sections** when the risk has an
            EEA component (main Agency + Mosaic Asta Europe). Each section must
            carry a `division.id` matching its corresponding `lines[]` entry.
            Trident uses the `division.id` per section to determine which XFI
            syndicate lines to associate via `sectionIncluded`: agency division
            → 1609+2610 lines; MAE division (7) → 5399+5431 lines. Bind-time
            attributes (instalmentbasis, paymentDays, premiumBasis,
            typeofClaimBasis) are included here."
          items:
            $ref: "#/components/schemas/Section"
        lines:
          type: array
          description: One entry per **agency** underwriting line (main Agency line; plus
            a Mosaic Asta Europe agency line when the risk has an EEA
            component). Each line carries submission fields (underWriter,
            typeOfBilling, division, writtenLine, producingCompany, sBFClass),
            quote fields (ourRole, signedLinePercentage, producingUnderwriter,
            lloydsPlatform, bureauLead, isThirdPartyCapacityDeployed,
            syndicateCapitalManagement, leadingInsurer), FON fields
            (brokerOrderPercent, signedOrderPercent), and bind fields
            (claimsAgreementParty, defenseCostsCovered, leaderPercent,
            leaderReference, actualDateWritten, dateSigned,
            policyLineReferenceOverride). Trident creates and populates the
            syndicate lines (1609/2610/5399/5431) internally; the front end does
            NOT send them. Derived fields (originating division/office,
            global-risk cross-reference, inclusive line) are computed by
            Trident.
          items:
            $ref: "#/components/schemas/Line"
    BindRequest:
      type: object
      description: >-
        Policy-level bind attributes. Supply everything that does not belong to
        a specific section or line.


        **Key required fields:** `prebindSanctionCheckComplete`.


        `claimsAgreementParty` is a per-line attribute — supply it on each entry
        in `quoteRequest.lines[]`, not here (XFI only exposes it at the
        policy-line level).


        Section/line attributes (premiumBasis, typeofClaimBasis,
        instalmentbasis, leaderPercent, etc.) are carried in `quoteRequest` —
        not repeated here.


        The optional `fon` block carries FON-stage policy-activity attributes
        (CY LOB only). The optional `surplusBroker` block is required for
        US-origin risks.
      properties:
        prebindSanctionCheckComplete:
          type: boolean
          description: "**Required.** Confirms the pre-bind sanction check has been
            completed. Set to `true` before proceeding to bind. The submission
            will be rejected if this check has not been completed."
          example: true
        obligor:
          $ref: "#/components/schemas/IdReference"
          description: Obligor contact reference — `id` only.
        majorPeril:
          $ref: "#/components/schemas/IdReference"
          description: Major peril classification — `id` only. Server-derived from the
            risk’s class; supply here to override the derivation.
        territory:
          $ref: "#/components/schemas/CodeReference"
          description: 'Territory of the risk — `code` only (e.g. `{ "code": "USA" }`).
            Represents the location of the risk, not the regulatory location.
            When multiple locations exist, use the country with the highest
            concentration of risk properties. Raise a query to the underwriter
            if the territory is unclear.'
        typeofRIBasis:
          $ref: "#/components/schemas/IdReference"
          description: Type of RI basis — `id` only. **Required for Assumed (RI)
            business.** Leave blank for Direct business.
          x-conditional-required: Required for Assumed (RI) business.
        priorPending:
          type: string
          format: date
          description: Prior and pending date (ISO 8601 date string, e.g. '2025-01-01').
            **Required for CY LOB.** Leave blank for all other LOBs.
          example: 2026-01-01
          x-conditional-required: Required for CY LOB.
        priorActs:
          type: boolean
          description: Whether prior acts cover applies to this risk.
          example: true
        retroactiveDate:
          type: string
          format: date
          description: Retroactive date (ISO 8601 date string). Only applicable when
            `priorActs` is `true`; leave blank when `priorActs` is `false`.
            **Required for PV, CY and PL LOBs.** Leave blank for all other LOBs.
          example: 2026-01-01
          x-conditional-required: Applicable only when priorActs is true.
        insured:
          $ref: "#/components/schemas/InsuredEnrichment"
          description: >-
            Bind-time insured enrichment — occupation, mailing/issuance address,
            policyholder type, and TINs.


            **Required fields:** `occupationSource` (id), `occupation`,
            `mailingAddressCountry` (code).


            **Conditional required:** `mailingAddressState` (US/Canada);
            `webSite` (CY LOB); `assetsUnderManagement` + `assetSize` (FI LOB);
            `taxIdSpain` / `taxIdPortugal` / `taxIdItaly` /
            `canadianBusinessNumber` (where insured has exposure in those
            countries).
        surplusBroker:
          $ref: "#/components/schemas/SurplusBroker"
          description: >-
            Surplus lines and sub-producer details. **Required when risk premium
            originates from the United States.**


            **Required fields:** `typeOfAdmitted` (id, set to Surplus),
            `surplusLinesBroker` (id), `brokerLicense`, `producerHomeState`
            (code).


            Additionally required when `producerHomeState` is New Jersey:
            `slaNumber`.
        tailEffectiveDate:
          type: string
          format: date
          description: Tail effective date at policy-activity level (ISO 8601 date
            string). Leave blank unless a tail period applies to this risk.
          example: 2026-01-01
        fon:
          $ref: "#/components/schemas/FonActivity"
          description: >-
            FON (Final Offer & Negotiation) policy-activity attributes. **CY LOB
            only.**


            **Required FON fields:** `fonDate` (date), `jurisdictionCountry`
            (code), `riskRegulatoryLocation` (code).


            **Conditional required:** `jurisdictionState` (code) for US risks.


            The regulatory risk location is found in the Fiscal & Regulatory
            section of the slip — this represents where the regulator deems the
            risk to be situated, NOT the territory field.
        programs:
          type: array
          description: RI program associations. Supply when the policy is part of one or
            more RI program structures.
          items:
            type: object
            required:
              - programKey
            properties:
              programKey:
                $ref: "#/components/schemas/IdReference"
                description: Program reference — `id` only.
        peerReviewRequest:
          type: object
          description: Peer review sign-off for the bind.
          properties:
            checkedBy:
              $ref: "#/components/schemas/IdReference"
              description: Reviewer contact reference — `id` only.
            checkedDate:
              type: string
              format: date
              description: Date the peer review was completed (ISO 8601 date string).
              example: 2026-09-10
      required:
        - prebindSanctionCheckComplete
    IdReference:
      type: object
      description: Reference to a lookup-backed entity identified by `id` (the XFI
        lookup id, environment-specific).
      required:
        - id
      additionalProperties: false
      properties:
        id:
          type: string
          description: XFI lookup id — the canonical identifier (environment-specific).
          example: "260"
    SubmissionInsured:
      type: object
      description: >-
        Insured details for the shell submission.


        **Option A — Existing contact:** Set `insureContacts.id` to the XFI
        contact identifier. All other insured fields are ignored.


        **Option B — New insured:** Provide `companyName`, `domicileCountry`,
        `domicileState`, and any available mailing-address fields.
        `insureContacts` must be omitted.
      properties:
        companyName:
          type: string
          description: "**Required when creating a new insured** (i.e. `insureContacts` is
            not provided). Legal company name as stated in the submission
            documentation."
          x-conditional-required: Required when creating a new insured (insureContacts not provided).
          example: Veritas Capital
        domicileCountry:
          description: '**Required when creating a new insured.** Domicile country —
            **always send as `code`**, e.g. `{ "code": "USA" }`. Represents the
            country where the insured is legally domiciled.'
          example:
            code: USA
          properties:
            code:
              description: ISO country code or XFI country code.
              example: USA
              type: string
          required:
            - code
          type: object
          x-conditional-required: Required when creating a new insured (insureContacts not provided).
        domicileState:
          description: '**Required when creating a new insured** and the domicile country
            has state-level data. Domicile state — **always send as `code`**,
            e.g. `{ "code": "NY" }`.'
          example:
            code: NJ
          properties:
            code:
              description: State/province code.
              example: NY
              type: string
          required:
            - code
          type: object
          x-conditional-required: Required when creating a new insured (insureContacts not provided).
        mailingAddress1:
          type: string
          example: 123 Cedar Street
        mailingAddressCity:
          type: string
          example: Green Bay
        email:
          type: string
          format: email
          description: Optional if insureContacts is provided.
          example: underwriting@veritascap.com
        zipCode:
          type: string
          description: Post code / zip for the insured mailing address. **Required when
            creating a new insured** and the insured’s country uses postal
            codes.
          x-conditional-required: Required when creating a new insured and the country
            uses postal codes.
          example: "54304"
        obligor:
          $ref: "#/components/schemas/IdReference"
          description: Conditional — Political Risk only. Obligor contact reference — `id`
            only.
        insureContacts:
          $ref: "#/components/schemas/IdReference"
          description: 'Insured contact reference — `id` only (e.g. `{ "id": "2000887"
            }`). Use this to reference an existing insured in XFI. When
            supplied, all other insured fields (companyName, domicile, mailing
            address) are ignored.'
    SubmissionProducer:
      type: object
      description: Producer (broker) reference used on a submission. `id` identifies
        the producer (broker company). Optionally include a `contactliaison`
        block to attach, create, or update the broker contact liaison recorded
        on the policy.
      required:
        - id
      properties:
        id:
          type: string
          description: "**Required.** XFI contact key of the producer (broker company).
            `id` only."
          example: "2000556"
        contactliaison:
          $ref: "#/components/schemas/ContactLiaisonSubmission"
          description: Optional. Broker contact liaison to record on the policy. See
            ContactLiaisonSubmission for the attach/create/update behavior.
    SubmissionPolicy:
      type: object
      description: Policy node. effectiveDate, expiryDate, currency, product,
        territory are mandatory.
      required:
        - effectiveDate
        - expiryDate
        - currency
        - product
        - territory
      properties:
        effectiveDate:
          type: string
          format: date
          description: "**Required.** Policy effective date (ISO 8601). Source: policy
            terms section of the slip."
          example: 2024-01-01
        expiryDate:
          type: string
          format: date
          description: "**Required.** Policy expiry date (ISO 8601). Source: policy terms
            section of the slip."
          example: 2025-01-01
        currency:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Currency reference — `code` only (e.g. `USD`, `GBP`,
            `EUR`)."
        product:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Product reference — `id` only."
        territory:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Territory reference — `code` only."
    SectionIdentifierRef:
      type: object
      description: Section identifier, identified by `id`. Ids are fixed and stable
        across all environments.
      required:
        - id
      additionalProperties: false
      properties:
        id:
          type: string
          enum:
            - "1"
            - "2"
          description: 1 = C&C, 2 = Non C&C.
          example: "1"
    ReferenceTypeRef:
      type: object
      description: Reference type, identified by `id`. Ids are fixed and stable across
        all environments.
      required:
        - id
      additionalProperties: false
      properties:
        id:
          type: string
          enum:
            - "1"
            - "2"
            - "3"
          description: 1 = EEA, 2 = Non-EEA, 3 = Both.
          example: "1"
    CodeReference:
      type: object
      description: Reference to a lookup-backed entity identified by `code` (the
        environment-stable business code).
      required:
        - code
      additionalProperties: false
      properties:
        code:
          type: string
    Section:
      type: object
      description: "A single section within a quote submission. The front end sends
        **at most two** section objects: one for the main Agency policy
        (MSSL/MAIS etc.), and one for the Mosaic Asta Europe (MAE) policy when
        the risk has an EEA component. Each section carries a `division.id` that
        identifies which agency line it belongs to. Trident uses this to
        determine which syndicate lines (1609/2610 for the agency section;
        5399/5431 for the MAE section)."
      required:
        - division
        - agreement
        - typeOfLimitBasis
        - solvencyIIClass
        - excess
        - 100%Limit
        - coverage
        - typeOfLayer
        - regulatoryCoding
        - paymentDays
        - gELR
      properties:
        division:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Agency division this section belongs to — `id` only.
            Must match the `division.id` supplied in the corresponding `lines[]`
            entry. Trident uses this to identify: (a) which XFI agency line to
            associate the section with, and (b) which syndicate lines to include
            (agency div → 1609+2610; MAE div 7 → 5399+5431)."
        description:
          type: string
          example: Cyber Liability - Primary Layer
          description: Section label (e.g. 'Cyber Liability - Primary Layer'). Use a
            descriptive name that identifies the layer type and coverage for
            internal reference.
        gELR:
          type: number
          format: double
          description: "**Required.** gELR (gross expected loss ratio) at section level
            (numeric, e.g. 50). Source: quote/bind documentation."
          example: 50
        typeOfLayer:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Type of layer — `id` only. Select 'Primary' if
            Mosaic takes the first layer in the tower; select '1st Excess' or
            higher for layers further up the tower. Default to 'Primary' if not
            specified by the underwriter. Source: quote email or documentation."
        solvencyIIClass:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Solvency II class — `id` only. For CY LOB, select
            'EP - Direct-General Liability'. Enter the risk code applicable for
            the class of business."
        typeOfLimitBasis:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Type of limit basis — `id` only. Source: quote email
            or documentation. Default to 'In the Aggregate' if not specified.
            Determines the basis and frequency at which the limit can be
            applied."
        excess:
          type: number
          format: double
          description: "**Required.** Excess / attachment point for this section
            (numeric). Set to 0 for the Primary layer. Set to the attachment
            point value for Excess layers."
          example: 0
        100%Limit:
          type: number
          format: double
          description: "**Required.** 100% limit for this section (numeric, gross
            pre-line). Source: quote documentation."
          example: 1000000
        aggregateLimit:
          type: number
          format: double
          description: Optional. Aggregate limit for this section (numeric, gross pre-line).
          example: 1000000
        agreement:
          $ref: "#/components/schemas/SectionAgreement"
          description: "**Required.** Agreement reference for this section. Identifies the
            binding authority agreement under which this section is written."
        coverage:
          type: array
          description: "**Required.** Coverage lines for this section. One entry per
            coverage type (e.g. SPL for Cyber Liability, BRC for Breach
            Response). Each coverage carries limits, premium, currencies, and
            bind-time attributes (premiumBasis, typeofClaimBasis)."
          items:
            $ref: "#/components/schemas/SectionCoverage"
        deduction:
          type: array
          description: "**Required for tax deductions.** Deduction lines for this section.
            For standard deductions (brokerage, commission), supply deduction +
            deductionRate. For tax deductions (TAXIDIR / TAXIRID / TAXIRIR),
            also populate amountOfPremium, typeOfTax, country, and
            contactCreation. One entry per deduction type (or per country for
            tax deductions)."
          items:
            $ref: "#/components/schemas/SectionDeduction"
        deductible:
          $ref: "#/components/schemas/Deductible"
          description: Deductible details for this section.
        conditions:
          type: array
          description: Clauses / conditions.
          items:
            $ref: "#/components/schemas/Condition"
        reinstatements:
          $ref: "#/components/schemas/Reinstatements"
          description: Reinstatement config.
        regulatoryCoding:
          type: array
          description: "**Required.** Regulatory coding / code split lines for this
            section. Add the Risk Classification Code set applicable for the
            agreement. All `codeSplitPc` values across all entries must sum to
            100. Server defaults to the agreement’s risk classification code if
            not provided."
          items:
            $ref: "#/components/schemas/RegulatoryCoding"
        marketSplit:
          type: array
          description: Section-level market split — the carrier syndicates participating
            on this section and their percentage shares. All `careerPercent`
            values across all entries must sum to 100.
          items:
            $ref: "#/components/schemas/SectionMarketSplit"
        class:
          $ref: "#/components/schemas/CodeReference"
          description: "Bind-time. Section class — `code` only. Excess Casualty: XSC when
            policy reference suffix is AA; XCP (Punitive Damages) when suffix is
            AU."
        riskAdjustedRateChange:
          type: number
          format: double
          description: "Bind-time. **Required for renewal policies.** Risk Adjusted Rate
            Change percentage. Must not be 0% for renewals — query the
            underwriter if not provided. Source: quote/bind documentation."
          example: 5
        instalmentbasis:
          $ref: "#/components/schemas/IdReference"
          description: "Optional. Instalment basis — `id` only (e.g. Annual, Quarterly,
            Monthly, Custom). Source: Premium Payment Terms section of the
            declaration slip. When set to Custom, also supply
            `customInstalments`, `instalmentCount`, and `instalmentPlan`."
        customInstalments:
          type: boolean
          description: "Optional. Set true for a custom (non-standard) instalment
            schedule. Depends on `instalmentbasis` — set true when
            `instalmentbasis` is Custom. When true: populate `instalmentCount`
            and `instalmentPlan`; set `overrideToSingle` to false."
          x-conditional-required: Required when instalmentbasis is set to Custom.
          example: false
        overrideToSingle:
          type: boolean
          description: Bind-time. Override to a single instalment. Mutually exclusive with
            `customInstalments` — must be false when customInstalments is true.
          example: false
        instalmentCount:
          type: integer
          format: int32
          description: Optional. Number of custom instalments. Depends on
            `instalmentbasis` — required when `customInstalments` is true (i.e.
            when `instalmentbasis` is Custom).
          x-conditional-required: Required when customInstalments is true.
          example: 4
        paymentDays:
          type: integer
          format: int32
          description: "**Required.** Payment days from inception (typically 30 or 60 for
            MSSL)."
          example: 30
        instalmentPlan:
          type: array
          description: Bind-time. Custom instalment schedule — required when
            customInstalments is true. All sharePercent values must sum to 100.
          items:
            $ref: "#/components/schemas/InstalmentEntry"
    Line:
      type: object
      description: >-
        A single **agency** policy line within a quote submission. Supply one
        element per underwriting **agency** line (one for the main Agency line;
        an additional one for the Mosaic Asta Europe agency line when the risk
        has an EEA component).


        **Front end supplies agency-line data only.** Trident retrieves all
        XFI-created lines (agency + syndicate) via *Get All Lines*, identifies
        each by Division ID (Agency = front-end `division.id`; MAE = 7; 1609 =
        3; 2610 = 12; 5399 = 6; 5431 = 13), and propagates most agency-line
        values to the syndicate lines ("Same as Agency Line"). Derived-only
        fields (`originatingDivision`, `originatingOffice`, global-risk
        cross-reference, inclusive-line) are computed by Trident and are **not**
        part of this payload.


        Fields are grouped by stage: Submission → Quote → FON → Bind.
      properties:
        underWriter:
          $ref: "#/components/schemas/IdReference"
          description: "Submission. **Required.** Underwriter with authority to write the
            risk — `id` only. Provided per agency line. Trident copies this to
            the syndicate lines. Source: underwriter's email/document."
        typeOfBilling:
          $ref: "#/components/schemas/IdReference"
          description: Submission. **Required.** Type of billing — `id` only (default
            'Producer billed'). Trident copies to syndicate lines.
        division:
          $ref: "#/components/schemas/IdReference"
          description: Submission. **Required.** Agency division — `id` only. Identifies
            the Mosaic entity binding this agency line (e.g. MSSL, MAIS; MAE =
            7). Trident matches this against XFI *Get All Lines* to locate the
            agency line. Do NOT confuse with the top-level shell `division`.
        writtenLine:
          type: number
          format: double
          description: Submission. **Required.** Written line percentage for this agency
            line (a.k.a. Agency Share %). Default 100 if not supplied. XFI
            auto-generates `actualWrittenLine%` from this. Trident copies to
            syndicate lines.
          example: 100
        producingCompany:
          $ref: "#/components/schemas/IdReference"
          description: Submission. **Conditional.** Producing company — `id` only.
            **Required when `division` = Mosaic Asta Europe (7)**; set to the
            relevant Non-EEA agency division (e.g. MSSL, MAIS).
          x-conditional-required: Required when division is Mosaic Asta Europe (7).
        sBFClass:
          $ref: "#/components/schemas/IdReference"
          description: Submission. SBF (Syndicate Business Forecast) class — `id` only
            (default Cyber). Provided per agency line; Trident copies to
            syndicate lines.
        producingUnderwriter:
          $ref: "#/components/schemas/IdReference"
          description: Quote. Producing underwriter for this line — `id` only. The
            underwriter who produced this line. Confirmed at bind by the stamp
            on the slip.
        ourRole:
          $ref: "#/components/schemas/IdReference"
          description: Quote. **Required.** Our role in the placement — `id` only. MAIS
            and Canada entities default to 'Sole Lead'.
        signedLinePercentage:
          type: number
          format: double
          description: "Quote. **Required.** Signed line percentage for this line. At
            quote, signed line equals written line; at bind it may be reduced
            (never exceeds written line). Note: for PV MAIS, Excess Casualty and
            Energy Liability, Syndicate 2610/5431 written & signed line are
            always 0%."
          example: 100
        lloydsPlatform:
          $ref: "#/components/schemas/IdReference"
          description: Quote. Lloyd's platform — `id` only. Set for MAE (Lloyd's Brussels)
            and Singapore (Lloyd's Asia) divisions; otherwise leave blank.
            Provided per agency line.
        bureauLead:
          $ref: "#/components/schemas/IdReference"
          description: Quote. Bureau lead — `id` only. E.g. 'PV Portal' for PV MAIS;
            otherwise usually blank. Provided per agency line (moved from UW
            Defaults).
        isThirdPartyCapacityDeployed:
          type: boolean
          description: "Quote. Third-party capacity deployed — default `true` (most Mosaic
            risks are routed through SCM). **Agency/MAE lines: always checked.**
            Trident leaves this BLANK on syndicate lines (1609/2610/5399/5431)."
          example: true
        syndicateCapitalManagement:
          $ref: "#/components/schemas/IdReference"
          description: Quote. Conditional. SCM broker partner — `id` only. **Required when
            `isThirdPartyCapacityDeployed` = true.** Default 'Acrisure' at
            quote; updated at bind per the SCM tracker. Trident leaves this
            BLANK on syndicate lines.
          x-conditional-required: Required when isThirdPartyCapacityDeployed = true.
        leadingInsurer:
          $ref: "#/components/schemas/IdReference"
          description: "Quote/Bind. Conditional. Leading insurer — `id` only. Required
            when the slip leader is non-Lloyd's. Source: Subscription Agreement
            section of the slip."
        brokerOrderPercent:
          type: number
          format: double
          description: FON. Broker order percentage. Auto-calculated when written line and
            order are entered; updated on bind.
          example: 50
        signedOrderPercent:
          type: number
          format: double
          description: "FON. Signed order percentage (SOP: always 100%). Kept in the API
            for simplicity."
          example: 100
        claimsAgreementParty:
          type: boolean
          description: "Bind. **Required.** Whether Mosaic is the claims agreement party.
            Set `true` when Mosaic is sole/bureau lead or a claims agreement
            party. Set `false` otherwise. 2610/5431 lines are always `false`.
            Source: Claims Agreement Party section of the slip."
          example: true
        defenseCostsCovered:
          $ref: "#/components/schemas/IdReference"
          description: Bind. Defense costs covered — id only. **Required for PL LOB**
            (processed per the Defense Cost section). Provided per agency line.
          x-conditional-required: Required for PL LOB.
        leaderPercent:
          type: number
          format: double
          description: "Bind. **Required when the slip leader is non-Lloyd's.** Leader
            percentage. Source: Subscription Agreement section of the slip."
          example: 25
          x-conditional-required: Required when the slip leader is non-Lloyds.
        leaderReference:
          type: string
          description: "Bind. Leader reference. Populated when the slip leader is
            non-Lloyd's. Source: Subscription Agreement section of the slip."
          example: LDR-2026-001
        actualDateWritten:
          type: string
          format: date
          description: Bind. **Required.** Date the underwriter agreed/stamped the slip.
            Found with the stamp on the slip.
          example: 2026-07-01
        dateSigned:
          type: string
          format: date
          description: Bind. **Required.** Signed date as stamped on the slip. Trident
            copies to syndicate lines.
          example: 2026-07-01
        policyLineReferenceOverride:
          type: string
          description: "Bind. **Required.** Base syndicate policy line reference (a.k.a.
            Reference Override) supplied by the front end. Trident derives the
            agency and parallel-syndicate references from this: agency lines
            increment the trailing alphabetic character (…AA → AB); parallel
            syndicate lines (2610/5431) replace the trailing character with an
            incrementing numeral (…AA → A1)."
          example: PWT3876925AA
    InsuredEnrichment:
      type: object
      description: Bind-time insured enrichment fields (Step 4 only). Carries the
        additional insured attributes entered in XFI at bind — occupation,
        LOB-specific details, issuance address, policyholder type, and tax
        identification numbers. The core contact fields (companyName, domicile,
        mailing address) are already on the draft from Step 1 and do not need to
        be re-sent.
      properties:
        occupationSource:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Occupation source — `id` only. Identifies the source
            system used for the occupation lookup (e.g. D&B). Source: XFI
            Contact (General) > Insured section."
        occupation:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Insured occupation — `code` only. Enter as sourced
            from D&B lookup or submission documentation."
        assetsUnderManagement:
          type: string
          description: "**Required for FI LOB.** Assets under management (string). Source:
            booking sheet or Tyche rater."
          x-conditional-required: Required for FI LOB.
          example: "500000000"
        assetSize:
          type: string
          description: "**Required for FI LOB.** Asset size (string). Source: booking
            sheet or Tyche rater."
          x-conditional-required: Required for FI LOB.
          example: "1000000000"
        webSite:
          type: string
          description: "**Required for CY LOB.** Insured website URL. Source: submission
            documentation or insured."
          x-conditional-required: Required for CY LOB.
          example: https://www.veritascap.com
        policyholderType:
          $ref: "#/components/schemas/IdReference"
          description: "Policyholder type — `id` only. Source: fiscal/regulatory section
            of the slip."
        issuanceAddressSameAsInsured:
          type: boolean
          description: Set `true` to copy the insured address to the issuance address
            (Direct business). Set `false` and supply `issuanceTo`,
            `issuanceAddress1`, `issuanceCity`, etc. for Assumed / RI business.
          example: true
        issuanceTo:
          type: string
          description: "**Conditional.** Reassured name on the issuance address — populate
            when issuanceAddressSameAsInsured is false."
          example: Munich Re
          x-conditional-required: Required when issuanceAddressSameAsInsured is false.
        issuanceAddress1:
          type: string
          description: "**Conditional.** Issuance address line 1 — populate when
            issuanceAddressSameAsInsured is false."
          example: Koeniginstrasse 107
          x-conditional-required: Required when issuanceAddressSameAsInsured is false.
        issuanceAddress2:
          type: string
          description: "**Conditional.** Issuance address line 2 — populate when
            issuanceAddressSameAsInsured is false."
          example: PO Box 123
          x-conditional-required: Required when issuanceAddressSameAsInsured is false.
        issuanceCity:
          type: string
          description: "**Conditional.** Issuance address city — populate when
            issuanceAddressSameAsInsured is false."
          example: Munich
          x-conditional-required: Required when issuanceAddressSameAsInsured is false.
        issuanceState:
          $ref: "#/components/schemas/IdReference"
          description: "**Conditional.** Issuance address state — `id` only. Populate when
            issuanceAddressSameAsInsured is false."
          x-conditional-required: Required when issuanceAddressSameAsInsured is false.
        issuancePostCode:
          type: string
          description: "**Conditional.** Issuance address post code — populate when
            issuanceAddressSameAsInsured is false."
          example: "80802"
          x-conditional-required: Required when issuanceAddressSameAsInsured is false.
        issuanceDateReviewed:
          type: string
          format: date
          description: "**Conditional.** Date the issuance address was reviewed — populate
            when issuanceAddressSameAsInsured is false."
          example: 2026-07-01
        mailingAddress2:
          type: string
          description: Second mailing address line.
          example: Suite 400
        mailingAddressCountry:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Insured mailing address country — `code` only. Also
            mandatory for BDX reporting when insured has exposure in Spain,
            Portugal, Italy, or Canada."
        mailingAddressState:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required for US and Canada insureds.** Mailing address state —
            `code` only."
          x-conditional-required: Required for US and Canada insureds.
        mailingAddressPostCode:
          type: string
          description: Insured mailing address post code / zip. Supply for US insureds and
            any other country where postal codes apply.
          example: "54302"
        fein:
          type: string
          maxLength: 10
          description: Federal Employer Identification Number (US).
          example: 12-3456789
        taxIdSpain:
          type: string
          maxLength: 9
          description: Spanish Tax Identification Number (NIF/NIE). Mandatory per Lloyd's
            coverholder reporting standard when insured has Spain exposure.
          example: A12345678
        taxIdItaly:
          type: string
          maxLength: 16
          description: Italian Tax Identification Number (Codice Fiscale). Mandatory per
            Lloyd's coverholder reporting standard when insured has Italy
            exposure.
          example: RSSMRA85T10A562S
        taxIdPortugal:
          type: string
          maxLength: 9
          description: Portuguese Tax Identification Number (NIF). Mandatory per Lloyd's
            coverholder reporting standard when insured has Portugal exposure.
          example: "123456789"
        canadianBusinessNumber:
          type: string
          maxLength: 9
          description: Canadian Business Number (BN). Required for any Canadian insured or
            where risk is located in Canada. Does NOT apply when a Canadian
            broker is involved in the placement.
          example: 123456789RT0001
      required:
        - occupationSource
        - occupation
        - mailingAddressCountry
    SurplusBroker:
      type: object
      description: "Surplus and sub-producer details for US-origin risks. Required
        when risk premium originates from the United States. Note:
        `surplusLinesBroker` is the surplus lines broker entity — distinct from
        the main insurance producer in `SubmissionRequest.producer`."
      properties:
        typeOfAdmitted:
          $ref: "#/components/schemas/IdReference"
          description: "**Required (US-origin risks).** US admitted classification — `id`
            only. Set to 'Surplus' for US surplus lines business. Source:
            fiscal/regulatory section of the slip."
          x-conditional-required: Required when risk premium originates from the United States.
        surplusLinesBroker:
          $ref: "#/components/schemas/IdReference"
          description: "**Required (US-origin risks).** Surplus lines broker entity — `id`
            only. Search and match in XFI by broker name and address. If not
            found, request addition via the WNS leads process."
          x-conditional-required: Required when risk premium originates from the United States.
        brokerLicense:
          type: string
          description: "**Required (US-origin risks).** Surplus lines broker licence
            number as stated on the slip. Query the broker directly if the
            licence number is missing."
          example: SL-CA-12345
          x-conditional-required: Required when risk premium originates from the United States.
        slaNumber:
          type: string
          description: "**Required when producerHomeState is New Jersey.** NJ SLA
            Transaction Number. Format: {5-character SLA}-{YY}-{5-digit
            sequence} (e.g. 'AB123-26-00001')."
          example: AB123-26-00001
          x-conditional-required: Required when producerHomeState is New Jersey.
        producerHomeState:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required (US-origin risks).** State of filing (producer home
            state) — `code` only. Source: fiscal/regulatory section of the
            slip."
          x-conditional-required: Required when risk premium originates from the United States.
    FonActivity:
      type: object
      description: FON (Final Offer & Negotiation) attributes at the policy activity
        level. CY LOB only. Carries FON date, jurisdiction details, and
        regulatory location for the insured risk.
      properties:
        fonDate:
          type: string
          format: date
          description: "**Required for FON stage.** The date the Final Offer & Negotiation
            was completed (ISO 8601 date, e.g. '2026-07-01'). Provided by the
            front-end system."
          example: 2026-01-15
        jurisdictionCountry:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Jurisdiction country — `code` only. The country
            where the insured risk is located. Found in the Fiscal & Regulatory
            section of the slip. This is NOT the same as the `territory` field."
        jurisdictionState:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required for US risks.** Jurisdiction state — `code` only. The
            state where the US-domiciled insured risk is located. Provided by
            the front-end for US-origin submissions."
          x-conditional-required: Required for US risks.
        riskRegulatoryLocation:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Regulatory risk location — `code` only. Where the
            regulator deems the risk to be situated, as stated in the Fiscal &
            Regulatory section of the slip. This is NOT the territory; the two
            fields serve different regulatory purposes."
      required:
        - fonDate
        - jurisdictionCountry
        - riskRegulatoryLocation
    ContactLiaisonSubmission:
      type: object
      description: >-
        Broker contact liaison recorded under the producer for this submission.
        The platform resolves this block one of three ways:


        1. **Update by key** — supply `contactliaisonid.id` (an existing liaison
        key). That liaison is updated in place with the `email`, `phoneNo`, and
        `mobilePhone` values provided; the platform targets it directly without
        searching by name. `firstName` + `lastName` must also be supplied.

        2. **Update by name match** — omit `contactliaisonid`. When `firstName`
        + `lastName` match an existing liaison under the producer, that liaison
        is updated in place.

        3. **Create** — omit `contactliaisonid` and supply a `firstName` +
        `lastName` that do not match any existing liaison; a new liaison is
        created.


        `firstName` and `lastName` are required in all three cases.
      required:
        - firstName
        - lastName
      properties:
        contactliaisonid:
          $ref: "#/components/schemas/IdReference"
          description: Optional. Existing contact liaison key (id only). When supplied,
            the platform attaches that liaison and all individual fields become
            optional. Omit to create or update by name match.
        firstName:
          type: string
          description: Required when creating a new contact (Mode B). First name of the
            broker contact person.
          example: John
        lastName:
          type: string
          description: Required when creating a new contact (Mode B). Last name of the
            broker contact person.
          example: Smith
        email:
          type: string
          format: email
          description: Required when creating a new contact (Mode B). Email address of the
            liaison.
          example: Yes@example.com
        phoneNo:
          type: string
          description: Required when creating a new contact (Mode B). Office/landline
            phone number of the liaison.
          example: "9000000000"
        mobilePhone:
          type: string
          description: Optional. Mobile / cell phone number of the liaison.
          example: 899 898 09
        faxNo:
          type: string
          description: Optional. Fax number of the liaison.
          example: "45"
        state:
          type: object
          description: 'Optional. State where the liaison is located. Always send as code,
            e.g. { "code": "UT" }.'
          properties:
            code:
              type: string
              example: UT
          example:
            code: UT
        city:
          type: object
          description: 'Optional. City where the liaison is located. Always send as
            description, e.g. { "description": "Green Bay" }.'
          properties:
            description:
              type: string
              example: Green Bay
          example:
            description: Green Bay
        region:
          type: object
          description: 'Optional. Region of the liaison. Always send as description, e.g.
            { "description": "GBR" }.'
          properties:
            description:
              type: string
              example: GBR
          example:
            description: GBR
      example:
        firstName: John
        lastName: Smith
        email: Yes@example.com
        phoneNo: "9000000000"
        mobilePhone: 899 898 09
        faxNo: "45"
        state:
          code: UT
        city:
          description: Green Bay
        region:
          description: GBR
        contactliaisonid:
          id: "1234"
    SectionAgreement:
      type: object
      description: Agreement reference for a quote section.
      required:
        - agreement
        - agreementActivity
        - agreementSection
      properties:
        agreement:
          type: string
          description: "**Required.** Agreement code (e.g. 'AGR0000159'). The Mosaic
            binding authority agreement under which this section is written."
          example: AGR0000159
        agreementActivity:
          type: string
          description: "**Required.** Agreement activity code (e.g. 'AGR0000159-22-01').
            The specific year/version of the agreement activity."
          example: AGR0000159-22-01
        agreementSection:
          type: string
          description: "**Required.** Agreement section identifier (e.g. '1'). Identifies
            the section within the agreement activity."
          example: "1"
    SectionCoverage:
      type: object
      description: Coverage line within a quote section.
      required:
        - limitCurrency
        - limitOccurrence
        - limitAggregate
        - premium
        - premiumCurrency
        - settlementCcy
        - premiumBasis
        - typeofClaimBasis
      properties:
        code:
          type: string
          description: Coverage type code (e.g. SPL = Cyber Liability, BRC = Breach
            Response Cost). Identifies which coverage this line represents
            within the section.
          example: SPL
        limitCurrency:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Limit currency — `code` only. The currency in which
            the coverage limits are denominated, as stated in the quote
            documentation."
        limitOccurrence:
          type: number
          format: double
          description: "**Required.** Per-occurrence limit for this coverage (numeric,
            100% basis). Source: quote documentation."
          example: 500000
        limitAggregate:
          type: number
          format: double
          description: "**Required.** Aggregate limit for this coverage (numeric, 100%
            basis). Source: quote documentation."
          example: 500000
        premium:
          type: number
          format: double
          description: "**Required.** 100% gross premium for this coverage (numeric). If
            the underwriter provides a total premium without per-coverage
            splits, divide it equally across coverages or use the percentages
            supplied by the underwriter."
          example: 15000
        premiumSplit%:
          type: number
          format: double
          description: Premium split percentage for this coverage line (numeric).
            Represents this coverage’s share of the total section premium.
          example: 50
        premiumCurrency:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Premium currency — `code` only. The currency in
            which the premium is denominated, as stated in the quote
            documentation."
        settlementCcy:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Settlement currency — `code` only. Options are
            restricted to the currencies available for the selected agreement.
            Default to match the premium/limit currency when not specified.
            Exception: Dubai division always settles in USD regardless of limit
            or premium currency."
        premiumBasis:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Premium basis — `id` only (e.g. Flat, M&D). Source:
            Premium Payment Terms section of the declaration slip."
        typeofClaimBasis:
          $ref: "#/components/schemas/IdReference"
          description: "**Required.** Claims basis — `id` only. LOB rules: PV = LOD; CY/PL
            = CMD; FI PI/D&O/EPLI = CM; FI BB/7T = LD; Excess Casualty = LOD
            (occurrence risk codes) or CM (claims-made risk codes)."
        waitingPeriodAmount:
          type: number
          format: double
          description: Optional. Waiting period amount for this coverage (numeric).
          example: 25000
        waitingPeriodMeasurement:
          $ref: "#/components/schemas/IdReference"
          description: Optional. Waiting period measurement unit — `id` only.
        waitingPeriodTime:
          type: number
          description: Optional. Waiting period duration expressed in the selected
            measurement unit (numeric).
          example: 12
    SectionDeduction:
      type: object
      description: >-
        Deduction (brokerage / commission) or tax deduction line within a quote
        section.


        For tax deductions (deduction code TAXIDIR, TAXIRID, or TAXIRIR),
        populate the additional tax fields: amountOfPremium, typeOfTax, country,
        contactCreation. Record one entry per country in the tax schedule,
        including countries with 0% tax (use a Non-taxable entry).
      required:
        - deduction
        - deductionRate
        - amountOfPremium
      properties:
        deduction:
          $ref: "#/components/schemas/IdReference"
          description: Deduction type reference — id only.
        deductionRate:
          type: number
          format: double
          example: 20
        typeOfDeductionPayable:
          $ref: "#/components/schemas/IdReference"
          description: Optional. Type of deduction payable — id only.
        manualOverride:
          type: boolean
          description: Optional. Set `true` to enable manual override of the deduction
            rate in XFI. Must be enabled before editing any deduction value.
          example: true
        amountOfPremium:
          type: number
          format: double
          description: "**Required.** Premium allocation amount for this country entry
            (numeric, 100% basis). Represents the portion of the total premium
            attributable to this country."
          example: 15000
        typeOfTax:
          $ref: "#/components/schemas/IdReference"
          description: Type of tax — `id` only (e.g. Insurance Premium Tax). From the tax
            schedule on the slip.
        country:
          $ref: "#/components/schemas/CodeReference"
          description: "**Required.** Country for this tax entry — `code` only. Spain,
            Portugal, Italy and Canada require mandatory entries per Lloyd’s
            coverholder reporting standards."
        contactCreation:
          $ref: "#/components/schemas/TaxContactCreation"
          description: Optional. Supply when the insured contact for this country is not
            found in XFI. Required for Spain, Portugal, Italy and Canada per
            Lloyd's coverholder reporting standard.
    Deductible:
      type: object
      description: Deductible details for a quote section (single object, not an array).
      required:
        - typeOfDeductible
        - deductibleBasis
      properties:
        typeOfDeductible:
          $ref: "#/components/schemas/IdReference"
          description: Type of deductible — id only.
        deductibleBasis:
          $ref: "#/components/schemas/IdReference"
          description: Deductible basis — id only.
        allRiskDeductible:
          type: integer
          description: Optional. All-risk deductible indicator for this section — `1` when
            an all-risk deductible applies.
          example: 1
    Condition:
      type: object
      description: Clause / condition attached to a quote section.
      properties:
        typeOfClause:
          $ref: "#/components/schemas/IdReference"
          description: Type of clause — id only.
        clauseCode:
          type: string
          description: Clause code.
          example: LMA5400
        clauseCondition:
          type: string
          description: Clause description.
          example: Cyber affirmation clause
    Reinstatements:
      type: object
      description: Reinstatement configuration for a quote section.
      properties:
        reinstatementsApplicable:
          type: boolean
          example: true
        unlimitedReinstatements:
          type: boolean
          example: false
        noOfReinstatements:
          type: integer
          format: int32
          example: 1
        availableReinstatements:
          type: integer
          format: int32
          example: 1
        proRata:
          type: boolean
          example: true
        reinstatementPercent:
          type: number
          format: double
          example: 100
    RegulatoryCoding:
      type: object
      description: Regulatory coding (code split) line within a quote section.
      required:
        - code
        - codeSplitPc
      properties:
        code:
          type: string
          description: "**Required.** Regulatory / risk classification code (e.g. 'E2',
            '7T'). Source: the agreement’s risk classification code set."
          example: E2
        codeSplitPc:
          type: number
          format: double
          description: "**Required.** Code split percentage for this regulatory coding
            entry (numeric). All entries across the section must sum to 100."
          example: 50
        overrideAgreementRiskCode:
          type: boolean
          description: Set `true` to override the agreement’s default risk code with this
            entry. Default is `false`.
          example: false
        gELR:
          type: number
          format: double
          description: Optional. gELR (gross expected loss ratio) for this regulatory
            coding entry, when it differs from the section-level `gELR`.
          example: 50
    SectionMarketSplit:
      type: object
      description: A single carrier entry in a section-level market split.
      properties:
        careerPercent:
          type: number
          format: double
          description: Carrier percentage share for this section. All entries across the
            section's marketSplit must sum to 100.
          example: 60
        carrier:
          $ref: "#/components/schemas/CodeReference"
          description: 'Carrier syndicate — `code` only (e.g. `{ "code": "1609" }`).'
        carrierReference:
          type: string
          description: Carrier's own policy reference.
          example: MR-CYB-2026-001
    InstalmentEntry:
      type: object
      description: A single entry in a custom instalment plan.
      required:
        - dueDate
        - sharePercent
      properties:
        dueDate:
          type: string
          format: date
          description: Due date for this instalment.
          example: 2026-08-01
        sharePercent:
          type: number
          format: double
          description: Percentage of total premium due on this date. All entries across
            the instalmentPlan must sum to 100.
          example: 25
    TaxContactCreation:
      type: object
      description: Insured contact details to create in XFI for a specific tax-country
        entry. Required for Spain, Portugal, Italy and Canada when the insured
        record is not already present in XFI.
      properties:
        contactType:
          type: string
          description: XFI contact type.
          example: Company
        companyName:
          type: string
          description: Insured company name for this country.
          example: Veritas Capital Spain S.L.
        mailingAddressCountry:
          $ref: "#/components/schemas/CodeReference"
          description: Mailing address country — `code` only.
        mailingAddress1:
          type: string
          description: Mailing address line 1.
          example: Calle Gran Via 28
        mailingAddress2:
          type: string
          description: Mailing address line 2.
          example: Planta 3
        city:
          type: string
          description: City.
          example: Madrid
        state:
          $ref: "#/components/schemas/CodeReference"
          description: State — `code` only.
        postCode:
          type: string
          description: Post code.
          example: "28013"
  securitySchemes:
    api_key:
      type: apiKey
      name: x-api-key
      in: header
```
