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

# Set service fee

> Set the per-unit service fee (`service_unit_price`) on a draft, planned or in-progress work order.
Returns the work order.

- The fee is one value: a second call replaces the first. To add up several charges, use
  extra-cost lines (`POST /work-orders/{workOrderId}/extra-costs`).
- A fee of `0` is not "no fee": at completion, a zero fee falls back to the produced SKU's
  manufacturing fee.
- At completion, the fee multiplied by the quantity produced may not exceed 99,999,999.99; a
  completion over it is refused with `422` and that step posts nothing.
- Work orders in any other status return `422` and nothing changes.




## OpenAPI

````yaml /api-reference/build.yaml patch /work-orders/{workOrderId}/service-fee
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:
  /work-orders/{workOrderId}/service-fee:
    patch:
      tags:
        - Work Orders
      summary: Set service fee
      description: >
        Set the per-unit service fee (`service_unit_price`) on a draft, planned
        or in-progress work order.

        Returns the work order.


        - The fee is one value: a second call replaces the first. To add up
        several charges, use
          extra-cost lines (`POST /work-orders/{workOrderId}/extra-costs`).
        - A fee of `0` is not "no fee": at completion, a zero fee falls back to
        the produced SKU's
          manufacturing fee.
        - At completion, the fee multiplied by the quantity produced may not
        exceed 99,999,999.99; a
          completion over it is refused with `422` and that step posts nothing.
        - Work orders in any other status return `422` and nothing changes.
      operationId: updateWorkOrderServiceFee
      parameters:
        - in: path
          name: workOrderId
          required: true
          description: ID of the work order.
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - service_unit_price
              properties:
                service_unit_price:
                  type: number
                  minimum: 0
                  maximum: 99999999.99
                  description: Per-unit service fee, up to 6 decimal places.
                  example: 12.5
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: integer
                      work_order_number:
                        type: string
                      status:
                        type: string
                        description: >-
                          Work order status (e.g. draft, planned, in_progress,
                          completed, cancelled).
                      is_on_hold:
                        type: boolean
                      produced_sku_id:
                        type: integer
                        nullable: true
                        description: >-
                          ID of the SKU (request_for_quotes record) being
                          produced.
                      produced_sku:
                        type: object
                        nullable: true
                        description: Present only when the producedSku relation is loaded.
                        properties:
                          id:
                            type: integer
                          sku:
                            type: string
                          description:
                            type: string
                            nullable: true
                      planned_qty:
                        type: number
                        description: Quantity planned to be produced.
                      completion_trigger:
                        type: string
                        nullable: true
                        description: >-
                          How the work order is completed. `manual` closes only
                          when someone completes the work order, `finish_step`
                          closes once every step is finished, and `receipt`
                          closes when its finished goods are received. A work
                          order created without one gets the organization's
                          default completion trigger, which is `manual` unless
                          changed in Settings → Inventory.
                        enum:
                          - manual
                          - finish_step
                          - receipt
                      expected_completion_date:
                        type: string
                        format: date
                        nullable: true
                      created_at:
                        type: string
                        format: date-time
                      updated_at:
                        type: string
                        format: date-time
                      production_warehouse_id:
                        type: integer
                        nullable: true
                      production_warehouse:
                        type: object
                        nullable: true
                        description: >-
                          Present only when the productionWarehouse relation is
                          loaded.
                        properties:
                          id:
                            type: integer
                          name:
                            type: string
                      destination_warehouse_id:
                        type: integer
                        nullable: true
                      destination_warehouse:
                        type: object
                        nullable: true
                        description: >-
                          Present only when the destinationWarehouse relation is
                          loaded.
                        properties:
                          id:
                            type: integer
                          name:
                            type: string
                      vendor_id:
                        type: integer
                        nullable: true
                        description: Co-manufacturer (subcontract) vendor ID.
                      co_manufacturer_id:
                        type: integer
                        nullable: true
                        description: Alias of `vendor_id` (always the same value).
                      vendor:
                        type: object
                        nullable: true
                        description: Present only when the vendor relation is loaded.
                        properties:
                          id:
                            type: integer
                          name:
                            type: string
                      co_manufacturer:
                        type: object
                        nullable: true
                        description: >-
                          Alias of `vendor` (same `id` and `name`). Present only
                          when the vendor relation is loaded.
                        properties:
                          id:
                            type: integer
                          name:
                            type: string
                      bom_id:
                        type: integer
                        nullable: true
                      work_order_kind:
                        type: string
                        enum:
                          - build
                          - service
                        description: >-
                          What the work order does to its SKU. `build` (the
                          default for every existing work order) builds the SKU
                          from its BOM components. `service` sends an existing
                          piece of the SKU to a vendor and takes the same SKU
                          back with the labor added. Fixed at creation.
                      service_unit_price:
                        type: number
                        nullable: true
                        description: Per-unit service fee for subcontract production.
                      cost_rule_resolution:
                        type: object
                        nullable: true
                        description: >-
                          How the `service_unit_price` was priced by the
                          landed-cost / cost-rule engine. Returned on the list
                          (`GET /work-orders`) and single (`GET
                          /work-orders/{workOrderId}`) endpoints. The key is
                          omitted entirely when no resolution has been computed
                          for the work order — an absent key means "not
                          applicable", never "no rule applied".
                        properties:
                          used_cost_rule:
                            type: boolean
                            description: >-
                              True when a cost rule produced the price; false
                              for a fallback resolution.
                          cost_rule_id:
                            type: integer
                            nullable: true
                          cost_rule_name:
                            type: string
                            nullable: true
                          resolved_unit_cost:
                            type: number
                            nullable: true
                            description: The per-unit cost the engine resolved to.
                          fallback_source:
                            type: string
                            nullable: true
                            description: >-
                              Set when the price came from a fallback rather
                              than a cost rule (e.g. `MANUAL` for a manual
                              override). Null when a cost rule was used.
                          tier_min_qty:
                            type: number
                            nullable: true
                            description: Minimum quantity of the matched cost-rule tier.
                          breakdown:
                            type: array
                            description: >-
                              Ordered pricing steps, so a stacked fee (multiple
                              additive cost rules) can be taken apart. Empty
                              when there is no stored breakdown.
                            items:
                              type: object
                              properties:
                                effect:
                                  type: string
                                  description: >-
                                    The step's effect (e.g. how it altered the
                                    running cost). Defaults to `Unknown`.
                                description:
                                  type: string
                                  nullable: true
                                amount:
                                  type: string
                                  description: >-
                                    The step's amount, as a string. Defaults to
                                    `0`.
                                delta:
                                  type: string
                                  description: >-
                                    Change applied at this step, as a string.
                                    Defaults to `0`.
                                result:
                                  type: string
                                  description: >-
                                    Running total after this step, as a string.
                                    Defaults to `0`.
                                costRuleId:
                                  type: integer
                                  nullable: true
                                  description: >-
                                    Identity of the rule that contributed this
                                    step.
                                costRuleName:
                                  type: string
                                  nullable: true
                          next_tier_hint:
                            type: object
                            nullable: true
                            description: >-
                              Present only when a better-priced next tier
                              exists. Shows the quantity needed and the savings
                              available at that tier.
                            properties:
                              min_qty:
                                type: number
                                nullable: true
                              unit_cost:
                                type: number
                                nullable: true
                              savings:
                                type: number
                                nullable: true
                      notes:
                        type: string
                        nullable: true
                      hold_reason:
                        type: string
                        nullable: true
                      cancel_reason:
                        type: string
                        nullable: true
                      held_at:
                        type: string
                        format: date-time
                        nullable: true
                      created_by:
                        type: integer
                        nullable: true
                      updated_by:
                        type: integer
                        nullable: true
                      held_by:
                        type: integer
                        nullable: true
                      production_batch_id:
                        type: integer
                        nullable: true
                      steps:
                        type: array
                        description: >-
                          Production steps. Present only when the steps relation
                          is loaded.
                        items:
                          type: object
                          properties:
                            id:
                              type: integer
                            work_order_id:
                              type: integer
                            sequence:
                              type: integer
                              description: >-
                                Order of the step within the work order's
                                routing.
                            status:
                              type: string
                              description: >-
                                Step status (e.g. pending, in_progress,
                                completed, skipped).
                            output_sku_id:
                              type: integer
                              nullable: true
                            output_sku:
                              type: object
                              nullable: true
                              description: >-
                                Present only when the outputSku relation is
                                loaded.
                              properties:
                                id:
                                  type: integer
                                sku:
                                  type: string
                                description:
                                  type: string
                                  nullable: true
                            planned_qty:
                              type: number
                              description: Quantity planned to be produced by this step.
                            completed_qty:
                              type: number
                              description: Quantity completed so far for this step.
                            is_outside_processing:
                              type: boolean
                              description: >-
                                Whether this step is performed by an outside
                                (subcontract) vendor.
                            supply_mode:
                              type: string
                              nullable: true
                            vendor_id:
                              type: integer
                              nullable: true
                            skipped_at:
                              type: string
                              format: date-time
                              nullable: true
                            skipped_by:
                              type: integer
                              nullable: true
                            created_at:
                              type: string
                              format: date-time
                            updated_at:
                              type: string
                              format: date-time
                      custom_fields:
                        type: object
                        nullable: true
                        description: >-
                          Custom field key/value pairs. Present only when
                          loaded.
                        additionalProperties: true
                      alternate_ids:
                        type: array
                        description: >-
                          External alternate identifiers. Present only when
                          loaded.
                        items:
                          type: string
                      links:
                        type: object
                        description: HATEOAS links to related sub-resources.
                        properties:
                          self:
                            type: string
                          steps:
                            type: string
                          completions:
                            type: string
                          production_entries:
                            type: string
                          status_history:
                            type: string
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '404':
          description: Work order not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '422':
          description: >-
            Validation error, or the work order is not draft, planned or in
            progress.
          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.