LeO

LeO Public API

REST API for account entitlements, credit balance, commercial-insurance prospect search across 134 filter properties, single-prospect retrieval, and asynchronous decision-maker contact enrichment with job polling. OpenAPI 3.0.0 published at https://api.meetleo.com/openapi.json and rendered by a Swagger UI at /docs. Bearer JWT auth; metered in credits with a 402 on exhaustion.

Documentation

Specifications

Other Resources

OpenAPI Specification

leo-prospects-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: LeO Public API - prospects
  description: External API for account management, credits, prospect search, and contact enrichment This
    document carries only the `prospects` operations, split from LeO's published openapi.json.
  version: '1.0'
servers:
- url: https://api.meetleo.com
  description: 'LeO Public API production base (verified live 2026-08-14: GET /health -> 200, GET /openapi.json
    -> 200)'
tags:
- name: prospects
  description: Search, retrieve and enrich commercial-insurance prospects across LeO's insights database.
paths:
  /v1/prospects/search:
    post:
      operationId: ProspectsController_search
      summary: Search prospects
      description: "Synchronous search over the Leo insights database. Returns firmographics (employees,\
        \ vertical, NAICS, website), and insurance signals (workers comp, OSHA, DOT, Form 5500, IRS 990\
        \ for non-profits).\n\n**When to use:** building a prospecting list, exploring market segments,\
        \ or previewing match volume before paying for enrichment.\n\n**Does NOT consume enrichment credits.**\
        \ Contacts are always `null` here — call `POST /v1/prospects/enrich` to get contact emails.\n\n\
        **Example — Texas trucking fleets, 25–250 employees, with WC and DOT data:**\n```json\n{\n  \"\
        filters\": [{\n    \"state\": [\"TX\"],\n    \"naicsList\": [\"484110\", \"484121\"],\n    \"\
        minEmployeesNumber\": 25,\n    \"maxEmployeesNumber\": 250,\n    \"hasWc\": true,\n    \"hasDot\"\
        : true\n  }],\n  \"page\": 1,\n  \"limit\": 25\n}\n```"
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchProspectsDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchProspectsResponseData'
        '401':
          description: Unauthorized
        '422':
          description: Validation error
        '429':
          description: Too many requests (HTTP API stage throttling or upstream limits)
      tags:
      - prospects
      security:
      - bearer: []
  /v1/prospects/{prospectId}:
    get:
      operationId: ProspectsController_getById
      summary: Get a single prospect by ID
      description: 'Returns full firmographic and insurance data for a single prospect.


        **Consumes 1 credit** per call (same as a 1-result search).


        Use `POST /v1/prospects/search` first to discover matching prospect IDs, then call this endpoint
        to fetch the full record.'
      parameters:
      - name: prospectId
        required: true
        in: path
        schema:
          type: number
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProspectResponse'
        '401':
          description: Unauthorized
        '402':
          description: Insufficient credits
        '404':
          description: Prospect not found
        '429':
          description: Too many requests (HTTP API stage throttling or upstream limits)
      tags:
      - prospects
      security:
      - bearer: []
  /v1/prospects/enrich:
    post:
      operationId: ProspectsController_enrich
      summary: Enrich prospects with contact data
      description: "Asynchronous. Searches for matching prospects, reserves credits up to `maxProspects`,\
        \ and queues a contact-enrichment job that resolves decision-maker emails and titles.\n\n**Flow:**\n\
        1. POST this endpoint → **202 Accepted** with `taskId`, `pollUrl`, `creditsReserved`, `estimatedWaitSeconds`\
        \ (~120s typical).\n2. Poll `GET /v1/jobs/{taskId}` every 5s until `data.status` is `completed`\
        \ or `failed` (allow up to 5 minutes).\n3. Inspect per-prospect `enrichmentStatus`: `enriched`\
        \ (email returned, credit charged), `no_email` (no contact found, no credit charged), `failed`.\n\
        \n**Tip:** narrow filters return higher `enriched` rates. The same filter shape as `/v1/prospects/search`\
        \ works here — preview with search first, then enrich.\n\n**Example — enrich up to 25 Texas trucking\
        \ fleets:**\n```json\n{\n  \"filters\": [{\n    \"state\": [\"TX\"],\n    \"naicsList\": [\"484110\"\
        , \"484121\"],\n    \"minEmployeesNumber\": 25,\n    \"maxEmployeesNumber\": 250,\n    \"hasWc\"\
        : true,\n    \"hasDot\": true\n  }],\n  \"maxProspects\": 25\n}\n```"
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrichProspectsDto'
      responses:
        '202':
          description: Accepted — poll GET /v1/jobs/{taskId} for results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichProspectsResponseData'
        '401':
          description: Unauthorized
        '402':
          description: Insufficient credits
        '422':
          description: No prospects match filters
        '429':
          description: Too many requests (HTTP API stage throttling or upstream limits)
      tags:
      - prospects
      security:
      - bearer: []
components:
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http
  schemas:
    BenefitsRedFlags:
      type: object
      properties:
        benefitsRagFlagComplianceAmendmentNeeded:
          type: boolean
          nullable: true
          example: null
          description: Compliance Amendment Needed — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionComplianceAmendmentNeeded:
          type: string
          nullable: true
          example: null
          description: Compliance Amendment Needed — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagCorrectiveDistributions:
          type: boolean
          nullable: true
          example: null
          description: Corrective Distributions — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionCorrectiveDistributions:
          type: string
          nullable: true
          example: null
          description: Corrective Distributions — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagDecliningPlanAssets:
          type: boolean
          nullable: true
          example: null
          description: Declining Plan Assets — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionDecliningPlanAssets:
          type: string
          nullable: true
          example: null
          description: Declining Plan Assets — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagDelinquentContributions:
          type: boolean
          nullable: true
          example: null
          description: Delinquent Contributions — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionDelinquentContributions:
          type: string
          nullable: true
          example: null
          description: Delinquent Contributions — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagExcessiveServiceProviderFees:
          type: boolean
          nullable: true
          example: null
          description: Excessive Service Provider Fees — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionExcessiveServiceProviderFees:
          type: string
          nullable: true
          example: null
          description: Excessive Service Provider Fees — human-readable explanation when flagged; null
            otherwise.
        benefitsRagFlagFidelityBondTooLow:
          type: boolean
          nullable: true
          example: null
          description: Fidelity Bond Too Low — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionFidelityBondTooLow:
          type: string
          nullable: true
          example: null
          description: Fidelity Bond Too Low — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagFrozenPlan:
          type: boolean
          nullable: true
          example: null
          description: Frozen Plan — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionFrozenPlan:
          type: string
          nullable: true
          example: null
          description: Frozen Plan — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHas5500Audit:
          type: boolean
          nullable: true
          example: null
          description: Has 5500 Audit — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionHas5500Audit:
          type: string
          nullable: true
          example: null
          description: Has 5500 Audit — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHighAverageAccountBalance:
          type: boolean
          nullable: true
          example: null
          description: High Average Account Balance — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionHighAverageAccountBalance:
          type: string
          nullable: true
          example: null
          description: High Average Account Balance — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHighBrokerCommissionRate:
          type: boolean
          nullable: true
          example: null
          description: High Broker Commission Rate — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionHighBrokerCommissionRate:
          type: string
          nullable: true
          example: null
          description: High Broker Commission Rate — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHighExpenseRatio:
          type: boolean
          nullable: true
          example: null
          description: High Expense Ratio — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionHighExpenseRatio:
          type: string
          nullable: true
          example: null
          description: High Expense Ratio — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHighFees:
          type: boolean
          nullable: true
          example: null
          description: High Fees — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionHighFees:
          type: string
          nullable: true
          example: null
          description: High Fees — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHighParticipantTurnover:
          type: boolean
          nullable: true
          example: null
          description: High Participant Turnover — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionHighParticipantTurnover:
          type: string
          nullable: true
          example: null
          description: High Participant Turnover — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHighPremiumPerCapita:
          type: boolean
          nullable: true
          example: null
          description: High Premium Per Capita — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionHighPremiumPerCapita:
          type: string
          nullable: true
          example: null
          description: High Premium Per Capita — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHighRetireeAssets:
          type: boolean
          nullable: true
          example: null
          description: High Retiree Assets — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionHighRetireeAssets:
          type: string
          nullable: true
          example: null
          description: High Retiree Assets — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagHighTurnoverRatio:
          type: boolean
          nullable: true
          example: null
          description: High Turnover Ratio — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionHighTurnoverRatio:
          type: string
          nullable: true
          example: null
          description: High Turnover Ratio — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagIndirectCompensationHeavy:
          type: boolean
          nullable: true
          example: null
          description: Indirect Compensation Heavy — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionIndirectCompensationHeavy:
          type: string
          nullable: true
          example: null
          description: Indirect Compensation Heavy — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagLargeAssetDrop:
          type: boolean
          nullable: true
          example: null
          description: Large Asset Drop — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionLargeAssetDrop:
          type: string
          nullable: true
          example: null
          description: Large Asset Drop — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagLateFiling:
          type: boolean
          nullable: true
          example: null
          description: Late Filing — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionLateFiling:
          type: string
          nullable: true
          example: null
          description: Late Filing — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagLowParticipationRate:
          type: boolean
          nullable: true
          example: null
          description: Low Participation Rate — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionLowParticipationRate:
          type: string
          nullable: true
          example: null
          description: Low Participation Rate — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagMissingAudit:
          type: boolean
          nullable: true
          example: null
          description: Missing Audit — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionMissingAudit:
          type: string
          nullable: true
          example: null
          description: Missing Audit — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagMultiplePlansSingleEmployer:
          type: boolean
          nullable: true
          example: null
          description: Multiple Plans Single Employer — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionMultiplePlansSingleEmployer:
          type: string
          nullable: true
          example: null
          description: Multiple Plans Single Employer — human-readable explanation when flagged; null
            otherwise.
        benefitsRagFlagNegativeNetAssets:
          type: boolean
          nullable: true
          example: null
          description: Negative Net Assets — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionNegativeNetAssets:
          type: string
          nullable: true
          example: null
          description: Negative Net Assets — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagNegativeNetIncome:
          type: boolean
          nullable: true
          example: null
          description: Negative Net Income — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionNegativeNetIncome:
          type: string
          nullable: true
          example: null
          description: Negative Net Income — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagNetParticipantOutflow:
          type: boolean
          nullable: true
          example: null
          description: Net Participant Outflow — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionNetParticipantOutflow:
          type: string
          nullable: true
          example: null
          description: Net Participant Outflow — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagNewPlan:
          type: boolean
          nullable: true
          example: null
          description: New Plan — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionNewPlan:
          type: string
          nullable: true
          example: null
          description: New Plan — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagNoCurrentBroker:
          type: boolean
          nullable: true
          example: null
          description: No Current Broker — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionNoCurrentBroker:
          type: string
          nullable: true
          example: null
          description: No Current Broker — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagNoEmployerContributions:
          type: boolean
          nullable: true
          example: null
          description: No Employer Contributions — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionNoEmployerContributions:
          type: string
          nullable: true
          example: null
          description: No Employer Contributions — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagNoInsuranceOnWelfarePlan:
          type: boolean
          nullable: true
          example: null
          description: No Insurance On Welfare Plan — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionNoInsuranceOnWelfarePlan:
          type: string
          nullable: true
          example: null
          description: No Insurance On Welfare Plan — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagNoStopLoss:
          type: boolean
          nullable: true
          example: null
          description: No Stop Loss — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionNoStopLoss:
          type: string
          nullable: true
          example: null
          description: No Stop Loss — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagPlanRecentlyTerminated:
          type: boolean
          nullable: true
          example: null
          description: Plan Recently Terminated — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionPlanRecentlyTerminated:
          type: string
          nullable: true
          example: null
          description: Plan Recently Terminated — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagPolicyExpiringSoon:
          type: boolean
          nullable: true
          example: null
          description: Policy Expiring Soon — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionPolicyExpiringSoon:
          type: string
          nullable: true
          example: null
          description: Policy Expiring Soon — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagQualifiedAuditOpinion:
          type: boolean
          nullable: true
          example: null
          description: Qualified Audit Opinion — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionQualifiedAuditOpinion:
          type: string
          nullable: true
          example: null
          description: Qualified Audit Opinion — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagRelatedPartyTransactions:
          type: boolean
          nullable: true
          example: null
          description: Related Party Transactions — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionRelatedPartyTransactions:
          type: string
          nullable: true
          example: null
          description: Related Party Transactions — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagSingleCarrierDependency:
          type: boolean
          nullable: true
          example: null
          description: Single Carrier Dependency — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionSingleCarrierDependency:
          type: string
          nullable: true
          example: null
          description: Single Carrier Dependency — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagSmallPlanLargeAssets:
          type: boolean
          nullable: true
          example: null
          description: Small Plan Large Assets — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionSmallPlanLargeAssets:
          type: string
          nullable: true
          example: null
          description: Small Plan Large Assets — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagStaleValuation:
          type: boolean
          nullable: true
          example: null
          description: Stale Valuation — true = flagged, false = not flagged, null = insufficient data.
        benefitsRagFlagDescriptionStaleValuation:
          type: string
          nullable: true
          example: null
          description: Stale Valuation — human-readable explanation when flagged; null otherwise.
        benefitsRagFlagUnderfundedPension:
          type: boolean
          nullable: true
          example: null
          description: Underfunded Pension — true = flagged, false = not flagged, null = insufficient
            data.
        benefitsRagFlagDescriptionUnderfundedPension:
          type: string
          nullable: true
          example: null
          description: Underfunded Pension — human-readable explanation when flagged; null otherwise.
      required:
      - benefitsRagFlagComplianceAmendmentNeeded
      - benefitsRagFlagDescriptionComplianceAmendmentNeeded
      - benefitsRagFlagCorrectiveDistributions
      - benefitsRagFlagDescriptionCorrectiveDistributions
      - benefitsRagFlagDecliningPlanAssets
      - benefitsRagFlagDescriptionDecliningPlanAssets
      - benefitsRagFlagDelinquentContributions
      - benefitsRagFlagDescriptionDelinquentContributions
      - benefitsRagFlagExcessiveServiceProviderFees
      - benefitsRagFlagDescriptionExcessiveServiceProviderFees
      - benefitsRagFlagFidelityBondTooLow
      - benefitsRagFlagDescriptionFidelityBondTooLow
      - benefitsRagFlagFrozenPlan
      - benefitsRagFlagDescriptionFrozenPlan
      - benefitsRagFlagHas5500Audit
      - benefitsRagFlagDescriptionHas5500Audit
      - benefitsRagFlagHighAverageAccountBalance
      - benefitsRagFlagDescriptionHighAverageAccountBalance
      - benefitsRagFlagHighBrokerCommissionRate
      - benefitsRagFlagDescriptionHighBrokerCommissionRate
      - benefitsRagFlagHighExpenseRatio
      - benefitsRagFlagDescriptionHighExpenseRatio
      - benefitsRagFlagHighFees
      - benefitsRagFlagDescriptionHighFees
      - benefitsRagFlagHighParticipantTurnover
      - benefitsRagFlagDescriptionHighParticipantTurnover
      - benefitsRagFlagHighPremiumPerCapita
      - benefitsRagFlagDescriptionHighPremiumPerCapita
      - benefitsRagFlagHighRetireeAssets
      - benefitsRagFlagDescriptionHighRetireeAssets
      - benefitsRagFlagHighTurnoverRatio
      - benefitsRagFlagDescriptionHighTurnoverRatio
      - benefitsRagFlagIndirectCompensationHeavy
      - benefitsRagFlagDescriptionIndirectCompensationHeavy
      - benefitsRagFlagLargeAssetDrop
      - benefitsRagFlagDescriptionLargeAssetDrop
      - benefitsRagFlagLateFiling
      - benefitsRagFlagDescriptionLateFiling
      - benefitsRagFlagLowParticipationRate
      - benefitsRagFlagDescriptionLowParticipationRate
      - benefitsRagFlagMissingAudit
      - benefitsRagFlagDescriptionMissingAudit
      - benefitsRagFlagMultiplePlansSingleEmployer
      - benefitsRagFlagDescriptionMultiplePlansSingleEmployer
      - benefitsRagFlagNegativeNetAssets
      - benefitsRagFlagDescriptionNegativeNetAssets
      - benefitsRagFlagNegativeNetIncome
      - benefitsRagFlagDescriptionNegativeNetIncome
      - benefitsRagFlagNetParticipantOutflow
      - benefitsRagFlagDescriptionNetParticipantOutflow
      - benefitsRagFlagNewPlan
      - benefitsRagFlagDescriptionNewPlan
      - benefitsRagFlagNoCurrentBroker
      - benefitsRagFlagDescriptionNoCurrentBroker
      - benefitsRagFlagNoEmployerContributions
      - benefitsRagFlagDescriptionNoEmployerContributions
      - benefitsRagFlagNoInsuranceOnWelfarePlan
      - benefitsRagFlagDescriptionNoInsuranceOnWelfarePlan
      - benefitsRagFlagNoStopLoss
      - benefitsRagFlagDescriptionNoStopLoss
      - benefitsRagFlagPlanRecentlyTerminated
      - benefitsRagFlagDescriptionPlanRecentlyTerminated
      - benefitsRagFlagPolicyExpiringSoon
      - benefitsRagFlagDescriptionPolicyExpiringSoon
      - benefitsRagFlagQualifiedAuditOpinion
      - benefitsRagFlagDescriptionQualifiedAuditOpinion
      - benefitsRagFlagRelatedPartyTransactions
      - benefitsRagFlagDescriptionRelatedPartyTransactions
      - benefitsRagFlagSingleCarrierDependency
      - benefitsRagFlagDescriptionSingleCarrierDependency
      - benefitsRagFlagSmallPlanLargeAssets
      - benefitsRagFlagDescriptionSmallPlanLargeAssets
      - benefitsRagFlagStaleValuation
      - benefitsRagFlagDescriptionStaleValuation
      - benefitsRagFlagUnderfundedPension
      - benefitsRagFlagDescriptionUnderfundedPension
    DotData:
      type: object
      properties:
        units:
          type: number
          nullable: true
          example: 87
          description: Number of power units (trucks/tractors) registered with FMCSA.
        drivers:
          type: number
          nullable: true
          example: 112
          description: Number of CDL drivers registered with FMCSA.
        violations:
          type: boolean
          example: false
        bipdPrimary:
          nullable: true
          allOf:
          - $ref: '#/components/schemas/DotInsuranceLine'
        bipdExcess:
          nullable: true
          allOf:
          - $ref: '#/components/schemas/DotInsuranceLine'
        cargo:
          nullable: true
          allOf:
          - $ref: '#/components/schemas/DotInsuranceLine'
        surety:
          nullable: true
          allOf:
          - $ref: '#/components/schemas/DotInsuranceLine'
      required:
      - units
      - drivers
      - violations
      - bipdPrimary
      - bipdExcess
      - cargo
      - surety
    DotInsuranceLine:
      type: object
      properties:
        renewalDate:
          type: string
          nullable: true
          example: '2026-08-15'
          description: DOT coverage renewal date (ISO YYYY-MM-DD).
        carrier:
          type: string
          nullable: true
          example: Progressive Commercial
          description: DOT coverage carrier name.
      required:
      - renewalDate
      - carrier
    EnrichProspectsDto:
      type: object
      properties:
        filters:
          description: Filter group(s) selecting which prospects to enrich. Conditions inside one object
            are **ANDed**. Narrow filters return better contact match rates and avoid burning credits
            on `no_email` rows.
          example:
          - state:
            - TX
            naicsList:
            - '484110'
            - '484121'
            minEmployeesNumber: 25
            maxEmployeesNumber: 250
            hasWc: true
            hasDot: true
          type: array
          items:
            $ref: '#/components/schemas/SearchProspectsFiltersDto'
        maxProspects:
          type: number
          description: Cap on the number of prospects to enrich in this run (1–100). Credits reserved
            scale with this number — start small (e.g. 10) for new integrations.
          default: 100
          minimum: 1
          maximum: 100
          example: 25
      required:
      - filters
    EnrichProspectsResponseData:
      type: object
      properties:
        taskId:
          type: string
          format: uuid
          example: 550e8400-e29b-41d4-a716-446655440000
          description: Opaque job identifier — pass to GET /v1/jobs/{taskId}.
        status:
          type: string
          example: pending
          description: Initial job state immediately after accept.
        pollUrl:
          type: string
          example: /v1/jobs/550e8400-e29b-41d4-a716-446655440000
          description: Relative path to poll for job completion.
        creditsReserved:
          type: number
          example: 25
          description: Credits reserved up front (≤ maxProspects). Final charge in metadata.creditsUsed
            on the completed job — only `enriched` rows are billed.
        estimatedWaitSeconds:
          type: number
          description: Expected job duration in seconds (typical ~120).
          example: 120
      required:
      - taskId
      - status
      - pollUrl
      - creditsReserved
      - estimatedWaitSeconds
    InsuranceLineData:
      type: object
      properties:
        renewalDate:
          type: string
          nullable: true
          example: '2026-09-01'
          description: Policy renewal date (ISO YYYY-MM-DD). Present for WC, pension, and welfare/benefits
            lines.
        carrier:
          type: string
          nullable: true
          example: Travelers
          description: Insurance carrier name for this line.
        broker:
          type: string
          nullable: true
          example: Marsh McLennan Agency
          description: Broker name. Present for WC, pension, and welfare/benefits lines.
        participants:
          type: number
          nullable: true
          example: 142
          description: Number of covered participants. Only present for pension and welfare/benefits lines.
      required:
      - renewalDate
      - carrier
    OshaData:
      type: object
      properties:
        healthViolations:
          type: boolean
          example: false
        safetyViolations:
          type: boolean
          example: true
      required:
      - healthViolations
      - safetyViolations
    PaginationResponse:
      type: object
      properties:
        page:
          type: integer
          example: 1
          description: 1-based page number returned.
        limit:
          type: integer
          example: 25
          description: Page size used for this response.
        total:
          type: integer
          example: 1842
          description: Total prospects matching the filters across all pages.
      required:
      - page
      - limit
      - total
    ProspectInsurance:
      type: object
      properties:
        wc:
          nullable: true
          allOf:
          - $ref: '#/components/schemas/InsuranceLineData'
        pension:
          nullable: true
          allOf:
          - $ref: '#/components/schemas/InsuranceLineData'
        benefits:
          nullable: true
          allOf:
          - $ref: '#/components/schema

# --- truncated at 32 KB (62 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/leo/refs/heads/main/openapi/leo-prospects-api-openapi.yml