> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dataspike.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Answer an open information request

> Autosaves the answers to the round in `remediation[]` of the widget state. Same soft draft validation as the section form (format issues come back in errors[] while the save succeeds); the round is closed by POST /api/v4/kyb/widget/{publicId}/submit, which refuses while any target is still unanswered.

Targets carry their own `section_key` because a round crosses sections. Only the FIELD targets of the live round are accepted: anything else is a 409 `not_requested`, a document group included, since a group is answered by uploading through POST /api/v4/upload/kyb/{publicId}/documents.

`remediation` in the response is the round after this write, the same block the widget state carries as `info_request`: `items_open` counts the targets still outstanding.



## OpenAPI

````yaml https://api.dataspike.io/openapi/kyb/public.json post /api/v4/kyb/widget/{publicId}/remediation
openapi: 3.1.0
info:
  description: Know Your Business (KYB) — case creation and the embedded onboarding widget.
  title: Dataspike KYB API
  version: '1.0'
servers: []
security: []
paths:
  /api/v4/kyb/widget/{publicId}/remediation:
    post:
      tags:
        - KYB Widget
      summary: Answer an open information request
      description: >-
        Autosaves the answers to the round in `remediation[]` of the widget
        state. Same soft draft validation as the section form (format issues
        come back in errors[] while the save succeeds); the round is closed by
        POST /api/v4/kyb/widget/{publicId}/submit, which refuses while any
        target is still unanswered.


        Targets carry their own `section_key` because a round crosses sections.
        Only the FIELD targets of the live round are accepted: anything else is
        a 409 `not_requested`, a document group included, since a group is
        answered by uploading through POST
        /api/v4/upload/kyb/{publicId}/documents.


        `remediation` in the response is the round after this write, the same
        block the widget state carries as `info_request`: `items_open` counts
        the targets still outstanding.
      operationId: POST_/api/v4/kyb/widget/:publicId/remediation
      parameters:
        - description: KYB case public id.
          in: path
          name: publicId
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveRemediationRequest'
          application/xml:
            schema:
              $ref: '#/components/schemas/SaveRemediationRequest'
        description: Request body for kyb.SaveRemediationRequest
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: d5293a33-1d10-4aa2-8ff9-4a2c9a2d1e19
            application/xml:
              schema:
                $ref: d5293a33-1d10-4aa2-8ff9-4a2c9a2d1e19
          description: OK
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrCaseNotFound'
            application/xml:
              schema:
                $ref: '#/components/schemas/ErrCaseNotFound'
          description: Case not found.
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrCaseLocked'
            application/xml:
              schema:
                $ref: '#/components/schemas/ErrCaseLocked'
          description: >-
            `case_locked` when the case does not accept writes at all, or
            `not_requested` when there is no open information request or it did
            not ask for one of these targets.
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrUnknownSectionOrField'
            application/xml:
              schema:
                $ref: '#/components/schemas/ErrUnknownSectionOrField'
          description: Invalid value for a closed-set field.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaveRemediationResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/SaveRemediationResponse'
          description: Answers saved.
components:
  schemas:
    SaveRemediationRequest:
      description: SaveRemediationRequest schema
      properties:
        targets:
          items:
            properties:
              field_key:
                example: legal_name
                type: string
              section_key:
                example: business
                type: string
              value:
                example: '"Acme Holdings Inc."'
            required:
              - field_key
              - section_key
            type: object
            x-fuego-required-marker: true
          type: array
      required:
        - targets
      type: object
    ErrCaseNotFound:
      description: ErrCaseNotFound schema
      example:
        code: case_not_found
        message: Case not found
      properties:
        code:
          example: email_otp_expired
          type: string
        message:
          example: OTP has expired
          type: string
        param:
          nullable: true
          type: string
      type: object
    ErrCaseLocked:
      description: ErrCaseLocked schema
      example:
        code: case_locked
        message: Case is locked and cannot be modified
      properties:
        code:
          example: email_otp_expired
          type: string
        message:
          example: OTP has expired
          type: string
        param:
          nullable: true
          type: string
      type: object
    ErrUnknownSectionOrField:
      description: ErrUnknownSectionOrField schema
      example:
        code: unknown_field
        message: Unknown field
        param: not_a_field
      properties:
        code:
          example: email_otp_expired
          type: string
        message:
          example: OTP has expired
          type: string
        param:
          nullable: true
          type: string
      type: object
    SaveRemediationResponse:
      description: SaveRemediationResponse schema
      properties:
        errors:
          items:
            properties:
              code:
                enum:
                  - required
                  - document_required
                  - min_one_owner_required
                  - ownership_total_must_be_100
                  - invalid_number
                  - invalid_email
                  - invalid_date
                  - invalid_bool
                  - invalid_option
                  - invalid_country
                  - too_short
                  - too_long
                  - invalid_format
                  - kyc_required
                  - date_in_future
                  - date_implausible
                  - underage
                example: invalid_email
                type: string
              field:
                example: contact_email
                type: string
              message:
                example: Invalid email address
                type: string
            type: object
          type: array
        remediation:
          nullable: true
          properties:
            items_open:
              example: 1
              type: integer
            items_total:
              example: 2
              type: integer
            status:
              enum:
                - draft
                - sent
                - received
                - canceled
              example: sent
              type: string
          type: object
        saved:
          example: true
          type: boolean
      type: object

````