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

# Start a large upload

> Start a direct upload of up to 500 MB. Uploading takes three steps:

1. Call this endpoint. It returns an `upload_url` and the `headers` to send.
2. `PUT` the file's bytes to `upload_url` with exactly the returned `Content-Type`
   header and **no** `Authorization` header. The URL is valid for `expires_in` seconds.
3. Call `POST /file-cabinet/uploads/{versionId}/complete` with the returned `version_id`.

Send `folder_id` to create a new file, or `file_id` to upload a new version of an
existing file.

**Avoiding overwrites.** When uploading a new version, send an `If-Match` header with the
ID of the version you edited (`current_version.id` when you read the file). If another
version has become current since then, this call, or the later complete call, returns
`412` with `code: stale_edit` and the version that is current now. Without `If-Match`,
the last upload to finish wins.

Requires the `fileCabinet.write` permission.




## OpenAPI

````yaml /api-reference/build.yaml post /file-cabinet/uploads
openapi: 3.0.0
info:
  title: Luminous API
  version: 1.0.0
  description: API documentation for Luminous
servers:
  - url: https://{companyName}.api.joinluminous.com/external/api/v1
    variables:
      companyName:
        default: companyName
        description: Your company-specific subdomain
security: []
tags:
  - name: Products
    description: Get and manage products
  - name: Pricing
    description: Manage price schedules, levels, and customizations
  - name: BOMs
    description: Manage Bills of Materials (BOMs)
  - name: Labels
    description: Label rendering via Labelary ZPL service
  - name: Companies
    description: Manage business accounts and their associated data
  - name: Contacts
    description: Manage contact information for individuals
  - name: Suppliers
    description: Manage suppliers (factories) — vendors used on purchase orders
  - name: Supplier SKUs
    description: Manage per-supplier SKU and unit-cost overrides for products
  - name: Locations
    description: Manage warehouses and locations
  - name: Inventory
    description: Get and adjust product stock levels
  - name: Lots
    description: Create, update, and delete product lots (batches)
  - name: Transfer Orders
    description: Manage transfer orders
  - name: Fulfillment Orders
    description: Manage fulfillment orders and picklists
  - name: Freight
    description: >-
      Freightview LTL freight — quotes, booking and documents for fulfillment
      orders
  - name: Fulfillment Priority Lists
    description: Configure fulfillment routing priority lists
  - name: Purchase Orders
    description: Get and modify purchase orders
  - name: Supplier Portal
    description: >-
      Read a supplier's response to a purchase order and control the one-click
      portal link
  - name: Receiving Reports
    description: Manage receiving reports
  - name: Payment Obligations
    description: Manage payment obligations for purchase orders
  - name: Sales Orders
    description: Manage sales orders and sales order shipments
  - name: Purgatory
    description: >-
      Inspect and resolve non-posted sales orders in the purgatory staging
      workflow
  - name: PickFlow Warehouse
    description: >-
      Warehouse-floor lookups for PickFlow — barcode resolution, bin and product
      stock, bin search, and receivables
  - name: PickFlow Shipping
    description: >-
      Provider-agnostic shipping rates, services, packages, and label purchase
      for PickFlow
  - name: Cycle Counts
    description: >-
      Create, drive, and post PickFlow cycle counts — batches, per-warehouse
      sessions, and CSV import/export
  - name: Print Stations
    description: List paired print stations and enqueue print jobs to them
  - name: Invoices
    description: Get and manage invoices
  - name: Work Orders
    description: >-
      Manage work orders — production lifecycle, steps, materials, links,
      shipments, and comments
  - name: Production Batches
    description: Group and manage work orders as production batches
  - name: Bills
    description: >-
      Accounts payable bill management, payments, attachments, allocations, and
      variance
  - name: Prepayments
    description: Manage vendor prepayments and applications
  - name: Vendor Credits
    description: Manage vendor credits and applications
  - name: Vendor Returns
    description: Manage vendor returns and credit generation
  - name: Customer Returns
    description: Manage customer returns (sales returns), receiving, and restock behavior
  - name: Stock Snapshot
    description: Point-in-time stock snapshots with export support
  - name: Consumption
    description: Consumption reports and exports
  - name: Inventory Aging
    description: Cost-layer-based inventory aging reports
  - name: Bills Reports
    description: Accounts payable bills aging reports
  - name: Forecast
    description: Materialized forecast data
  - name: Reports
    description: Close the books, inventory discrepancy, transaction COGS, and EDI reports
  - name: Tags
    description: Add/remove tags across various resources
  - name: Custom Fields
    description: Get and set custom fields across various resources
  - name: Currency
    description: Currency configuration, exchange rates, and conversion
  - name: Drive
    description: >
      Browse, upload, tag and manage files in your Luminous Drive. An API token
      sees the shared

      drive only, never My Files or restricted folders and files. Every write
      and download made

      through the API is recorded in the file's activity log (`GET
      /file-cabinet/files/{id}/activity`)

      with `actor_kind: api_token`.
  - name: Integration Mappings
    description: Manage integration mappings for external systems
  - name: Integration Field Mappings
    description: Manage field-level mappings between Luminous and external systems
  - name: Automations
    description: Create, test, and inspect automation rules and their runs
paths:
  /file-cabinet/uploads:
    post:
      tags:
        - Drive
      summary: Start a large upload
      description: >
        Start a direct upload of up to 500 MB. Uploading takes three steps:


        1. Call this endpoint. It returns an `upload_url` and the `headers` to
        send.

        2. `PUT` the file's bytes to `upload_url` with exactly the returned
        `Content-Type`
           header and **no** `Authorization` header. The URL is valid for `expires_in` seconds.
        3. Call `POST /file-cabinet/uploads/{versionId}/complete` with the
        returned `version_id`.


        Send `folder_id` to create a new file, or `file_id` to upload a new
        version of an

        existing file.


        **Avoiding overwrites.** When uploading a new version, send an
        `If-Match` header with the

        ID of the version you edited (`current_version.id` when you read the
        file). If another

        version has become current since then, this call, or the later complete
        call, returns

        `412` with `code: stale_edit` and the version that is current now.
        Without `If-Match`,

        the last upload to finish wins.


        Requires the `fileCabinet.write` permission.
      operationId: initiateDriveUpload
      parameters:
        - in: header
          name: If-Match
          required: false
          schema:
            type: string
          example: '"33"'
          description: >
            ID of the version you edited, optionally quoted (a `W/` prefix is
            ignored). Only

            valid with `file_id`. A non-numeric value, or `If-Match` without
            `file_id`, returns `422`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - size
              properties:
                name:
                  type: string
                  maxLength: 200
                  description: File name, including the extension
                  example: STYLE123_BLK_01.jpg
                size:
                  type: integer
                  minimum: 1
                  description: >-
                    File size in bytes (max 500 MB). Must match the uploaded
                    bytes.
                mime_type:
                  type: string
                  maxLength: 150
                  nullable: true
                  example: image/jpeg
                folder_id:
                  type: integer
                  description: >-
                    Folder to create the file in. Required unless `file_id` is
                    sent.
                file_id:
                  type: integer
                  description: >-
                    Existing file to add a new version to. Required unless
                    `folder_id` is sent.
      responses:
        '201':
          description: Upload started
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      file_id:
                        type: integer
                      version_id:
                        type: integer
                        description: >-
                          Pass to `POST
                          /file-cabinet/uploads/{versionId}/complete`
                      upload_url:
                        type: string
                        description: Pre-signed URL to PUT the bytes to
                      method:
                        type: string
                        enum:
                          - PUT
                      headers:
                        type: object
                        description: Headers to send with the PUT
                        example:
                          Content-Type: image/jpeg
                      expires_in:
                        type: integer
                        description: Seconds until `upload_url` expires
                        example: 900
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '403':
          description: The token's owner lacks the required Drive permission
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Not found or not visible to API tokens
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '412':
          description: >
            Stale edit: the request carried `If-Match`, and another version of
            the file became

            current after the version you edited.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: >-
                      Someone saved a newer version of this file after you
                      opened it.
                  code:
                    type: string
                    enum:
                      - stale_edit
                  current_version:
                    allOf:
                      - type: object
                        description: One uploaded version of a Drive file.
                        properties:
                          id:
                            type: integer
                            example: 33
                          version_number:
                            type: integer
                            example: 2
                          size_bytes:
                            type: integer
                            example: 482113
                          mime_type:
                            type: string
                            nullable: true
                            example: image/jpeg
                          original_name:
                            type: string
                            nullable: true
                            description: File name as uploaded
                            example: STYLE123_BLK_01.jpg
                          status:
                            type: string
                            description: >-
                              Upload status. Only `ready` versions can be
                              downloaded.
                            example: ready
                          uploaded_by:
                            type: integer
                            nullable: true
                            description: ID of the user who uploaded the version
                          completed_at:
                            type: string
                            format: date-time
                            nullable: true
                          created_at:
                            type: string
                            format: date-time
                            nullable: true
                    nullable: true
                    description: The version that is current now
        '422':
          description: Validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
      security:
        - BearerAuth: []
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Authenticate using a bearer token. To create a token, navigate to
        /settings/api-tokens and click Create API Token.

````

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