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

# Save owners

> Replaces the owners list (replace-all). Reconciles person applicants: creates one for any entry without an applicant_id, updates links, and drops links no longer present (the person applicants stay). Owner government IDs are uploaded separately via the documents upload endpoint with `owner_id`.

Closed while an information request is open: remediation reopens individual FIELDS, and the ownership structure has no per-item lock to reopen, so the whole surface is a 409 `not_requested` until the request is answered or withdrawn.



## OpenAPI

````yaml https://api.dataspike.io/openapi/kyb/public.json put /api/v4/kyb/widget/{publicId}/owners
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}/owners:
    put:
      tags:
        - KYB Widget
      summary: Save owners
      description: >-
        Replaces the owners list (replace-all). Reconciles person applicants:
        creates one for any entry without an applicant_id, updates links, and
        drops links no longer present (the person applicants stay). Owner
        government IDs are uploaded separately via the documents upload endpoint
        with `owner_id`.


        Closed while an information request is open: remediation reopens
        individual FIELDS, and the ownership structure has no per-item lock to
        reopen, so the whole surface is a 409 `not_requested` until the request
        is answered or withdrawn.
      operationId: PUT_/api/v4/kyb/widget/:publicId/owners
      parameters:
        - description: KYB case public id.
          in: path
          name: publicId
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SaveOwnersRequest'
          application/xml:
            schema:
              $ref: '#/components/schemas/SaveOwnersRequest'
        description: Request body for kyb.SaveOwnersRequest
        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
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrInvalidBody'
            application/xml:
              schema:
                $ref: '#/components/schemas/ErrInvalidBody'
          description: Invalid request body.
        '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/ErrNotRequested'
            application/xml:
              schema:
                $ref: '#/components/schemas/ErrNotRequested'
          description: >-
            `not_requested` while an information request is open, or
            `case_locked` when the case does not accept writes at all.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaveOwnersResponse'
            application/xml:
              schema:
                $ref: '#/components/schemas/SaveOwnersResponse'
          description: Owners saved.
components:
  schemas:
    SaveOwnersRequest:
      description: SaveOwnersRequest schema
      properties:
        owners:
          items:
            properties:
              address_city:
                nullable: true
                type: string
              address_country:
                nullable: true
                type: string
              address_postal:
                nullable: true
                type: string
              address_state:
                nullable: true
                type: string
              address_street:
                nullable: true
                type: string
              applicant_id:
                nullable: true
                type: string
              citizenship:
                nullable: true
                type: string
              dob:
                nullable: true
                type: string
              email:
                nullable: true
                type: string
              full_name:
                nullable: true
                type: string
              id:
                nullable: true
                type: string
              mobile:
                nullable: true
                type: string
              ownership_pct:
                format: double
                nullable: true
                type: number
              role:
                nullable: true
                type: string
              ssn:
                nullable: true
                type: string
            type: object
          type: array
      type: object
    ErrInvalidBody:
      description: ErrInvalidBody schema
      example:
        code: invalid_body
        message: Invalid request body
      properties:
        code:
          example: email_otp_expired
          type: string
        message:
          example: OTP has expired
          type: string
        param:
          nullable: true
          type: string
      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
    ErrNotRequested:
      description: ErrNotRequested schema
      example:
        code: not_requested
        message: >-
          Only the requested items can be changed while an information request
          is open
      properties:
        code:
          example: email_otp_expired
          type: string
        message:
          example: OTP has expired
          type: string
        param:
          nullable: true
          type: string
      type: object
    SaveOwnersResponse:
      description: SaveOwnersResponse schema
      properties:
        owners:
          items:
            properties:
              address_city:
                nullable: true
                type: string
              address_country:
                nullable: true
                type: string
              address_postal:
                nullable: true
                type: string
              address_state:
                nullable: true
                type: string
              address_street:
                nullable: true
                type: string
              applicant_id:
                nullable: true
                type: string
              citizenship:
                nullable: true
                type: string
              dob:
                nullable: true
                type: string
              documents:
                items:
                  properties:
                    created_at:
                      format: date-time
                      type: string
                    editable:
                      example: true
                      type: boolean
                    filename:
                      example: w9.pdf
                      nullable: true
                      type: string
                    id:
                      example: 0195c1f0-1234-7000-8000-0123456789ab
                      type: string
                    type:
                      example: Bank Statement
                      type: string
                  type: object
                type: array
              editable:
                example: true
                type: boolean
              email:
                nullable: true
                type: string
              full_name:
                nullable: true
                type: string
              id:
                example: 0195c1f0-1234-7000-8000-0123456789ab
                type: string
              mobile:
                nullable: true
                type: string
              ownership_pct:
                format: double
                nullable: true
                type: number
              role:
                nullable: true
                type: string
              ssn:
                nullable: true
                type: string
            type: object
          type: array
      type: object

````