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

# Create a draft version from a rule spreadsheet

> Import a workbook as a new draft version.

A file with any unreadable cell is refused outright — the rows that
did parse are not imported. A rule table silently missing three of
its forty rows still evaluates and still passes review, so a partial
read is never a partial import. Parse the file first to see every
problem at once.

The draft records which file it came from, so the approver can see
at the gate what produced it. Importing changes nothing that runs:
the version arrives as a draft and goes through the same submit and
approve steps as any other.

**Required roles**: `author` or `workspace_admin`



## OpenAPI

````yaml post /api/decisions/{workspace}/{key}/versions/from-spreadsheet
openapi: 3.1.0
info:
  title: Nx1 AI API
  description: |

    AI API for Nx1 Data Platform Management and Automated Data Tasks.

    Authentication is required via PSK in Authorization header.

    Default PSK is | [ask a friend] |
  version: 0.10.2
servers: []
security: []
paths:
  /api/decisions/{workspace}/{key}/versions/from-spreadsheet:
    post:
      tags:
        - Decisions
      summary: Create a draft version from a rule spreadsheet
      description: |-
        Import a workbook as a new draft version.

        A file with any unreadable cell is refused outright — the rows that
        did parse are not imported. A rule table silently missing three of
        its forty rows still evaluates and still passes review, so a partial
        read is never a partial import. Parse the file first to see every
        problem at once.

        The draft records which file it came from, so the approver can see
        at the gate what produced it. Importing changes nothing that runs:
        the version arrives as a draft and goes through the same submit and
        approve steps as any other.

        **Required roles**: `author` or `workspace_admin`
      operationId: >-
        create_version_from_spreadsheet_api_decisions__workspace___key__versions_from_spreadsheet_post
      parameters:
        - name: workspace
          in: path
          required: true
          schema:
            type: string
            maxLength: 64
            pattern: ^[a-z0-9][a-z0-9-]{0,63}$
            description: Workspace slug.
            title: Workspace
          description: Workspace slug.
        - name: key
          in: path
          required: true
          schema:
            type: string
            maxLength: 64
            pattern: ^[a-z0-9][a-z0-9-]{0,63}$
            description: Decision key — a flat slug, never a path.
            title: Key
          description: Decision key — a flat slug, never a path.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: >-
                #/components/schemas/Body_create_version_from_spreadsheet_api_decisions__workspace___key__versions_from_spreadsheet_post
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionDetailResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '413':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Content Too Large
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Unprocessable Content
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - OAuth2AuthorizationCodeBearer: []
        - APIKeyHeader: []
components:
  schemas:
    Body_create_version_from_spreadsheet_api_decisions__workspace___key__versions_from_spreadsheet_post:
      properties:
        file:
          type: string
          contentMediaType: application/octet-stream
          title: File
          description: The `.xlsx` workbook to import.
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
          description: What changed and why.
        hit_policy:
          type: string
          title: Hit Policy
          description: '`first` or `collect`.'
          default: first
        sheet:
          anyOf:
            - type: string
            - type: 'null'
          title: Sheet
          description: Sheet to read.
      type: object
      required:
        - file
      title: >-
        Body_create_version_from_spreadsheet_api_decisions__workspace___key__versions_from_spreadsheet_post
    VersionDetailResponse:
      properties:
        workspace:
          type: string
          title: Workspace
        key:
          type: string
          title: Key
        version:
          type: integer
          title: Version
        content_sha:
          type: string
          title: Content Sha
        status:
          $ref: '#/components/schemas/DecisionVersionStatusEnum'
        notes:
          anyOf:
            - type: string
            - type: 'null'
          title: Notes
        created_by:
          type: string
          title: Created By
        created_at:
          type: string
          format: date-time
          title: Created At
        submitted_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Submitted By
        submitted_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Submitted At
        approved_by:
          anyOf:
            - type: string
            - type: 'null'
          title: Approved By
        approved_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Approved At
        source_instance:
          anyOf:
            - type: string
            - type: 'null'
          title: Source Instance
        source_version:
          anyOf:
            - type: integer
            - type: 'null'
          title: Source Version
        content:
          type: string
          title: Content
          description: Raw JDM JSON, byte-exact.
        edited_in_place:
          type: boolean
          title: Edited In Place
          description: >-
            True when an existing draft was rewritten rather than a new version
            added.
          default: false
      type: object
      required:
        - workspace
        - key
        - version
        - content_sha
        - status
        - created_by
        - created_at
        - content
      title: VersionDetailResponse
    ErrorResponse:
      properties:
        error:
          type: string
          title: Error
          description: A brief description of the error that occurred.
        code:
          type: integer
          title: Code
          description: The HTTP status code associated with the error.
          default: 500
      type: object
      required:
        - error
      title: ErrorResponse
    DecisionVersionStatusEnum:
      type: string
      enum:
        - draft
        - submitted
        - approved
        - retired
      title: DecisionVersionStatusEnum
      description: |-
        Lifecycle state of a single version.

        ``draft`` → ``submitted`` → ``approved``, with ``reject`` returning a
        submitted version to ``draft`` and ``retire`` taking an approved
        version out of circulation.
  securitySchemes:
    OAuth2AuthorizationCodeBearer:
      type: oauth2
      flows:
        authorizationCode:
          scopes: {}
          authorizationUrl: >-
            https://sso-rapid.rapid.nx1cloud.com/realms/rapid/protocol/openid-connect/auth
          tokenUrl: >-
            https://sso-rapid.rapid.nx1cloud.com/realms/rapid/protocol/openid-connect/token
    APIKeyHeader:
      type: apiKey
      in: header
      name: Authorization-PSK

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.