Sale Request

Editable attributes of the sale.

CommercePoint-of-SaleRetailRestaurantInventoryLoyaltyPaymentsE-CommerceOmnichannelCanada

Properties

Name Type Description
accounts_transaction_id string Xero invoice reference ID. Only editable for `ONACCOUNT` sales.
attributes array An array of attributes
customer_id string 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 array Fulfillment details for DISPATCH or PICKUP fulfillments.
fulfillment_outlet_id string 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 array Line items.
note string A note on the sale entered by the cashier.
payments array Payments.
pricing object
service_fields object
short_code string Short, unique code to be printed on the receipt for loyalty tracking purposes.
source object
state string State of the sale.
id string User-provided sale ID. If not included, one will be generated.
View JSON Schema on GitHub

JSON Schema

lightspeed-sale-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/lightspeed/main/json-schema/lightspeed-sale-request-schema.json",
  "title": "Sale Request",
  "description": "Editable attributes of the sale.",
  "x-generated": "2026-10-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/lightspeed-sales-api-openapi.yml#/components/schemas/SaleRequest",
  "allOf": [
    {
      "$ref": "#/$defs/SaleRequestBase"
    },
    {
      "properties": {
        "id": {
          "description": "User-provided sale ID. If not included, one will be generated.",
          "format": "uuid",
          "type": "string"
        }
      },
      "type": "object"
    }
  ],
  "$defs": {
    "AdjustmentAmount": {
      "properties": {
        "type": {
          "description": "The value type of the adjustment.",
          "enum": [
            "FIXED",
            "PERCENT"
          ],
          "type": "string"
        },
        "value": {
          "description": "The value of the adjustment.",
          "type": "string"
        }
      },
      "required": [
        "type",
        "value"
      ],
      "title": "Adjustment Amount",
      "type": "object"
    },
    "AdjustmentSource": {
      "properties": {
        "id": {
          "description": "The ID of the source of the adjustment.",
          "format": "uuid",
          "type": "string"
        }
      },
      "title": "Adjustment Source",
      "type": "object"
    },
    "AdjustmentTarget": {
      "properties": {
        "ids": {
          "description": "An array of target IDs.",
          "items": {
            "format": "uuid",
            "type": "string"
          },
          "type": "array"
        },
        "method": {
          "description": "The method of the adjustment.",
          "enum": [
            "PROPORTIONED",
            "EACH",
            "SINGLE"
          ],
          "type": "string"
        }
      },
      "required": [
        "method"
      ],
      "title": "Adjustment Target",
      "type": "object"
    },
    "DailyAgenda": {
      "properties": {
        "date": {
          "type": "string"
        },
        "minutes_scheduled": {
          "type": "integer"
        }
      },
      "title": "DailyAgenda",
      "type": "object"
    },
    "FulfillmentDetail": {
      "properties": {
        "note": {
          "description": "The fulfillment note for fulfillments of the specified type.",
          "type": "string"
        },
        "shipping_address_id": {
          "description": "The ID of the shipping address to use for DISPATCH fulfillments. Either this or shipping_address_token must be provided for DISPATCH.",
          "type": [
            "string",
            "null"
          ]
        },
        "shipping_address_token": {
          "description": "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": [
            "string",
            "null"
          ]
        },
        "type": {
          "description": "The fulfillment type to which this fulfillment detail applies.",
          "enum": [
            "DISPATCH",
            "PICKUP"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "ItemDetails": {
      "properties": {
        "description": {
          "type": "string"
        },
        "initial_condition": {
          "type": "string"
        },
        "item_id": {
          "type": "string"
        },
        "item_name": {
          "type": "string"
        },
        "serial_number": {
          "type": "string"
        }
      },
      "title": "ItemDetails",
      "type": "object"
    },
    "LineItemAdjustment": {
      "properties": {
        "amount": {
          "$ref": "#/$defs/AdjustmentAmount"
        },
        "name": {
          "description": "The name of the adjustment.",
          "type": "string"
        },
        "source": {
          "$ref": "#/$defs/AdjustmentSource"
        },
        "target": {
          "$ref": "#/$defs/AdjustmentTarget"
        },
        "type": {
          "description": "The type of the adjustment.",
          "enum": [
            "NON_CASH_FEE",
            "DISCOUNT",
            "TIP"
          ],
          "type": "string"
        }
      },
      "required": [
        "type",
        "target"
      ],
      "title": "Line Item Adjustment",
      "type": "object"
    },
    "LineItemAttribute": {
      "properties": {
        "name": {
          "description": "Attribute name. (`line_note` for a line item note.)",
          "type": "string"
        },
        "value": {
          "description": "Attribute value. (For `line_note`, the string value of the line_item note.)",
          "type": "string"
        }
      },
      "required": [
        "name",
        "value"
      ],
      "title": "Line Item Attribute",
      "type": "object"
    },
    "LineItemMetadata": {
      "properties": {
        "fulfillment_method": {
          "description": "The fulfillment type for this line item. Only used when creating new sales, ignored when updating existing sales.",
          "enum": [
            "DISPATCH",
            "PICKUP"
          ],
          "type": "string"
        },
        "is_price_override": {
          "description": "Indicates whether the price was overridden, preventing recalculation of the total price based on the price from the database.",
          "type": "boolean"
        },
        "sequence": {
          "description": "Order number of the line item.",
          "format": "int32",
          "type": "integer"
        }
      },
      "title": "Line Item Metadata",
      "type": "object"
    },
    "LineItemPricing": {
      "properties": {
        "adjustments": {
          "description": "Adjustments.",
          "items": {
            "$ref": "#/$defs/LineItemAdjustment"
          },
          "type": "array"
        },
        "cost": {
          "description": "Unit cost of the line item",
          "format": "double",
          "type": "number"
        },
        "discount": {
          "description": "Discount value of the line item.",
          "format": "double",
          "type": "number"
        },
        "loyalty_amount": {
          "description": "The value of loyalty that will be incurred by the customer for this line item.",
          "format": "double",
          "type": "number"
        },
        "price": {
          "description": "Unit price of the line item.",
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "price"
      ],
      "title": "Line Item Pricing",
      "type": "object"
    },
    "LineItemProduct": {
      "properties": {
        "id": {
          "description": "The ID of the product associated with this line item.",
          "format": "uuid",
          "type": "string"
        }
      },
      "required": [
        "id"
      ],
      "title": "Line Item Product",
      "type": "object"
    },
    "LineItemSource": {
      "properties": {
        "author_id": {
          "description": "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.",
          "format": "uuid",
          "type": "string"
        },
        "register_id": {
          "description": "The ID of the register which was used to add this line item to the sale.",
          "format": "uuid",
          "type": "string"
        }
      },
      "title": "Line Item Source",
      "type": "object"
    },
    "LineItemTax": {
      "properties": {
        "amount": {
          "description": "The unit tax value associated with this line item.",
          "format": "double",
          "type": "number"
        },
        "id": {
          "description": "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'",
          "format": "uuid",
          "type": "string"
        }
      },
      "required": [
        "id",
        "amount"
      ],
      "title": "Line Item Tax",
      "type": "object"
    },
    "LineItemTaxComponent": {
      "properties": {
        "rate_id": {
          "description": "Tax rate ID.",
          "type": "string"
        },
        "total_tax": {
          "description": "Tax total.",
          "format": "double",
          "type": "number"
        }
      },
      "required": [
        "rate_id",
        "total_tax"
      ],
      "title": "Line Item Tax Component",
      "type": "object"
    },
    "PaymentSource": {
      "properties": {
        "register_id": {
          "description": "The ID of the register used to add this payment to the sale.",
          "format": "uuid",
          "type": "string"
        }
      },
      "title": "Payment Source",
      "type": "object"
    },
    "PaymentTypeConfig": {
      "properties": {
        "config_id": {
          "description": "Payment type id to be used for the payment.",
          "format": "uuid",
          "type": "string"
        }
      },
      "required": [
        "config_id"
      ],
      "title": "Payment Type Config",
      "type": "object"
    },
    "PromotionDescription": {
      "description": "Basic description for a Promotion.",
      "properties": {
        "description": {
          "description": "A short description for the promotion.",
          "type": "string"
        },
        "id": {
          "description": "Auto-generated object ID.",
          "type": "string"
        },
        "name": {
          "description": "The name of the promotion.",
          "type": "string"
        }
      },
      "title": "PromotionDescription",
      "type": "object"
    },
    "SaleAdjustment": {
      "properties": {
        "amount": {
          "$ref": "#/$defs/AdjustmentAmount"
        },
        "name": {
          "description": "The name of the adjustment.",
          "type": "string"
        },
        "source": {
          "$ref": "#/$defs/AdjustmentSource"
        },
        "type": {
          "description": "The type of the adjustment.",
          "enum": [
            "NON_CASH_FEE",
            "DISCOUNT",
            "TIP"
          ],
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "title": "Sale Adjustment",
      "type": "object"
    },
    "SaleLineItem": {
      "properties": {
        "_metadata": {
          "$ref": "#/$defs/LineItemMetadata"
        },
        "attributes": {
          "description": "Additional line item attributes.",
          "items": {
            "$ref": "#/$defs/LineItemAttribute"
          },
          "type": "array"
        },
        "fulfilment_outlet_id": {
          "description": "The outlet that should fulfill this line item. Mutually exclusive with pick lists created via `/sales/{sale_id}/pick_lists`.",
          "format": "uuid",
          "type": "string"
        },
        "id": {
          "description": "Existing line item ID. If included in the POST request it will cause an update instead of a creating a new object.",
          "format": "uuid",
          "type": "string"
        },
        "pricing": {
          "$ref": "#/$defs/LineItemPricing"
        },
        "product": {
          "$ref": "#/$defs/LineItemProduct"
        },
        "quantity": {
          "description": "Quantity of products for the line item.",
          "format": "double",
          "type": "number"
        },
        "source": {
          "$ref": "#/$defs/LineItemSource"
        },
        "status": {
          "description": "If defined as `CONFIRMED` for pending sales, the line item will be added as **read-only**.",
          "type": "string"
        },
        "tax": {
          "$ref": "#/$defs/LineItemTax"
        }
      },
      "required": [
        "product",
        "quantity",
        "pricing",
        "tax"
      ],
      "title": "Sale Line Item",
      "type": "object"
    },
    "SalePayment": {
      "properties": {
        "amount": {
          "description": "Payment amount.",
          "format": "double",
          "type": "number"
        },
        "billing_address_id": {
          "description": "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.",
          "type": [
            "string",
            "null"
          ]
        },
        "billing_address_token": {
          "description": "The token of the billing address to use for this payment. Required when billing_address_id is provided.",
          "type": [
            "string",
            "null"
          ]
        },
        "date": {
          "description": "The date and time of the payment.",
          "type": "string"
        },
        "id": {
          "description": "Existing payment ID. If included in the POST request it will cause an update instead of a creating a new supplier.",
          "format": "uuid",
          "type": "string"
        },
        "source": {
          "$ref": "#/$defs/PaymentSource"
        },
        "type": {
          "$ref": "#/$defs/PaymentTypeConfig"
        }
      },
      "required": [
        "amount",
        "type"
      ],
      "title": "Sale Payment",
      "type": "object"
    },
    "SalePricing": {
      "properties": {
        "adjustments": {
          "description": "Adjustments.",
          "items": {
            "$ref": "#/$defs/SaleAdjustment"
          },
          "type": "array"
        }
      },
      "title": "Sale Pricing",
      "type": "object"
    },
    "SaleRequestBase": {
      "description": "Editable attributes of the sale.",
      "properties": {
        "accounts_transaction_id": {
          "description": "Xero invoice reference ID. Only editable for `ONACCOUNT` sales.",
          "type": "string"
        },
        "attributes": {
          "description": "An array of attributes",
          "items": {
            "description": "Attributes for this sale",
            "type": "string"
          },
          "type": "array"
        },
        "customer_id": {
          "description": "The ID of the customer associated with this sale.",
          "format": "uuid",
          "type": "string"
        },
        "date": {
          "description": "The date of the sale in RFC3339 format. If not provided will be added as the time the sale reached the server.",
          "type": "string"
        },
        "fulfillment_details": {
          "description": "Fulfillment details for DISPATCH or PICKUP fulfillments.",
          "items": {
            "$ref": "#/$defs/FulfillmentDetail"
          },
          "type": "array"
        },
        "fulfillment_outlet_id": {
          "description": "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`.",
          "format": "uuid",
          "type": "string"
        },
        "invoice_number": {
          "description": "The invoice number for the sale. If left null it will be populated by Lightspeed with the next available invoice number.",
          "type": "string"
        },
        "line_items": {
          "description": "Line items.",
          "items": {
            "$ref": "#/$defs/SaleLineItem"
          },
          "type": "array"
        },
        "note": {
          "description": "A note on the sale entered by the cashier.",
          "type": "string"
        },
        "payments": {
          "description": "Payments.",
          "items": {
            "$ref": "#/$defs/SalePayment"
          },
          "type": "array"
        },
        "pricing": {
          "$ref": "#/$defs/SalePricing"
        },
        "service_fields": {
          "properties": {
            "service_action": {
              "type": "string"
            },
            "service_agenda": {
              "$ref": "#/$defs/DailyAgenda"
            },
            "service_items": {
              "$ref": "#/$defs/ServiceItems"
            },
            "service_line_items": {
              "description": "An array of service line items.",
              "items": {
                "$ref": "#/$defs/ServiceOrderLineItem"
              },
              "type": "array"
            }
          },
          "type": "object"
        },
        "short_code": {
          "description": "Short, unique code to be printed on the receipt for loyalty tracking purposes.",
          "type": "string"
        },
        "source": {
          "$ref": "#/$defs/SaleRequestSource"
        },
        "state": {
          "description": "State of the sale.",
          "enum": [
            "parked",
            "pending",
            "voided",
            "closed"
          ],
          "type": "string"
        }
      },
      "required": [
        "source",
        "state"
      ],
      "title": "Sale Request Base",
      "type": "object"
    },
    "SaleRequestSource": {
      "properties": {
        "author_id": {
          "description": "The ID of the user (cashier) who created the sale.",
          "format": "uuid",
          "type": "string"
        },
        "id": {
          "description": "The ID of the sale on the client side or another system where the sale was originally created.",
          "type": "string"
        },
        "register_id": {
          "description": "The ID of the register where the sale was created.",
          "format": "uuid",
          "type": "string"
        },
        "type": {
          "description": "This is the identifier of the 3rd party system that the `source_id` is associated with. 'Xero' or 'Magento' would be examples.",
          "type": "string"
        }
      },
      "required": [
        "author_id"
      ],
      "title": "Sale Request Source",
      "type": "object"
    },
    "ServiceItems": {
      "properties": {
        "item_details": {
          "$ref": "#/$defs/ItemDetails"
        },
        "location": {
          "type": "string"
        }
      },
      "title": "ServiceItems",
      "type": "object"
    },
    "ServiceOrderLineItem": {
      "allOf": [
        {
          "$ref": "#/$defs/SaleLineItem"
        },
        {
          "properties": {
            "promotions": {
              "items": {
                "$ref": "#/$defs/PromotionDescription"
              },
              "type": "array"
            },
            "tax_component": {
              "items": {
                "$ref": "#/$defs/LineItemTaxComponent"
              },
              "type": "array"
            }
          },
          "type": "object"
        }
      ],
      "title": "Service Order Line Item"
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/lightspeed-sale-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.