> ## 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.

# Get the case's current information request

> Remediation is the targeted fix loop: the officer asks the merchant to correct specific fields without redoing the application. This returns the case's current round — the one still holding open items — with every item in it, both audiences and all statuses, so the dashboard can render the full per-field thread.

`status` is derived from the items: **draft** (nothing sent yet, dashboard-only), **sent** (with the applicant), **received** (answered), **canceled** (withdrawn). Returns `null` when the officer has not started a round.

Each item carries what was asked AND what came back: `last_value` is the target's value when the ask went out, `new_value` the applicant's answer. A document target renders both as a file list (`[{id,name}]`). Fetch those files by id through the org-scoped document endpoint, never by joining the case's own document list: every group but `additional` holds a single file, so answering one replaces rather than accumulates and the file a `last_value` names is usually no longer tagged to the case. The row and the blob both outlive that, and the read by id is what keeps the ref good.

**These are live.** The applicant's autosave lands in the store this reads, so polling this endpoint shows their answers as they type — no second call to the case detail and no join on section_key + field_key.

`new_value` is **null until the applicant answers**, then carries what they sent — including when they re-enter the value that was already there, which is a legitimate answer to "confirm this is correct" and is reported as one even though it equals `last_value`. For a **document** target the answer is an upload: `new_value` stays null while the group holds only the files it held at send, and becomes the group's whole current file list once a new one arrives. An unsent item reports neither value.

**Answering takes an act, not a state**, and the re-submit gate agrees field for field with what you read here: asking to correct an already-filled field or to replace a document that is already there cannot be satisfied by submitting untouched, and a file uploaded and then deleted again leaves the ask outstanding.



## OpenAPI

````yaml https://api.dataspike.io/openapi/kyb/public.json get /webapi/v4/kyb/organization/{organizationId}/verifications/{caseId}/info-request
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:
  /webapi/v4/kyb/organization/{organizationId}/verifications/{caseId}/info-request:
    get:
      tags:
        - KYB Remediation
      summary: Get the case's current information request
      description: >-
        Remediation is the targeted fix loop: the officer asks the merchant to
        correct specific fields without redoing the application. This returns
        the case's current round — the one still holding open items — with every
        item in it, both audiences and all statuses, so the dashboard can render
        the full per-field thread.


        `status` is derived from the items: **draft** (nothing sent yet,
        dashboard-only), **sent** (with the applicant), **received** (answered),
        **canceled** (withdrawn). Returns `null` when the officer has not
        started a round.


        Each item carries what was asked AND what came back: `last_value` is the
        target's value when the ask went out, `new_value` the applicant's
        answer. A document target renders both as a file list (`[{id,name}]`).
        Fetch those files by id through the org-scoped document endpoint, never
        by joining the case's own document list: every group but `additional`
        holds a single file, so answering one replaces rather than accumulates
        and the file a `last_value` names is usually no longer tagged to the
        case. The row and the blob both outlive that, and the read by id is what
        keeps the ref good.


        **These are live.** The applicant's autosave lands in the store this
        reads, so polling this endpoint shows their answers as they type — no
        second call to the case detail and no join on section_key + field_key.


        `new_value` is **null until the applicant answers**, then carries what
        they sent — including when they re-enter the value that was already
        there, which is a legitimate answer to "confirm this is correct" and is
        reported as one even though it equals `last_value`. For a **document**
        target the answer is an upload: `new_value` stays null while the group
        holds only the files it held at send, and becomes the group's whole
        current file list once a new one arrives. An unsent item reports neither
        value.


        **Answering takes an act, not a state**, and the re-submit gate agrees
        field for field with what you read here: asking to correct an
        already-filled field or to replace a document that is already there
        cannot be satisfied by submitting untouched, and a file uploaded and
        then deleted again leaves the ask outstanding.
      operationId: >-
        GET_/webapi/v4/kyb/organization/:organizationId/verifications/:caseId/info-request
      parameters:
        - description: Organization id.
          in: path
          name: organizationId
          required: true
          schema:
            type: string
        - description: KYB case id (the `id` from the list).
          in: path
          name: caseId
          required: true
          schema:
            type: string
      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.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InfoRequest'
            application/xml:
              schema:
                $ref: '#/components/schemas/InfoRequest'
          description: The current round, or null when there is none.
      security:
        - Session: []
components:
  schemas:
    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
    InfoRequest:
      description: InfoRequest schema
      properties:
        case_id:
          example: 019f179b-0fa7-72c8-818e-819652540477
          type: string
        case_status:
          example: in_remediation
          type: string
        created_at:
          format: date-time
          type: string
        id:
          example: 019f179b-0fa7-72c8-818e-819652540477
          type: string
        items:
          items:
            properties:
              audience:
                enum:
                  - merchant
                example: merchant
                type: string
              canceled_at:
                format: date-time
                nullable: true
                type: string
              created_at:
                format: date-time
                type: string
              created_by:
                example: 019f1383-8f38-7d31-b921-39310a19b444
                type: string
              field_key:
                example: registration_number
                type: string
              id:
                example: 019f179b-0fa7-72c8-818e-819652540477
                type: string
              last_value:
                nullable: true
              message:
                example: The number does not match the registry, please re-enter it.
                type: string
              new_value:
                nullable: true
              request_id:
                example: 019f179b-0fa7-72c8-818e-819652540477
                type: string
              resolved_at:
                format: date-time
                nullable: true
                type: string
              section_key:
                example: registration
                type: string
              status:
                enum:
                  - open
                  - resolved
                  - canceled
                example: open
                type: string
              target_kind:
                enum:
                  - field
                  - document
                example: field
                type: string
            type: object
          type: array
        received_at:
          format: date-time
          nullable: true
          type: string
        sent_at:
          format: date-time
          nullable: true
          type: string
        status:
          enum:
            - draft
            - sent
            - received
            - canceled
          example: draft
          type: string
        widget_url:
          example: https://kyb.dataspike.io/KYB0123456789abcdef
          nullable: true
          type: string
      type: object
  securitySchemes:
    Session:
      description: Session cookie for web dashboard authentication.
      in: cookie
      name: ds-prod-session
      type: apiKey

````