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

# Bulk reconcile bills to a purchase order

> Link up to 100 existing bills to one purchase order, then run the same receipt auto-allocation
as `POST /bills/{id}/auto-allocate` on each bill.

Bills are processed independently — one bill failing does not stop the others. The response is
`200` whenever the request body is valid, even if some (or all) bills fail; check each entry in
`results`.

- A bill already linked to the purchase order is treated as linked (`already_linked: true`) and
  is still allocated, so retrying the same `bill_ids` is safe.
- A per-bill `error` with `linked: true` means the purchase-order link was saved but allocation
  failed. Retrying that bill re-runs allocation without re-linking.

**What this call does not do**

- It links the bill to the purchase order at the header level only. It does not set
  `purchase_order_item_id` on bill line items.
- Auto-allocation matches a product line to a receipt line only when the bill item's
  `purchase_order_item_id` equals the receipt line's purchase order line. Lines without that id
  are counted in `skipped`. Lines are not matched by SKU.
- The purchase order's billed quantity is driven by each bill item's `purchase_order_item_id`,
  not by the header link. Set that field with `PUT /bills/{id}` when billed quantity should move.




## OpenAPI

````yaml /api-reference/build.yaml post /bills/bulk-reconcile
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:
  /bills/bulk-reconcile:
    post:
      tags:
        - Bills
      summary: Bulk reconcile bills to a purchase order
      description: >
        Link up to 100 existing bills to one purchase order, then run the same
        receipt auto-allocation

        as `POST /bills/{id}/auto-allocate` on each bill.


        Bills are processed independently — one bill failing does not stop the
        others. The response is

        `200` whenever the request body is valid, even if some (or all) bills
        fail; check each entry in

        `results`.


        - A bill already linked to the purchase order is treated as linked
        (`already_linked: true`) and
          is still allocated, so retrying the same `bill_ids` is safe.
        - A per-bill `error` with `linked: true` means the purchase-order link
        was saved but allocation
          failed. Retrying that bill re-runs allocation without re-linking.

        **What this call does not do**


        - It links the bill to the purchase order at the header level only. It
        does not set
          `purchase_order_item_id` on bill line items.
        - Auto-allocation matches a product line to a receipt line only when the
        bill item's
          `purchase_order_item_id` equals the receipt line's purchase order line. Lines without that id
          are counted in `skipped`. Lines are not matched by SKU.
        - The purchase order's billed quantity is driven by each bill item's
        `purchase_order_item_id`,
          not by the header link. Set that field with `PUT /bills/{id}` when billed quantity should move.
      operationId: bulkReconcileBills
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - purchase_order_id
                - bill_ids
              properties:
                purchase_order_id:
                  type: integer
                  description: ID of the purchase order to link every bill to. Must exist.
                  example: 12345
                bill_ids:
                  type: array
                  description: IDs of the bills to link and auto-allocate (1–100).
                  minItems: 1
                  maxItems: 100
                  items:
                    type: integer
                  example:
                    - 1
                    - 2
      responses:
        '200':
          description: >-
            Request processed. Inspect each entry in `results` for per-bill
            success or failure.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      purchase_order_id:
                        type: integer
                        example: 12345
                      results:
                        type: array
                        description: One entry per requested bill, in request order.
                        items:
                          type: object
                          properties:
                            bill_id:
                              type: integer
                              example: 1
                            linked:
                              type: boolean
                              description: >-
                                Whether the bill is linked to the purchase order
                                after this call.
                              example: true
                            already_linked:
                              type: boolean
                              description: >-
                                Present when `linked` is true. `true` if the
                                bill was already linked before this call.
                              example: false
                            allocated:
                              type: integer
                              description: >-
                                Present on success. Number of allocations
                                created.
                              example: 3
                            skipped:
                              type: integer
                              description: >-
                                Present on success. Number of bill items that
                                could not be matched to a receipt line.
                              example: 1
                            message:
                              type: string
                              description: Present on success. Auto-allocation summary.
                              example: >-
                                Auto-allocation complete: 3 allocation(s)
                                created, 1 item(s) skipped.
                            error:
                              type: string
                              description: >-
                                Present on failure (bill not found, link
                                rejected, or allocation failed).
                              example: >-
                                Purchase order must belong to the same vendor as
                                the bill.
              example:
                data:
                  purchase_order_id: 12345
                  results:
                    - bill_id: 1
                      linked: true
                      already_linked: false
                      allocated: 3
                      skipped: 1
                      message: >-
                        Auto-allocation complete: 3 allocation(s) created, 1
                        item(s) skipped.
                    - bill_id: 2
                      linked: false
                      error: >-
                        Purchase order must belong to the same vendor as the
                        bill.
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '422':
          description: >-
            Validation error — invalid body, or `purchase_order_id` does not
            exist
          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.