---
title: "Update a sale"
method: PUT
path: "/sales/{sale_id}"
tags: ["Sales"]
---

# Update a sale

`PUT /sales/{sale_id}`

Update an existing sale by ID.

🔒 Requires: `sales:write` scope

## Path parameters

- `sale_id` string, uuid, required

## Request body

- SaleUpdateRequest — Editable attributes of the sale.
  - `accounts_transaction_id` string — Xero invoice reference ID. Only editable for `ONACCOUNT` sales.
  - `attributes` string[] — An array of attributes
  - `customer` Customer
    - `balance` number, double — Customer's unpaid balance.
    - `company_name` string, nullable — Company name.
    - `created_at` string — Creation timestamp in UTC.
    - `custom_field_1` string, nullable — Custom field 1. Can be used to store random data.
    - `custom_field_2` string, nullable — Custom field 2.
    - `custom_field_3` string, nullable — Custom field 3.
    - `custom_field_4` string, nullable — Custom field 4.
    - `customer_code` string — Customer code used for claiming loyalty.
    - `customer_group_id` string — Customer group ID.
    - `date_of_birth` string, nullable — Birthday.
    - `deleted_at` string, nullable — Deletion timestamp in UTC.
    - `do_not_email` boolean — Indicates whether the customer opted out of email communications.
    - `email` string, nullable — Customer's email address.
    - `enable_loyalty` boolean
    - `enable_promotional_sms` boolean — Indicates whether the customer opted in to SMS communications.
    - `fax` string, nullable — Fax no.
    - `first_name` string, nullable, required — Customer's first name.
    - `gender` string, nullable — Customer's gender. Can be `M`, `F` or null.
    - `id` string — Auto-generated object ID.
    - `last_name` string, nullable, required — Customer 's last name.
    - `loyalty_balance` number, double — Customer's loyalty balance.
    - `mobile` string, nullable — Mobile phone no.
    - `name` string, nullable — Customers full name. **deprecated**
    - `note` string, nullable — Customer note.
    - `on_account_limit` number, double, nullable — Customer's OnAccount Limit.
    - `phone` string, nullable — Phone no.
    - `physical_address_1` string, nullable — Physical address, line 1.
    - `physical_address_2` string, nullable — Physical address, line 2.
    - `physical_city` string, nullable — Physical address, city.
    - `physical_country_id` string, nullable — Physical address, country code.
    - `physical_postcode` string, nullable — Physical address, post code.
    - `physical_state` string, nullable — Physical address, state.
    - `physical_suburb` string, nullable — Physical address, suburb.
    - `postal_address_1` string, nullable — Postal address, line 1.
    - `postal_address_2` string, nullable — Postal address, line 2.
    - `postal_city` string, nullable — Postal address, city.
    - `postal_country_id` string, nullable — Postal address, country code.
    - `postal_postcode` string, nullable — Postal address, post code.
    - `postal_state` string, nullable — Postal address, state.
    - `postal_suburb` string, nullable — Postal address, suburb.
    - `tax_id` string, nullable — Customer's tax ID.
    - `twitter` string, nullable — Twitter handle.
    - `updated_at` string — Last update timestamp in UTC.
    - `version` integer — Auto-incrementing object version number.
    - `website` string, nullable — Website URL.
    - `year_to_date` number, double — Customer's spending this year.
  - `customer_id` string, uuid — The ID of the customer associated with this sale.
  - `date` string — The date of the sale in RFC3339 format. If not provided will be added as the time the sale reached the server.
  - `fulfillment_details` FulfillmentDetail[] — Fulfillment details for DISPATCH or PICKUP fulfillments.
    - `note` string — The fulfillment note for fulfillments of the specified type.
    - `shipping_address_id` string, nullable — The ID of the shipping address to use for DISPATCH fulfillments. Either this or shipping_address_token must be provided for DISPATCH.
    - `shipping_address_token` string, nullable — The token of a newly created shipping address to use for DISPATCH fulfillments. Either this or shipping_address_id must be provided for DISPATCH.
    - `type` 'DISPATCH' | 'PICKUP' — The fulfillment type to which this fulfillment detail applies.
  - `fulfillment_outlet_id` string, uuid — The default outlet that should fulfill this sale when a line item does not specify its own `fulfilment_outlet_id`. Mutually exclusive with pick lists created via `/sales/{sale_id}/pick_lists`.
  - `invoice_number` string — The invoice number for the sale. If left null it will be populated by Lightspeed with the next available invoice number.
  - `line_items` SaleLineItem[] — Line items.
    - `_metadata` LineItemMetadata
      - `fulfillment_method` 'DISPATCH' | 'PICKUP' — The fulfillment type for this line item. Only used when creating new sales, ignored when updating existing sales.
      - `is_price_override` boolean — Indicates whether the price was overridden, preventing recalculation of the total price based on the price from the database.
      - `sequence` integer — Order number of the line item.
    - `attributes` LineItemAttribute[] — Additional line item attributes.
      - `name` string, required — Attribute name. (`line_note` for a line item note.)
      - `value` string, required — Attribute value. (For `line_note`, the string value of the line_item note.)
    - `fulfilment_outlet_id` string, uuid — The outlet that should fulfill this line item. Mutually exclusive with pick lists created via `/sales/{sale_id}/pick_lists`.
    - `id` string, uuid — Existing line item ID. If included in the POST request it will cause an update instead of a creating a new object.
    - `pricing` LineItemPricing, required
      - `adjustments` LineItemAdjustment[] — Adjustments.
        - `amount` AdjustmentAmount
          - `type` 'FIXED' | 'PERCENT', required — The value type of the adjustment.
          - `value` string, required — The value of the adjustment.
        - `name` string — The name of the adjustment.
        - `source` AdjustmentSource
          - `id` string, uuid — The ID of the source of the adjustment.
        - `target` AdjustmentTarget, required
          - `ids` string[] — An array of target IDs.
          - `method` 'PROPORTIONED' | 'EACH' | 'SINGLE', required — The method of the adjustment.
        - `type` 'NON_CASH_FEE' | 'DISCOUNT' | 'TIP', required — The type of the adjustment.
      - `cost` number, double — Unit cost of the line item
      - `discount` number, double — Discount value of the line item.
      - `loyalty_amount` number, double — The value of loyalty that will be incurred by the customer for this line item.
      - `price` number, double, required — Unit price of the line item.
    - `product` LineItemProduct, required
      - `id` string, uuid, required — The ID of the product associated with this line item.
    - `quantity` number, double, required — Quantity of products for the line item.
    - `source` LineItemSource
      - `author_id` string, uuid — The ID of the salesperson associated with this line item. Salesperson IDs can be retrieved from the /api/2.0/users endpoint. Only needed when this line item is not sold by current login user.
      - `register_id` string, uuid — The ID of the register which was used to add this line item to the sale.
    - `status` string — If defined as `CONFIRMED` for pending sales, the line item will be added as **read-only**.
    - `tax` LineItemTax, required
      - `amount` number, double, required — The unit tax value associated with this line item.
      - `id` string, uuid, required — The ID of the tax associated with this line item. Tax IDs can be retrieved from the /api/2.0/taxes endpoint; for tax-free items, please use the ID of the tax named 'No Tax'
  - `note` string — A note on the sale entered by the cashier.
  - `payments` SalePayment[] — Payments.
    - `amount` number, double, required — Payment amount.
    - `billing_address_id` string, nullable — The ID of the billing address to use for this payment. Either this or billing_address_token must be provided when billing address is required.
    - `billing_address_token` string, nullable — The token of the billing address to use for this payment. Required when billing_address_id is provided.
    - `date` string — The date and time of the payment.
    - `id` string, uuid — Existing payment ID. If included in the POST request it will cause an update instead of a creating a new supplier.
    - `source` PaymentSource
      - `register_id` string, uuid — The ID of the register used to add this payment to the sale.
    - `type` PaymentTypeConfig, required
      - `config_id` string, uuid, required — Payment type id to be used for the payment.
  - `pricing` SalePricing
    - `adjustments` SaleAdjustment[] — Adjustments.
      - `amount` AdjustmentAmount
        - `type` 'FIXED' | 'PERCENT', required — The value type of the adjustment.
        - `value` string, required — The value of the adjustment.
      - `name` string — The name of the adjustment.
      - `source` AdjustmentSource
        - `id` string, uuid — The ID of the source of the adjustment.
      - `type` 'NON_CASH_FEE' | 'DISCOUNT' | 'TIP', required — The type of the adjustment.
  - `service_fields` object
    - `service_action` string
    - `service_agenda` DailyAgenda
      - `date` string
      - `minutes_scheduled` integer
    - `service_items` ServiceItems
      - `item_details` ItemDetails
        - `description` string
        - `initial_condition` string
        - `item_id` string
        - `item_name` string
        - `serial_number` string
      - `location` string
    - `service_line_items` ServiceOrderLineItem[] — An array of service line items.
      - `_metadata` LineItemMetadata
        - `fulfillment_method` 'DISPATCH' | 'PICKUP' — The fulfillment type for this line item. Only used when creating new sales, ignored when updating existing sales.
        - `is_price_override` boolean — Indicates whether the price was overridden, preventing recalculation of the total price based on the price from the database.
        - `sequence` integer — Order number of the line item.
      - `attributes` LineItemAttribute[] — Additional line item attributes.
        - `name` string, required — Attribute name. (`line_note` for a line item note.)
        - `value` string, required — Attribute value. (For `line_note`, the string value of the line_item note.)
      - `fulfilment_outlet_id` string, uuid — The outlet that should fulfill this line item. Mutually exclusive with pick lists created via `/sales/{sale_id}/pick_lists`.
      - `id` string, uuid — Existing line item ID. If included in the POST request it will cause an update instead of a creating a new object.
      - `pricing` LineItemPricing, required
        - `adjustments` LineItemAdjustment[] — Adjustments.
          - `amount` AdjustmentAmount
            - `type` 'FIXED' | 'PERCENT', required — The value type of the adjustment.
            - `value` string, required — The value of the adjustment.
          - `name` string — The name of the adjustment.
          - `source` AdjustmentSource
            - `id` string, uuid — The ID of the source of the adjustment.
          - `target` AdjustmentTarget, required
            - `ids` string[] — An array of target IDs.
            - `method` 'PROPORTIONED' | 'EACH' | 'SINGLE', required — The method of the adjustment.
          - `type` 'NON_CASH_FEE' | 'DISCOUNT' | 'TIP', required — The type of the adjustment.
        - `cost` number, double — Unit cost of the line item
        - `discount` number, double — Discount value of the line item.
        - `loyalty_amount` number, double — The value of loyalty that will be incurred by the customer for this line item.
        - `price` number, double, required — Unit price of the line item.
      - `product` LineItemProduct, required
        - `id` string, uuid, required — The ID of the product associated with this line item.
      - `quantity` number, double, required — Quantity of products for the line item.
      - `source` LineItemSource
        - `author_id` string, uuid — The ID of the salesperson associated with this line item. Salesperson IDs can be retrieved from the /api/2.0/users endpoint. Only needed when this line item is not sold by current login user.
        - `register_id` string, uuid — The ID of the register which was used to add this line item to the sale.
      - `status` string — If defined as `CONFIRMED` for pending sales, the line item will be added as **read-only**.
      - `tax` LineItemTax, required
        - `amount` number, double, required — The unit tax value associated with this line item.
        - `id` string, uuid, required — The ID of the tax associated with this line item. Tax IDs can be retrieved from the /api/2.0/taxes endpoint; for tax-free items, please use the ID of the tax named 'No Tax'
      - `promotions` PromotionDescription[]
        - `description` string — A short description for the promotion.
        - `id` string — Auto-generated object ID.
        - `name` string — The name of the promotion.
      - `tax_component` LineItemTaxComponent[]
        - `rate_id` string, required — Tax rate ID.
        - `total_tax` number, double, required — Tax total.
  - `short_code` string — Short, unique code to be printed on the receipt for loyalty tracking purposes.
  - `source` SaleRequestSource, required
    - `author_id` string, uuid, required — The ID of the user (cashier) who created the sale.
    - `id` string — The ID of the sale on the client side or another system where the sale was originally created.
    - `register_id` string, uuid — The ID of the register where the sale was created.
    - `type` string — This is the identifier of the 3rd party system that the `source_id` is associated with. 'Xero' or 'Magento' would be examples.
  - `state` 'parked' | 'pending' | 'voided' | 'closed', required — State of the sale.

## Response `200`

The updated sale.

- SaleCreateResponse
  - `data` Sale — Sale object
    - `_metadata` SaleResponseMetadata
      - `complete_open_sequence_id` string — The sequence ID of the register open at the time the sale was completed.
      - `has_unsynced_on_account_payments` boolean — Whether the sale has unsynced on-account payments.
      - `version` integer — Monotonically increasing version number of the sale.
      - `xero_reference` string — Xero invoice reference ID. Only editable for `ONACCOUNT` sales.
    - `adjustments` SaleResponseAdjustment[] — Collection of aggregated adjustments.
      - `adjustment_type` string — The adjustment type, such as `NON_CASH_FEE` or `SURCHARGE`.
      - `name` string — Display name from the first adjustment in the compounded adjustment group.
      - `tax_components` LineItemTaxComponentResponse[] — Tax component totals for this adjustment group.
        - `rate_id` string — Tax rate ID.
        - `total_tax` number, double — Tax total.
      - `total` number, double — Sum of fixed, non-each adjustment values for this credit or debit adjustment group.
    - `attributes` string[] — Attributes for this sale.
    - `created_at` string — Creation timestamp in UTC.
    - `customer_id` string, uuid — The ID of the customer associated with this sale.
    - `date` string — Sale timestamp in UTC.
    - `deleted_at` string — Deletion timestamp in UTC.
    - `ecom_custom_charges` EcomCustomCharge[] — Collection of eCom custom charges associated with the sale.
      - `name` string — Display name of eCom custom charge
      - `source_id` string — Unique identifier of eCom custom charge type
      - `tax_components` EcomCustomChargeTaxComponent[] — Collection of tax components associated with specific eCom custom charge
        - `rate_id` string — Tax rate ID.
        - `total_tax` number, double — Tax total.
      - `total` number, double — Tax exclusive amount for specific eCom custom charge
      - `total_incl` number, double — Tax inclusive amount for specific eCom custom charge
      - `total_tax` number, double — Total tax for specific eCom custom charge
    - `external_applications` SaleExternalApplication[] — External applications associated with the sale.
      - `application_id` string — ID of the external application.
      - `created_at` string — Creation timestamp in UTC.
      - `external_id` string — ID from the external application.
      - `updated_at` string — Last update timestamp in UTC.
      - `version` string — Version of the external application record.
    - `id` string, uuid — Auto-generated object ID.
    - `invoice_number` string — Invoice number which if provided, should use the prefix and suffix defined for the register.
    - `line_items` SaleResponseLineItem[] — Collection of line items.
      - `_metadata` LineItemResponseMetadata
        - `is_price_override` boolean — Indicates whether the price was overridden, preventing recalculation of the total price based on the price from the database.
        - `sequence` integer — Order of the line item in the sale.
        - `tax_components` LineItemTaxComponentResponse[] — Tax components for this line item.
          - `rate_id` string — Tax rate ID.
          - `total_tax` number, double — Tax total.
      - `customizations` LineItemCustomization[] — Product customizations for this line item.
        - `field_type` string — The field type of the customization.
        - `files` CustomizationFile[] — Files attached to this customization.
          - `filename` string — The name of the file.
          - `id` string — The ID of the file.
          - `provider` string — Storage provider of the file.
          - `size` integer — Size of the file in bytes.
        - `id` string — The ID of the customization.
        - `name` string — The name of the customization.
        - `value` string — The value of the customization.
      - `gift_card_number` string — Gift card number if this line item is a gift card.
      - `id` string, uuid — The ID of this line item.
      - `note` string — Line item note.
      - `pricing` LineItemResponsePricing
        - `cost` number, double — Unit cost for the line item.
        - `cost_total` number, double — Total cost for the line item (`cost` × `quantity`).
        - `discount` number, double — Discount value of the line item.
        - `discount_total` number, double — Total discount for the line item (`discount` × `quantity`).
        - `loyalty_amount` number, double — The value that should be added to associated customer's loyalty balance.
        - `loyalty_amount_total` number, double — Total loyalty value for the line item (`loyalty_amount` × `quantity`).
        - `price` number, double — Unit price of the line item.
        - `total` number, double — Total price for the line item.
      - `product` LineItemProductDetails
        - `id` string, uuid — The ID of the product associated with this line item.
      - `promotions` LineItemPromotion[] — Promotions applied to this line item.
        - `amount` number, double — Promotion discount amount.
        - `id` string — Promotion ID.
        - `name` string — Promotion name.
        - `promo_code` string — Promo code used.
        - `promo_code_id` string — Promo code ID.
      - `quantity` number, double — Quantity of products for the line item.
      - `return` LineItemReturn
        - `is_return` boolean — Indicates whether this line item is a return.
        - `reason` string — Return reason.
      - `salesperson_id` string, uuid — The ID of the salesperson associated with this line item. Salesperson IDs can be retrieved from the /api/2.0/users endpoint. Only needed when this line item is not sold by current login user.
      - `source` LineItemResponseSource
        - `register_id` string, uuid — The ID of the register which was used to add this line item to the sale.
      - `status` string — If defined as `CONFIRMED` for pending sales, the line item will be added as **read-only**.
      - `surcharges` LineItemSurcharge[] — Collection of surcharges associated with the line item.
        - `tax_components` LineItemTaxComponentResponse[] — Collection of tax components associated with the surcharge.
          - `rate_id` string — Tax rate ID.
          - `total_tax` number, double — Tax total.
        - `value` number, double — Tax exclusive surcharge amount for a specific payment.
      - `tax` LineItemResponseTax
        - `amount` number, double — The unit tax value associated with this line item.
        - `id` string, uuid — The ID of the tax associated with this line item.
        - `total` number, double — Total tax value.
    - `note` string — Sale Note.
    - `payments` SaleResponsePayment[] — Collection of payments.
      - `_metadata` PaymentResponseMetadata
        - `register_open_sequence_id` string, uuid — Register open sequence ID.
      - `amount` number, double — Payment amount.
      - `billing_address_id` string, uuid — The ID of the billing address associated with this payment.
      - `date` string — Payment date in UTC.
      - `deleted_at` string — Deletion timestamp in UTC.
      - `external_applications` PaymentExternalApplication[] — External applications associated with the payment.
        - `application_id` string — ID of the external application.
        - `created_at` string — Creation timestamp in UTC.
        - `external_id` string — ID from the external application.
        - `updated_at` string — Last update timestamp in UTC.
      - `external_attributes` PaymentExternalAttribute[] — External attributes for the payment.
        - `card_last_four_digits` string — Last 4 digits of the card.
        - `source` string — Source of the external attribute.
        - `transaction_id` string — Transaction ID from the external system.
      - `id` string, uuid — Auto-generated payment ID.
      - `source` PaymentResponseSource
        - `id` string — Integrator-derived payment source ID. Non-null when the integrator provides a transaction ID.
        - `outlet_id` string, uuid — A valid outlet ID.
        - `register_id` string, uuid — The ID of the register used to add this payment to the sale.
      - `surcharge` PaymentSurcharge
        - `amount` number, double — Surcharge amount.
        - `rule` string — Specifies the rule of the surcharge to be applied.
      - `type` PaymentTypeDetails
        - `config_id` string, uuid — Payment type id to be used for the payment.
        - `id` string — **internal** Global payment type ID. Irrelevant for external use.
        - `name` string — The name of the payment type.
    - `receipt_number` string — The receipt number for the sale.
    - `return` SaleReturn
      - `is_return` boolean — Indicates whether this sale is a return.
      - `original_sale_id` string — Reference ID to a different sale if this sale was created as a return.
      - `return_sale_ids` string[] — IDs of return sales created from this sale.
    - `short_code` string — Short, unique code used for loyalty tracking purposes.
    - `source` SaleResponseSource
      - `author` SaleAuthor
        - `id` string, uuid — The ID of the user (cashier) who created the sale.
      - `id` string — The ID of the sale on the client side or another system where the sale was originally created.
      - `outlet_id` string, uuid — The ID of the outlet where the sale was created.
      - `register_id` string, uuid — The ID of the register where the sale was created.
      - `type` string — This is the identifier of the 3rd party system that the `source_id` is associated with. 'Xero' or 'Magento' would be examples.
    - `state` 'parked' | 'pending' | 'voided' | 'closed' — State of the sale.
    - `taxes` SaleResponseTax[] — Collection of taxes.
      - `id` string, uuid — Auto-generated object ID.
      - `tax` number, double — The total tax value for this tax.
    - `totals` SaleTotals
      - `loyalty` number, double — Total loyalty value for this sale.
      - `price` number, double — Total price for this sale, tax exclusive.
      - `price_incl_tax` number, double — Total price for this sale, tax inclusive.
      - `surcharge` number, double — Total surcharge value for this sale.
      - `tax` number, double — Total tax value for this sale.
    - `updated_at` string — Last update timestamp in UTC.

---

[API](https://skmtc.net/lightspeedhq/apis/api-2026-07.md) · [All operations](https://skmtc.net/lightspeedhq/apis/api-2026-07/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lightspeedhq/api-2026-07/revisions/72d4ceb46dbb/schema)
