Lightspeed Commerce · Schema
Sale Request
Editable attributes of the sale.
CommercePoint-of-SaleRetailRestaurantInventoryLoyaltyPaymentsE-CommerceOmnichannelCanada
JSON Schema
{
"$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.
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"
Discovery needs no key. Ratings and market analysis are Pro.
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.