HealthSherpa Enrollments API

The Enrollments API from HealthSherpa — 7 operation(s) for enrollments.

OpenAPI Specification

healthsherpa-enrollments-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: HealthSherpa Public Enrollment Sessions Enrollments API
  version: 0.1.0
  description: 'Machine-readable contract for the currently available public HealthSherpa endpoints: GET /v1/ping, GET /v1/reference/counties, GET /v1/reference/issuers, GET /v1/reference/providers, POST /v1/quotes, the approval-gated POST /v1/enrollment-sessions, and the approval-gated direct enrollment endpoints GET /v1/enrollments, POST /v1/enrollments, PUT /v1/enrollments/{enrollment_id}, GET /v1/enrollments/{enrollment_id}, POST /v1/enrollments/{enrollment_id}/cancellations, POST /v1/enrollments/{enrollment_id}/terminations, POST /v1/enrollments/{enrollment_id}/submissions, GET /v1/enrollments/{enrollment_id}/payment_redirect, and POST /v1/enrollments/{enrollment_id}/supporting_documentation. Object schemas remain additive and clients should ignore response fields they do not recognize.


    Most HealthSherpa-owned errors follow the unified `ErrorResponse` schema: `{ "error": { "code": string, "message": string, "details"?: object } }`. The direct enrollment endpoints instead return service failures as a top-level `errors[]` array: `{ "errors": [ { "code": string, "message": string, "field"?: string } ] }`. Edge-generated failures (API Gateway and WAF, before a request reaches the service) always use the unified `ErrorResponse` envelope, including on the direct enrollment endpoints — most notably a missing or invalid API key (`403 forbidden`).'
servers:
- url: https://api.one.healthsherpa.com
  description: Production
security:
- ApiKeyAuth: []
tags:
- name: Enrollments
paths:
  /v1/enrollments:
    get:
      tags:
      - Enrollments
      summary: List direct enrollment applications
      description: Approval-gated direct enrollment API for listing off-exchange applications for the approved account. Send `product=ichra` and `exchange=off_exchange` as required query parameters so HealthSherpa ONE can validate the direct-enrollment routing channel. The response is paginated and can be filtered by policy status, partner or employer ids, plan identifiers, plan year, and last-updated timestamp. Only the documented list filters are supported; unsupported query parameters are rejected with `400 invalid_request`. Service failures are returned as a top-level `errors[]` array with `code`, `message`, and optional `field`; failures blocked at the API edge use the unified `error` envelope.
      operationId: listEnrollments
      parameters:
      - name: product
        in: query
        required: true
        description: Direct-enrollment product. Must be `ichra`.
        schema:
          type: string
          enum:
          - ichra
      - name: exchange
        in: query
        required: true
        description: Direct-enrollment routing channel. Must be `off_exchange`.
        schema:
          type: string
          enum:
          - off_exchange
      - name: policy_status
        in: query
        required: false
        description: Filter applications by carrier policy status.
        schema:
          type: string
          enum:
          - draft
          - pending_effectuation
          - effectuated
          - submission_failed
          - cancelled
          - terminated
      - name: external_id
        in: query
        required: false
        description: Filter by the partner-supplied external application id.
        schema:
          type: string
      - name: plan_year
        in: query
        required: false
        description: Filter by application plan year.
        schema:
          type: integer
      - name: issuer_hios_id
        in: query
        required: false
        description: Filter by issuer HIOS id.
        schema:
          type: string
      - name: plan_hios_id
        in: query
        required: false
        description: Filter by plan HIOS id.
        schema:
          type: string
      - name: employer_external_id
        in: query
        required: false
        description: Filter by the employer's external identifier.
        schema:
          type: string
      - name: updated_since
        in: query
        required: false
        description: ISO 8601 timestamp. Returns applications updated after this time.
        schema:
          type: string
          format: date-time
      - name: limit
        in: query
        required: false
        description: Maximum number of applications to return.
        schema:
          type: integer
          minimum: 1
          default: 25
          maximum: 100
      - name: offset
        in: query
        required: false
        description: Zero-based pagination offset.
        schema:
          type: integer
          minimum: 0
          default: 0
      responses:
        '200':
          $ref: '#/components/responses/EnrollmentListResponse'
        '400':
          $ref: '#/components/responses/EnrollmentError'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
    post:
      tags:
      - Enrollments
      summary: Create a direct enrollment application
      description: 'Approval-gated direct enrollment API for partners that need API-level control over off-exchange applications. Send the application payload at the request root and include the HealthSherpa ONE `context` object for routing. Direct enrollment currently supports `context.product = "ichra"` and `context.exchange = "off_exchange"`; other products and exchanges are not supported here. Use `POST /v1/enrollment-sessions` for on-exchange enrollment. HealthSherpa ONE uses `context` only for routing and applies the agent and TPA identifiers (`_agent_id`, `tpa_slug`) from your approved account setup; caller-supplied `_agent_id`, `tpa_slug`, `actor.agent_id`, and `agent_of_record` are rejected.


        Successful responses include the application data, current validation state, and `next_actions[]` when actions are currently available. `next_actions[].href` values point to public `/v1/enrollments` routes. Service failures (missing or malformed idempotency keys, authorization failures, invalid JSON bodies, validation errors, and service-availability errors) are returned as a top-level `errors[]` array with `code`, `message`, and optional `field`. Edge-generated failures (API Gateway and WAF) instead use the unified `error` envelope: a missing or invalid API key returns `403 forbidden`, and `413`, `415`, edge `429`, and gateway `502`/`504` also use that envelope. See the `EnrollmentError` response for both shapes.'
      operationId: createEnrollment
      parameters:
      - name: Idempotency-Key
        in: header
        required: true
        description: Required partner-supplied request identifier (1-255 chars, `A-Z`, `a-z`, `0-9`, `-`, `_`). Scoped by API key and retained for 24 hours.
        schema:
          type: string
          pattern: ^[A-Za-z0-9_\-]{1,255}$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollmentRequest'
            example:
              context:
                product: ichra
                exchange: off_exchange
                plan_year: 2026
              external_id: crm-application-123
              plan_hios_id: 12345CO1234501
              desired_effective_date: '2026-01-01'
              applicants:
                primary:
                  first_name: Jane
                  last_name: Doe
                  date_of_birth: '1990-01-01'
                  gender: female
                  email: jane@example.com
                  phone: '5551234567'
                  signature: Jane Doe
              residential_address:
                street_address_1: 123 Main St
                city: Denver
                state: CO
                zip_code: '80202'
              special_enrollment_period:
                event_type: offered_ichra
                event_date: '2025-12-01'
      responses:
        '200':
          $ref: '#/components/responses/EnrollmentResponse'
        '201':
          $ref: '#/components/responses/EnrollmentResponse'
        '400':
          $ref: '#/components/responses/EnrollmentError'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '409':
          $ref: '#/components/responses/EnrollmentError'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '422':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /v1/enrollments/{enrollment_id}/submissions:
    post:
      tags:
      - Enrollments
      summary: Submit a direct enrollment application
      description: 'Approval-gated direct enrollment API for submitting an off-exchange application to the carrier. Send the HealthSherpa ONE `context` object with `product = "ichra"` and `exchange = "off_exchange"`; `plan_year` is not required for submission. Check `errors[]` on the application response before calling; submission fails with `422` if the application still has outstanding errors. A successful call returns `202 Accepted`; submission processing can continue asynchronously, so poll `GET /v1/enrollments/{enrollment_id}?product=ichra&exchange=off_exchange` until `policy_status` reflects the final outcome. If a network timeout or other unknown-result failure occurs after calling submit, poll readback before retrying so you do not turn an already-accepted submission into a duplicate/no-change response.


        For carriers that support post-enrollment changes, call `PUT /v1/enrollments/{enrollment_id}` to send supported changes, then call this endpoint again to resubmit the tracked changes. The API returns `422` if no changes have been made since the last submission. Service failures are returned as a top-level `errors[]` array with `code`, `message`, and optional `field`; failures blocked at the API edge use the unified `error` envelope.'
      operationId: submitEnrollmentApplication
      parameters:
      - name: enrollment_id
        in: path
        required: true
        description: Application id returned by `POST /v1/enrollments`.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubmitRequest'
            example:
              context:
                product: ichra
                exchange: off_exchange
      responses:
        '202':
          $ref: '#/components/responses/SubmitEnrollmentResponse'
        '400':
          $ref: '#/components/responses/EnrollmentError'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '404':
          $ref: '#/components/responses/EnrollmentError'
        '422':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /v1/enrollments/{enrollment_id}/cancellations:
    post:
      tags:
      - Enrollments
      summary: Cancel a direct enrollment application
      description: Approval-gated direct enrollment API for cancelling an off-exchange application that is pending effectuation. Send the HealthSherpa ONE `context` object with `product = "ichra"` and `exchange = "off_exchange"`. Not all carriers support cancellation; check the application read response for carrier capabilities before calling. A successful response returns `202 Accepted` with the updated status-change data. If a network timeout or other unknown-result failure occurs after calling cancel, poll `GET /v1/enrollments/{enrollment_id}?product=ichra&exchange=off_exchange` before retrying so you do not turn an already-accepted cancellation into a misleading not-allowed/no-op retry response. Service failures use a top-level `errors[]` array with `code`, `message`, and optional `field`; cancellation-not-allowed responses use `400 invalid_field_value`. Failures blocked at the API edge use the unified `error` envelope.
      operationId: cancelEnrollmentApplication
      parameters:
      - name: enrollment_id
        in: path
        required: true
        description: Application id returned by `POST /v1/enrollments`.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollmentActionContextRequest'
            example:
              context:
                product: ichra
                exchange: off_exchange
      responses:
        '202':
          $ref: '#/components/responses/EnrollmentStatusChangeResponse'
        '400':
          $ref: '#/components/responses/EnrollmentError'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '404':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /v1/enrollments/{enrollment_id}/terminations:
    post:
      tags:
      - Enrollments
      summary: Terminate an active policy
      description: Approval-gated direct enrollment API for terminating an active off-exchange policy before its natural expiration date. Send the HealthSherpa ONE `context` object with `product = "ichra"` and `exchange = "off_exchange"`. Not all carriers support termination; check the application read response for carrier capabilities before calling. A successful response returns `202 Accepted` with the updated status-change data. If a network timeout or other unknown-result failure occurs after calling terminate, poll `GET /v1/enrollments/{enrollment_id}?product=ichra&exchange=off_exchange` before retrying so you do not turn an already-accepted termination into a misleading not-allowed/no-op retry response. Service failures use a top-level `errors[]` array with `code`, `message`, and optional `field`; termination-not-allowed responses use `400 invalid_field_value`. Failures blocked at the API edge use the unified `error` envelope.
      operationId: terminateEnrollmentApplication
      parameters:
      - name: enrollment_id
        in: path
        required: true
        description: Application id returned by `POST /v1/enrollments`.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollmentActionContextRequest'
            example:
              context:
                product: ichra
                exchange: off_exchange
      responses:
        '202':
          $ref: '#/components/responses/EnrollmentStatusChangeResponse'
        '400':
          $ref: '#/components/responses/EnrollmentError'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '404':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /v1/enrollments/{enrollment_id}/payment_redirect:
    get:
      tags:
      - Enrollments
      summary: Get payment redirect data
      description: 'Approval-gated direct enrollment API for retrieving the carrier payment redirect data for an off-exchange application. Send `product=ichra` and `exchange=off_exchange` as required query parameters so HealthSherpa ONE can validate the direct-enrollment routing channel. Use this when the application response includes `payment_instructions.payment_redirect_supported = true`.


        The response includes the carrier endpoint URL, the HTTP method, and form fields to submit in the shopper''s browser. The keys and values in `fields` vary by carrier. Do not interpret, filter, rename, or modify them; include every returned field exactly as provided as hidden inputs in a form POST to `endpoint`. Service failures are returned as a top-level `errors[]` array with `code`, `message`, and optional `field`; failures blocked at the API edge use the unified `error` envelope.'
      operationId: getEnrollmentPaymentRedirect
      parameters:
      - name: enrollment_id
        in: path
        required: true
        description: Application id returned by `POST /v1/enrollments`.
        schema:
          type: string
      - name: product
        in: query
        required: true
        description: Direct-enrollment product. Must be `ichra`.
        schema:
          type: string
          enum:
          - ichra
      - name: exchange
        in: query
        required: true
        description: Direct-enrollment routing channel. Must be `off_exchange`.
        schema:
          type: string
          enum:
          - off_exchange
      responses:
        '200':
          $ref: '#/components/responses/PaymentRedirectResponse'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '404':
          $ref: '#/components/responses/EnrollmentError'
        '422':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /v1/enrollments/{enrollment_id}/supporting_documentation:
    post:
      tags:
      - Enrollments
      summary: Upload supporting documentation
      description: 'Approval-gated direct enrollment API for uploading a document that supports SEP eligibility for an off-exchange application. Some carriers require documentation for certain SEP reasons before coverage is effectuated. Use `GET /v1/enrollments/{enrollment_id}?product=ichra&exchange=off_exchange` to check `document_status`.


        Send the HealthSherpa ONE `context` object with `product = "ichra"` and `exchange = "off_exchange"` plus either `multipart/form-data` with a binary `file`, or `application/json` with the same file bytes in `file.content_base64`. HealthSherpa ONE does not persist the uploaded file after processing. Service failures are returned as a top-level `errors[]` array with `code`, `message`, and optional `field`; failures blocked at the API edge use the unified `error` envelope.'
      operationId: uploadEnrollmentSupportingDocumentation
      parameters:
      - name: enrollment_id
        in: path
        required: true
        description: Application id returned by `POST /v1/enrollments`.
        schema:
          type: string
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
              - context
              - file
              - document_type
              properties:
                context:
                  $ref: '#/components/schemas/EnrollmentActionContext'
                file:
                  type: string
                  format: binary
                  description: The document file. Supported formats are PDF, JPEG, and PNG.
                document_type:
                  type: string
                  enum:
                  - sep
                  description: Type of supporting document. Currently only `sep` is accepted.
          application/json:
            schema:
              $ref: '#/components/schemas/SupportingDocumentationRequest'
            example:
              context:
                product: ichra
                exchange: off_exchange
              file:
                filename: sep-proof.pdf
                content_type: application/pdf
                content_base64: JVBERi0xLjQg...
              document_type: sep
      responses:
        '200':
          $ref: '#/components/responses/SupportingDocumentationResponse'
        '201':
          $ref: '#/components/responses/SupportingDocumentationResponse'
        '400':
          $ref: '#/components/responses/EnrollmentError'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '404':
          $ref: '#/components/responses/EnrollmentError'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
  /v1/enrollments/{enrollment_id}:
    get:
      tags:
      - Enrollments
      summary: Fetch a direct enrollment application
      description: 'Approval-gated direct enrollment API for reading an application. Send `product=ichra` and `exchange=off_exchange` as required query parameters so HealthSherpa ONE can validate the direct-enrollment routing channel. HealthSherpa ONE returns the application details for the supplied id. `product` and `exchange` are the only supported read query parameters; `include_events`, `plan_year`, and other read-time query parameters are not supported. The application plan year is returned in the response. Service failures (authorization failures, invalid routing context, and service-availability errors) are returned as a top-level `errors[]` array with `code`, `message`, and optional `field`. Edge-generated failures (API Gateway and WAF) instead use the unified `error` envelope: a missing or invalid API key returns `403 forbidden`, and gateway `502`/`504` also use that envelope. See the `EnrollmentError` response for both shapes.'
      operationId: getEnrollment
      parameters:
      - name: enrollment_id
        in: path
        required: true
        description: Application id returned by `POST /v1/enrollments`.
        schema:
          type: string
      - name: product
        in: query
        required: true
        description: Direct-enrollment product. Must be `ichra`.
        schema:
          type: string
          enum:
          - ichra
      - name: exchange
        in: query
        required: true
        description: Direct-enrollment routing channel. Must be `off_exchange`.
        schema:
          type: string
          enum:
          - off_exchange
      responses:
        '200':
          $ref: '#/components/responses/EnrollmentResponse'
        '400':
          $ref: '#/components/responses/EnrollmentError'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '404':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
    put:
      tags:
      - Enrollments
      summary: Update a direct enrollment application
      description: 'Approval-gated direct enrollment API for updating an off-exchange application. Treat `PUT` as a full replacement-style update. Send the HealthSherpa ONE `context` object with `product = "ichra"`, `exchange = "off_exchange"`, and `plan_year` plus the full current application payload, including unchanged fields you want to preserve. When sending `applicants.primary`, include the full current primary applicant object because omitted primary fields may be cleared. Other products and exchanges are not supported here. HealthSherpa ONE maps `context.plan_year` to the application `plan_year`; `context` is not part of the stored application payload. Before submission, all application fields may be updated. After submission, carriers may restrict updates; check `supports_changes`, `can_change_plan`, and `can_report_change` on `GET /v1/enrollments/{enrollment_id}?product=ichra&exchange=off_exchange` before attempting post-enrollment changes. HealthSherpa ONE applies the agent and TPA identifiers (`_agent_id`, `tpa_slug`) from your approved account setup; caller-supplied `_agent_id`, `tpa_slug`, `actor.agent_id`, and `agent_of_record` are rejected.


        Successful responses include the updated application data and current validation state. Service failures (authorization failures, invalid JSON bodies, validation errors, and service-availability errors) are returned as a top-level `errors[]` array with `code`, `message`, and optional `field`. Edge-generated failures (API Gateway and WAF) instead use the unified `error` envelope: a missing or invalid API key returns `403 forbidden`, and `413`, `415`, edge `429`, and gateway `502`/`504` also use that envelope. See the `EnrollmentError` response for both shapes.'
      operationId: updateEnrollment
      parameters:
      - name: enrollment_id
        in: path
        required: true
        description: Application id returned by `POST /v1/enrollments`.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollmentUpdateRequest'
            example:
              context:
                product: ichra
                exchange: off_exchange
                plan_year: 2026
              applicants:
                primary:
                  first_name: Jane
                  last_name: Doe
                  date_of_birth: '1990-01-01'
                  gender: female
                  us_citizen: true
                  resides_in_state: true
                  uses_tobacco: false
                  language_spoken: english
                  language_written: english
                  email: jane.updated@example.com
                  phone: '5559876543'
                  signature: Jane Doe
      responses:
        '200':
          $ref: '#/components/responses/EnrollmentResponse'
        '400':
          $ref: '#/components/responses/EnrollmentError'
        '401':
          $ref: '#/components/responses/EnrollmentError'
        '403':
          $ref: '#/components/responses/EnrollmentError'
        '404':
          $ref: '#/components/responses/EnrollmentError'
        '409':
          $ref: '#/components/responses/EnrollmentError'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/EnrollmentError'
        '429':
          $ref: '#/components/responses/EnrollmentError'
        '500':
          $ref: '#/components/responses/EnrollmentError'
        '502':
          $ref: '#/components/responses/BadGateway'
        '503':
          $ref: '#/components/responses/EnrollmentError'
        '504':
          $ref: '#/components/responses/GatewayTimeout'
components:
  schemas:
    Signatures:
      type: object
      additionalProperties: true
      properties:
        signature_date:
          type: string
          format: date
          description: Date the application was signed. Required for submission. This is separate from `applicants.primary.signature`, the typed name.
        pediatric_dental_signature:
          type: string
        pediatric_dental_signature_date:
          type:
          - string
          - 'null'
          format: date
        translator_signature_date:
          type:
          - string
          - 'null'
          format: date
        state_supplement_primary_signature:
          type: string
          description: State-required supplemental form signature for the primary applicant. Required for CO, UT, NJ.
        state_supplement_spouse_signature:
          type: string
          description: State-required supplemental form signature for spouse. Required for UT.
        state_supplement_disclosures_signature:
          type: string
          description: State-required supplemental form disclosures signature for the primary applicant. Required for CO.
    EnrollmentResponse:
      allOf:
      - $ref: '#/components/schemas/ApplicationResponse'
      description: Successful direct enrollment application response. Successful responses can contain `errors[]` as submission-readiness data; error responses are documented separately under the `EnrollmentError` response.
    EnrollmentContext:
      type: object
      description: Routing context for direct enrollment create requests. Direct enrollment currently supports only `product = ichra` and `exchange = off_exchange`. Use `POST /v1/enrollment-sessions` for on-exchange enrollment.
      additionalProperties: true
      required:
      - product
      - exchange
      - plan_year
      properties:
        product:
          type: string
          enum:
          - ichra
        exchange:
          type: string
          enum:
          - off_exchange
        coverage_family:
          type: string
          enum:
          - medical
        coverage_type:
          type: string
          enum:
          - medical
        plan_year:
          type: integer
          minimum: 2020
          maximum: 2099
    Applicants:
      type: object
      additionalProperties: true
      required:
      - primary
      properties:
        primary:
          $ref: '#/components/schemas/PrimaryApplicant'
        dependents:
          type: array
          items:
            $ref: '#/components/schemas/Dependent'
    PaymentInstructions:
      type: object
      description: Carrier-specific payment guidance.
      additionalProperties: true
      properties:
        payment_required_with_submission:
          type: boolean
          description: '`true` when payment must be set before submission. Currently applies to Cigna and Elevance in-flow.'
        payment_redirect_supported:
          type: boolean
          description: '`true` when the carrier supports browser-based payment redirect.'
        pay_by_phone_supported:
          type: boolean
        payment_phone_number:
          type:
          - string
          - 'null'
    ApplicantBase:
      type: object
      additionalProperties: true
      properties:
        first_name:
          type: string
        middle_name:
          type: string
        last_name:
          type: string
        suffix:
          type: string
          enum:
          - Jr.
          - Sr.
          - II
          - III
          - IV
          - V
        ssn:
          type: string
          description: 9 digits, n

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