The best product ever, except for the next one.
", "handle": "bravo", "has_inventory": true, "has_variants": true, "id": "b8ca3a65-0183-11e4-fbb5-7988a6ed80f8", "image_thumbnail_url": "https://vendimageuploadcdn.global.ssl.fastly.net/160,fit,q90/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "image_url": "https://vendimageuploadcdn.global.ssl.fastly.net/350,fit,q90/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "images": [ { "id": "06bf537b-c783-11e6-f6b9-b73917d393b6", "sizes": { "original": "https://vendimageuploadcdn.global.ssl.fastly.net/1920,fit/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "sl": "https://vendimageuploadcdn.global.ssl.fastly.net/150x150,q90/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "sm": "https://vendimageuploadcdn.global.ssl.fastly.net/100x100,q90/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "ss": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "st": "https://vendimageuploadcdn.global.ssl.fastly.net/40x40,q90/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "standard": "https://vendimageuploadcdn.global.ssl.fastly.net/350,fit,q90/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "thumb": "https://vendimageuploadcdn.global.ssl.fastly.net/160,fit,q90/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg" }, "url": "https://vendimageuploadcdn.global.ssl.fastly.net/1920,fit/vend-images/product/original/f/0/f0ebadbc30947444d438678a4a7bd6d996f392fc.jpg", "version": 2398861114 } ], "is_active": true, "is_composite": false, "name": "Bravo", "price_excluding_tax": 110, "price_including_tax": 126.5, "product_codes": [ { "code": "123456", "type": "custom" } ], "product_suppliers": [ { "code": "code", "id": "cfbf30bd-4b6a-47df-931c-1a326acc1769", "price": 19, "product_id": "d796d8b2-ff79-48fa-8e6e-a15e2e0bd429", "supplier_id": "63c4c033-3019-4582-99e7-446baacca1b0", "supplier_name": "supplier_1" } ], "product_type_id": "b1e2babe-f019-11e3-a0f5-b8ca3a64f8f4", "sku": "787878", "source": "USER", "supplier": { "description": "", "id": "dc85058a-a683-11e5-ef46-08f9a926615e", "name": "Peak", "source": "", "version": 2089502 }, "supplier_code": "123456", "supplier_id": "dc85058a-a683-11e5-ef46-08f9a926615e", "supply_price": 100, "tag_ids": [ "b8ca3a65-0183-11e4-fbb5-a7e973b74d92", "bc305bf6-6183-11e4-f15a-16ced23b8465" ], "type": { "id": "b1e2babe-f019-11e3-a0f5-b8ca3a64f8f4", "name": "General", "version": 449902 }, "updated_at": "2017-08-21T23:50:39+00:00", "variant_name": "Bravo / Black / Cotton / Cotton", "variant_options": [ { "id": "9a972fbe-3b53-102e-b60f-4abbcbc88955", "name": "Color", "value": "Black" }, { "id": "6b8f11e2-5188-11e0-9d7a-4040f540b50a", "name": "Fabric", "value": "Cotton" }, { "id": "6b8f11e2-5188-11e0-9d7a-4040f540b50a", "name": "Fabric", "value": "Cotton" } ], "version": 4284638488 } }, "schema": { "$ref": "#/components/schemas/ProductResponse" } } }, "description": "" } }, "summary": "Get a single product", "tags": [ "Products" ] }, "put": { "description": "Update an existing product.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "UpdateProduct", "parameters": [ { "description": "The object identifier of the Product to update.", "in": "path", "name": "product_id", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProductUpdate21Request" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "The response if the API call is successful." }, "404": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "The response if the product you are attempting to update doesn't exist." }, "422": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "The response if the update can't be processed." } }, "summary": "Update a product", "tags": [ "Products" ] } }, "/products/{product_id}/actions/image_upload": { "post": { "description": "Upload a binary file with an image to be used for a product. This request should be encoded as `multipart/form-data`.\n\n> **Please Note** If you are reading this on https://x-series-api.lightspeedhq.com then the `Try It!` generated code will not work as the underlying code generator assumes the image will be base64 encoded, which the API does not support. Please have a look at https://x-series-api.lightspeedhq.com/docs/products_image_upload_basics instead.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "UploadImage", "parameters": [ { "description": "The product id", "in": "path", "name": "product_id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/octet-stream": { "schema": { "description": "File to upload. Can be in `jpg` or `png` format.", "format": "binary", "properties": { "image": { "format": "binary", "type": "string" } }, "type": "object" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ImageResponse" } } }, "description": "" } }, "summary": "Upload an image", "tags": [ "Products" ] } }, "/products/{product_id}/all": { "delete": { "description": "Deletes a product family. The /all suffix is provided to delete an entire variant family.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "DeleteProductFamily", "parameters": [ { "description": "The product id of a family member", "in": "path", "name": "product_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" } }, "summary": "Delete a product family", "tags": [ "Products" ] } }, "/products/{product_id}/price_book_products": { "get": { "description": "This endpoint returns the list of price books the given product is in.\n\n\ud83d\udd12 Requires: `products:read:price_books` scope", "operationId": "GetPriceBooksForProduct", "parameters": [ { "description": "The product id to find in the Price Books", "in": "path", "name": "product_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PriceBookProductCollection" } } }, "description": "OK" } }, "summary": "Get a list of price books the given product is in", "tags": [ "Products" ] } }, "/promocode/bulk": { "delete": { "description": "Delete promo codes, by promocode IDs\n\n\ud83d\udd12 Requires: `promotions:write` scope", "operationId": "DeletePromoCodesBulk", "requestBody": { "content": { "application/json": { "schema": { "items": { "type": "string" }, "type": "array" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromotionDeletePromoCodesResponse" } } }, "description": "Remaining promo codes" } }, "summary": "Delete promo codes", "tags": [ "Promo Code" ] } }, "/promocode/bulk/active": { "post": { "description": "Get promo codes, with their associated promotions.\n\n\ud83d\udd12 Requires: `promotions:read` scope", "operationId": "GetActivePromoCodesBulk", "requestBody": { "content": { "application/json": { "schema": { "items": { "type": "string" }, "type": "array" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromoCodesMap" } } }, "description": "" } }, "summary": "Get the active status of promo codes", "tags": [ "Promo Code" ] } }, "/promotions": { "get": { "description": "This endpoint lists all promotions for a retailer.\n\nThere are optional query parameters that allow filtering promotions. They can't be combined:\n\n - `end_time_from` - only show promotions that have end\\_time after or equal to this time\n - `end_time_to` - only show promotions that have end\\_time before this time\n\nFor example. the time format for end\\_time\\_from and end\\_time\\_to are: `2047-06-21T13:00:00`\n\n\ud83d\udd12 Requires: `promotions:read` scope\n", "operationId": "ListPromotions", "parameters": [ { "description": "Upper limit for the promotion end date as UTC timestamp. Format: `2020-08-08T12:00:00Z`.", "in": "query", "name": "end_time_to", "schema": { "type": "string" } }, { "description": "Lower limit for the promotion end date as UTC timestamp. Format: `2020-08-08T12:00:00Z`.", "in": "query", "name": "end_time_from", "schema": { "type": "string" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromotionCollection" } } }, "description": "" } }, "summary": "List promotions", "tags": [ "Promotions" ] }, "post": { "description": "This endpoint creates a new promotion.\n\nIt responds with the newly-created promotion, including the promotion's ID.\n\n\ud83d\udd12 Requires: `promotions:write` scope", "operationId": "CreatePromotion", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Promotion" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromotionResponse" } } }, "description": "" }, "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromotionResponse" } } }, "description": "Created" } }, "summary": "Create a promotion", "tags": [ "Promotions" ] } }, "/promotions/search": { "get": { "description": "This endpoint can be used to find promotions matching specific criteria.\n\n\ud83d\udd12 Requires: `promotions:read` scope\n", "operationId": "SearchPromotions", "parameters": [ { "description": "Scope of the search", "in": "query", "name": "scope", "schema": { "default": "all", "enum": [ "current_upcoming", "past", "all" ], "type": "string" } }, { "description": "Part of promotion's name being searched", "explode": true, "in": "query", "name": "name", "schema": { "example": "choco", "type": "string" } }, { "description": "Only show promotions that have a start time after or equal to this", "explode": true, "in": "query", "name": "start_time", "schema": { "example": "2022-08-29T9:57:52", "type": "string" } }, { "description": "Only show promotions that have an end time before or equal to this", "explode": true, "in": "query", "name": "end_time", "schema": { "example": "2023-08-29T9:57:52", "nullable": true, "type": "string" } }, { "description": "Only show promotions linked to one or many of the outlets specified here", "in": "query", "name": "outlet_id", "schema": { "items": { "example": "06326976-9d65-11ed-fa40-1347e4b4ae6d", "type": "string" }, "type": "array" } }, { "description": "Sort the result by this field", "in": "query", "name": "order_by", "schema": { "default": "name", "enum": [ "name", "start_date", "end_date" ], "type": "string" } }, { "description": "Sort direction", "in": "query", "name": "direction", "schema": { "default": "desc", "enum": [ "asc", "desc" ], "type": "string" } }, { "description": "Offset", "in": "query", "name": "offset", "schema": { "default": 1, "type": "integer" } }, { "description": "Number of results per page", "in": "query", "name": "page_size", "schema": { "default": 1000, "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromotionCollection" } } }, "description": "" } }, "summary": "Search promotions", "tags": [ "Promotions" ] } }, "/promotions/{promotion_id}": { "get": { "description": "This will retrieve a single promotion using the given ID.\n\n\ud83d\udd12 Requires: `promotions:read` scope", "operationId": "GetPromotionByID", "parameters": [ { "description": "The promotion id", "in": "path", "name": "promotion_id", "required": true, "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "$ref": "#/components/schemas/PromotionResponse" } }, "type": "object" } } }, "description": "" } }, "summary": "Get a promotion by ID", "tags": [ "Promotions" ] }, "put": { "description": "This endpoint updates an existing promotion by ID.\n\n * All of a promotion's fields except its id may be updated.\n * There are no partial updates.\n * All fields must be specified in the update.\n * The response contains the updated promotion object.\n\n\ud83d\udd12 Requires: `promotions:write` scope\n", "operationId": "UpdatePromotion", "parameters": [ { "description": "The promotion id", "in": "path", "name": "promotion_id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Promotion" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromotionResponse" } } }, "description": "" } }, "summary": "Update a promotion", "tags": [ "Promotions" ] } }, "/promotions/{promotion_id}/products": { "get": { "description": "Get a list of products applicable for this promotion, and their discount price.\n\nIt takes in `page_size`, `offset` and `name` (use for searching product by product name) as query parameters.\n\nThe endpoint returns:\n * a list of products with discount for the condition product set, and\n * another list for the action product sets.\n\n\ud83d\udd12 Requires: `promotions:read` `products:read` scopes\n", "operationId": "GetPromotionProducts", "parameters": [ { "description": "The promotion id", "in": "path", "name": "promotion_id", "required": true, "schema": { "type": "integer" } }, { "in": "query", "name": "page_size", "schema": { "type": "integer" } }, { "in": "query", "name": "offset", "schema": { "type": "integer" } }, { "description": "Filter products by product name.", "in": "query", "name": "name", "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromotionProductsResponse" } } }, "description": "" } }, "summary": "Get products for a promotion", "tags": [ "Promotions" ] } }, "/promotions/{promotion_id}/promocodes": { "get": { "description": "Get the promo codes associated with this promotion.\n\n\ud83d\udd12 Requires: `promotions:read` scope", "operationId": "GetPromotionPromoCodes", "parameters": [ { "description": "The promotion id", "in": "path", "name": "promotion_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PromotionPromoCodesResponse" } } }, "description": "" } }, "summary": "Get the promo codes for a promotion", "tags": [ "Promotions" ] } }, "/purchase_orders": { "get": { "description": "Returns a paginated list of purchase orders using version-based cursor pagination.\n\nThe response includes only purchase orders accessible to the authenticated user. Costs\nand discounts are included when available to the caller. Cost fields require the\n`products:read:costs` scope.\n\n\ud83d\udd12 Requires: `consignments:read` scope", "operationId": "ListPurchaseOrders", "parameters": [ { "$ref": "#/components/parameters/PurchaseOrderAfter" }, { "$ref": "#/components/parameters/PurchaseOrderBefore" }, { "$ref": "#/components/parameters/PurchaseOrderPageSize" } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PurchaseOrderCollectionResponse" } } }, "description": "OK" } }, "summary": "List purchase orders", "tags": [ "Purchase Orders" ] } }, "/purchase_orders/{purchase_order_id}": { "get": { "description": "Returns a single purchase order with the requested ID.\n\nCost fields require the `products:read:costs` scope.\n\n\ud83d\udd12 Requires: `consignments:read` scope", "operationId": "GetPurchaseOrderByID", "parameters": [ { "$ref": "#/components/parameters/PurchaseOrderID" } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PurchaseOrderResponse" } } }, "description": "OK" } }, "summary": "Get purchase order by ID", "tags": [ "Purchase Orders" ] } }, "/purchase_orders/{purchase_order_id}/deliveries": { "get": { "description": "Returns a paginated list of deliveries belonging to a purchase order using version-based\ncursor pagination. Cost fields require the `products:read:costs` scope.\n\n\ud83d\udd12 Requires: `consignments:read` scope", "operationId": "ListPurchaseOrderDeliveries", "parameters": [ { "$ref": "#/components/parameters/PurchaseOrderID" }, { "$ref": "#/components/parameters/PurchaseOrderAfter" }, { "$ref": "#/components/parameters/PurchaseOrderBefore" }, { "$ref": "#/components/parameters/PurchaseOrderPageSize" } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PurchaseOrderDeliveryCollectionResponse" } } }, "description": "OK" } }, "summary": "List purchase order deliveries", "tags": [ "Purchase Orders" ] } }, "/purchase_orders/{purchase_order_id}/deliveries/{delivery_id}/line_items": { "get": { "description": "Returns a paginated list of line items belonging to a purchase order delivery using\nversion-based cursor pagination. Cost fields require the `products:read:costs` scope.\n\n\ud83d\udd12 Requires: `consignments:read` scope", "operationId": "ListPurchaseOrderDeliveryLineItems", "parameters": [ { "$ref": "#/components/parameters/PurchaseOrderID" }, { "description": "The unique identifier of the purchase order delivery.", "in": "path", "name": "delivery_id", "required": true, "schema": { "type": "string" } }, { "$ref": "#/components/parameters/PurchaseOrderAfter" }, { "$ref": "#/components/parameters/PurchaseOrderBefore" }, { "$ref": "#/components/parameters/PurchaseOrderPageSize" } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PurchaseOrderDeliveryLineItemCollectionResponse" } } }, "description": "OK" } }, "summary": "List purchase order delivery line items", "tags": [ "Purchase Orders" ] } }, "/purchase_orders/{purchase_order_id}/line_items": { "get": { "description": "Returns a paginated list of line items belonging to a purchase order using version-based\ncursor pagination. Cost fields require the `products:read:costs` scope.\n\n\ud83d\udd12 Requires: `consignments:read` scope", "operationId": "ListPurchaseOrderLineItems", "parameters": [ { "$ref": "#/components/parameters/PurchaseOrderID" }, { "$ref": "#/components/parameters/PurchaseOrderAfter" }, { "$ref": "#/components/parameters/PurchaseOrderBefore" }, { "$ref": "#/components/parameters/PurchaseOrderPageSize" } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PurchaseOrderLineItemCollectionResponse" } } }, "description": "OK" } }, "summary": "List purchase order line items", "tags": [ "Purchase Orders" ] } }, "/quotes": { "get": { "description": "Returns a paginated list of quotes.\n\n\ud83d\udd12 Requires: `sales:read` scope", "operationId": "get-quotes", "parameters": [ { "description": "The lower limit for the quote id to be included in the response. For proper pagination, it needs to be the quote id of the last item in the response from your previous request.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "limit", "schema": { "default": 100, "format": "int64", "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/QuotesCollection" } } }, "description": "OK" } }, "summary": "List Quotes", "tags": [ "Quotes" ] } }, "/quotes/{quote_id}": { "get": { "description": "Returns a single quote with a given ID.\n\n\ud83d\udd12 Requires: `sales:read` scope", "operationId": "get-quote-quote_id", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Quote" } } }, "description": "OK" } }, "summary": "Get Quote", "tags": [ "Quotes" ] }, "parameters": [ { "description": "ID of the quote to get", "in": "path", "name": "quote_id", "required": true, "schema": { "type": "string" } } ] }, "/registers": { "get": { "description": "Returns a paginated list of registers.\n\n\ud83d\udd12 Requires: `registers:read` scope", "operationId": "ListRegisters", "parameters": [ { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } }, { "description": "Indicates whether deleted items should be included in the response.", "in": "query", "name": "deleted", "schema": { "type": "boolean" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterCollection" } }, "new": { "example": { "data": [ { "ask_for_note_on_save": 1, "ask_for_user_on_sale": false, "button_layout_id": "d656e8e1-7be7-11e4-9bb5-b8ca3a65011c", "cash_managed_payment_type_id": "b1e1d70e-f019-11e3-a0f5-b8ca3a64f8f4", "email_receipt": true, "id": "b1e198a9-f019-11e3-a0f5-b8ca3a64f8f4", "invoice_prefix": "MR-", "invoice_sequence": 1708, "invoice_suffix": "-NZ", "is_open": true, "is_quick_keys_enabled": true, "name": "Main Register", "outlet_id": "b1e04bd8-f019-11e3-a0f5-b8ca3a64f8f4", "print_note_on_receipt": false, "print_receipt": true, "receipt_template_id": "0242ac11-0002-11ea-e96b-69ae6c24a799", "register_open_sequence_id": "06bf537b-c783-11e7-ff13-3157eb615f96", "register_open_time": "2017-05-05T05:58:53+00:00", "show_discounts_on_receipts": true, "version": 3391483933 }, { "ask_for_note_on_save": 1, "ask_for_user_on_sale": false, "email_receipt": false, "id": "b8ca3a65-0183-11e4-fbb5-2816e25ffc51", "invoice_prefix": "S", "invoice_sequence": 3, "invoice_suffix": "", "is_open": true, "is_quick_keys_enabled": true, "name": "Second Register", "outlet_id": "b8ca3a65-0183-11e4-fbb5-2816d2677218", "print_note_on_receipt": false, "print_receipt": true, "receipt_template_id": "0242ac11-0002-11ea-e96b-69ae6c24a799", "register_open_sequence_id": "a0369f1f-9083-11e4-f68e-cc2ad7a415de", "register_open_time": "2015-03-16T22:21:50+00:00", "show_discounts_on_receipts": true, "version": 709083 }, { "ask_for_note_on_save": 1, "ask_for_user_on_sale": false, "email_receipt": false, "id": "06e35f89-3783-11e6-ec7e-10e1180eba6d", "invoice_prefix": "Th", "invoice_sequence": 3, "invoice_suffix": "X", "is_open": true, "is_quick_keys_enabled": true, "name": "Third register", "outlet_id": "b8ca3a65-0183-11e4-fbb5-2816d2677218", "print_note_on_receipt": false, "print_receipt": true, "receipt_template_id": "0242ac11-0002-11ea-e96b-69ae6c24a799", "register_open_sequence_id": "06e35f89-3783-11e6-ec7e-10e124cb1e78", "register_open_time": "2016-05-03T03:43:04+00:00", "show_discounts_on_receipts": true, "version": 1234541473 } ], "version": { "max": 3391483933, "min": 709083 } } } }, "description": "" } }, "summary": "List registers", "tags": [ "Registers" ] } }, "/registers/{register_id}": { "get": { "description": "Returns a single register with the requested ID.\n\n\ud83d\udd12 Requires: `registers:read` scope", "operationId": "GetRegisterByID", "parameters": [ { "description": "The register id", "in": "path", "name": "register_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": { "ask_for_note_on_save": 1, "ask_for_user_on_sale": false, "email_receipt": false, "id": "b8ca3a65-0183-11e4-fbb5-2816e25ffc51", "invoice_prefix": "S", "invoice_sequence": 3, "invoice_suffix": "", "is_open": true, "is_quick_keys_enabled": true, "name": "Second Register", "outlet_id": "b8ca3a65-0183-11e4-fbb5-2816d2677218", "print_note_on_receipt": false, "print_receipt": true, "receipt_template_id": "0242ac11-0002-11ea-e96b-69ae6c24a799", "register_open_sequence_id": "a0369f1f-9083-11e4-f68e-cc2ad7a415de", "register_open_time": "2015-03-16T22:21:50+00:00", "show_discounts_on_receipts": true, "version": 709083 } }, "schema": { "$ref": "#/components/schemas/RegisterResponse" } } }, "description": "" } }, "summary": "Get a single register", "tags": [ "Registers" ] } }, "/registers/{register_id}/actions/close": { "put": { "description": "Closes a single register with the requested ID.\n\n\ud83d\udd12 Requires: `register:close` `payment_types:read` scopes", "operationId": "CloseRegister", "parameters": [ { "description": "The register id", "in": "path", "name": "register_id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterCloseRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "example": { "data": { "ask_for_note_on_save": 1, "ask_for_user_on_sale": false, "email_receipt": false, "id": "b8ca3a65-0183-11e4-fbb5-2816e25ffc51", "invoice_prefix": "S", "invoice_sequence": 3, "invoice_suffix": "", "is_open": false, "is_quick_keys_enabled": true, "name": "Second Register", "outlet_id": "b8ca3a65-0183-11e4-fbb5-2816d2677218", "print_note_on_receipt": false, "print_receipt": true, "receipt_template_id": "0242ac11-0002-11ea-e96b-69ae6c24a799", "register_close_time": "2015-03-16T22:21:50+00:00", "show_discounts_on_receipts": true, "version": 709083 } }, "schema": { "$ref": "#/components/schemas/RegisterResponse" } } }, "description": "" } }, "summary": "Close a single register", "tags": [ "Registers" ] } }, "/registers/{register_id}/actions/open": { "put": { "description": "Opens a single register with the requested ID.\n\n\ud83d\udd12 Requires: `register:open` scope", "operationId": "OpenRegister", "parameters": [ { "description": "The register id", "in": "path", "name": "register_id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RegisterOpenRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "example": { "data": { "ask_for_note_on_save": 1, "ask_for_user_on_sale": false, "email_receipt": false, "id": "b8ca3a65-0183-11e4-fbb5-2816e25ffc51", "invoice_prefix": "S", "invoice_sequence": 3, "invoice_suffix": "", "is_open": true, "is_quick_keys_enabled": true, "name": "Second Register", "outlet_id": "b8ca3a65-0183-11e4-fbb5-2816d2677218", "print_note_on_receipt": false, "print_receipt": true, "receipt_template_id": "0242ac11-0002-11ea-e96b-69ae6c24a799", "register_open_sequence_id": "a0369f1f-9083-11e4-f68e-cc2ad7a415de", "register_open_time": "2015-03-16T22:21:50+00:00", "show_discounts_on_receipts": true, "version": 709083 } }, "schema": { "$ref": "#/components/schemas/RegisterResponse" } } }, "description": "" } }, "summary": "Open a single register", "tags": [ "Registers" ] } }, "/registers/{register_id}/payments_summary": { "get": { "description": "Returns a payload containing payment totals for all payments types defined in the account for a single register.\n\n\ud83d\udd12 Requires: `payments:read` scope", "operationId": "RegisterPaymentsSummary", "parameters": [ { "description": "The register id", "in": "path", "name": "register_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": { "payments": [ { "payment_type_id": "2ac65e3b-1224-4aa5-bedf-936cfe85ac95", "payment_type_name": "Loyalty", "total": "0.00" }, { "payment_type_id": "be21ec2b-315f-1b07-8567-936cfe85ac95", "payment_type_name": "Cash", "total": "255.00" }, { "payment_type_id": "2ac65e3b-b6c5-6547-9543-80ba85264a8e", "payment_type_name": "Credit Card", "total": "1038.77" } ], "register_closure_id": "0ab9b350-ab7f-11ba-fc5c-6e58d999006f", "register_closure_sequence_number": 5, "register_open_time": "2015-03-16T22:21:50+00:00" } }, "schema": { "$ref": "#/components/schemas/RegisterPaymentsSummaryResponse" } } }, "description": "" } }, "summary": "Get all the payments data associated with a single register.", "tags": [ "Registers" ] } }, "/retailer": { "get": { "description": "This endpoint returns information about the retailer.\n\n\ud83d\udd12 Requires: `retailer:read` `payment_types:read` scopes", "operationId": "GetRetailer", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RetailerResponse" } } }, "description": "OK" } }, "summary": "Get information about this retailer", "tags": [ "Retailers" ] } }, "/sales": { "get": { "description": "Returns a paginated list of sales.\n\nTo search for sales, please have a look at our [Search endpoint](/reference/search-1) on what is supported.\n\n\ud83d\udd12 Requires: `sales:read` scope", "operationId": "ListSales", "parameters": [ { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SaleCollection" } } }, "description": "" } }, "summary": "List Sales", "tags": [ "Sales" ] }, "post": { "description": "Create a sale. Returns the ID of the created sale. See [Sales 101](/docs/sales_101) for usage information.\n\nMigrating from `v0.9`? See the [migration guide](/docs/sales_migration_guide).\n\n\ud83d\udd12 Requires: `sales:write` scope", "operationId": "CreateSale", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SaleRequest" } } }, "description": "New sale object.", "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SaleCreateResponse" } } }, "description": "The created sale." } }, "summary": "Create a sale", "tags": [ "Sales" ] } }, "/sales/{sale_id}": { "get": { "description": "Returns a single sale with a given ID.\n\n\ud83d\udd12 Requires: `sales:read` scope", "operationId": "GetSaleByID", "parameters": [ { "description": "A valid sale ID.", "in": "path", "name": "sale_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SaleResponse" } } }, "description": "" } }, "summary": "Get a single sale", "tags": [ "Sales" ] }, "put": { "description": "Update an existing sale by ID.\n\n\ud83d\udd12 Requires: `sales:write` scope", "operationId": "UpdateSale", "parameters": [ { "description": "A valid sale ID.", "in": "path", "name": "sale_id", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SaleUpdateRequest" } } }, "description": "Updated sale object.", "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SaleCreateResponse" } } }, "description": "The updated sale." } }, "summary": "Update a sale", "tags": [ "Sales" ] } }, "/sales/{sale_id}/actions/return": { "post": { "description": "Initializes a return for an existing closed sale and returns the newly created SAVED return sale. Use this endpoint to start the return workflow before adding refund payments or finalizing the returned items. See [the tutorial](/docs/sales_returns) for more information.\n\n\ud83d\udd12 Requires: `sales:write` `users:read` scopes", "operationId": "initReturnSale", "parameters": [ { "description": "A valid sale ID.", "in": "path", "name": "sale_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": { "created_at": "2016-09-19T20:28:03+00:00", "customer_id": "b1cabb53-f019-11e3-a0f5-b8ca3a64f8f4", "id": "06bf537b-c783-11e6-f6b9-7ea7909ffedd", "invoice_number": "1570", "invoice_sequence": 1570, "line_items": [ { "cost": 100, "cost_total": -100, "discount": 0, "discount_total": 0, "id": "06bf537b-c783-11e6-f6b9-7ea7909c64b9", "is_return": true, "loyalty_value": 23, "price": 200, "price_set": true, "price_total": -200, "product_id": "188a87aa-06fe-11e4-a0f5-b8ca3a64f8f4", "quantity": -1, "sequence": 1, "status": "SAVED", "tax": 30, "tax_components": [ { "rate_id": "b1dfed8b-f019-11e3-a0f5-b8ca3a64f8f4", "total_tax": 30 } ], "tax_id": "b1d192bc-f019-11e3-a0f5-b8ca3a64f8f4", "tax_total": -30, "total_cost": -100, "total_discount": 0, "total_loyalty_value": -23, "total_price": -200, "total_tax": -30, "unit_cost": 100, "unit_discount": 0, "unit_loyalty_value": 23, "unit_price": 200, "unit_tax": 30 }, { "cost": 100, "cost_total": -100, "discount": 0, "discount_total": 0, "id": "06bf537b-c783-11e6-f6b9-7ea7909d949a", "is_return": true, "loyalty_value": 0, "price": 0, "price_set": true, "price_total": 0, "product_id": "188a87aa-06fe-11e4-a0f5-b8ca3a64f8f4", "quantity": -1, "sequence": 0, "status": "SAVED", "tax": 0, "tax_components": [ { "rate_id": "b1dfed8b-f019-11e3-a0f5-b8ca3a64f8f4", "total_tax": 0 } ], "tax_id": "b1d192bc-f019-11e3-a0f5-b8ca3a64f8f4", "tax_total": 0, "total_cost": -100, "total_discount": 0, "total_loyalty_value": 0, "total_price": 0, "total_tax": 0, "unit_cost": 100, "unit_discount": 0, "unit_loyalty_value": 0, "unit_price": 0, "unit_tax": 0 } ], "note": "", "outlet_id": "b1e04bd8-f019-11e3-a0f5-b8ca3a64f8f4", "payments": [], "receipt_number": "1570", "receipt_sequence": 1570, "register_id": "b1e198a9-f019-11e3-a0f5-b8ca3a64f8f4", "return_for": "b8ca3a65-0183-11e4-fbb5-39f7fce5e39b", "sale_date": "2016-09-19T20:28:03+00:00", "short_code": "ovvfkk", "state": "parked", "status": "SAVED", "taxes": [], "total_loyalty": 0, "total_price": -200, "total_tax": -30, "updated_at": "2016-09-19T20:28:03+00:00", "user_id": "b1ed6158-f019-11e3-a0f5-b8ca3a64f8f4", "version": 1978890425 } }, "schema": { "$ref": "#/components/schemas/SaleResponse" } } }, "description": "" } }, "summary": "Return a sale", "tags": [ "Sales" ] } }, "/search": { "get": { "description": "This endpoint allows integrators to search all of the most commonly used resources, **sales**, **products** and **customers**. Each type allowing search by a number of different parameters.\n### Supported resource types and attributes\n- **Sales**\n - date_from\n - date_to\n - time_from\n - time_to\n - timezone\n - status\n - state\n - attributes\n - invoice_number\n - customer_id\n - user_id\n - outlet_id\n - register_id\n - payment_type_id\n - product_id\n - sale_total\n - customer_name\n- **Products**\n - sku **_(values must be lowercased)_**\n - supplier_id\n - brand_id\n - tag_id\n - product_type_id\n - variant_parent_id\n- **Customers**\n - customer_code\n - first_name\n - last_name\n - company_name\n - mobile\n - phone\n - email\n### Sorting and pagination\nUnlike other endpoints, search results from this endpoint can be sorted by any of the attributes above. Because of that, the default [pagination](https://x-series-api.lightspeedhq.com/docs/pagination#api-20) mechanism is not appropriate for this endpoint. Instead, this endpoint uses `offset` and `page_size` attributes to handle search results spanning multiple pages.\n\n\ud83d\udd12 Requires one of the following:\n- `sales:read` scope when searching for sales\n- `products:read` scope when searching for products\n- `customers:read` scope when searching for customers\n", "operationId": "Search", "parameters": [ { "description": "The entity type to search for.", "in": "query", "name": "type", "required": true, "schema": { "enum": [ "sales", "products", "customers" ], "type": "string" } }, { "description": "The attribute used to sort items returned in the response. Supported values depend on the entity type.", "in": "query", "name": "order_by", "schema": { "type": "string" } }, { "description": "Sorting direction.", "in": "query", "name": "order_direction", "schema": { "enum": [ "asc", "desc" ], "type": "string" } }, { "description": "The maximum number of objects to be included in the response, currently limited to 1000. Specifying more than 1000 will result in 1000 objects being returned.", "in": "query", "name": "page_size", "schema": { "type": "integer" } }, { "description": "The number of objects to be \"skipped\" for the response. Used for pagination.", "in": "query", "name": "offset", "schema": { "type": "integer" } }, { "description": "The `id` of the object to be included in the response.", "in": "query", "name": "_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "The `id` of the object to be excluded from the response.", "in": "query", "name": "-_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "Indicated whether deleted objects should be included in the response.", "in": "query", "name": "deleted", "schema": { "type": "boolean" } }, { "deprecated": true, "description": "**SALES** Status of the sale to find.\nCan be used multiple times to search for objects with different values of this parameter.\nDeprecated, please use state and attributes instead.", "in": "query", "name": "status", "schema": { "type": "string" } }, { "description": "**SALES** State of the sale to find.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "state", "schema": { "type": "string" } }, { "description": "**SALES** Attributes of the sale to find.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "attributes", "schema": { "items": { "type": "string" }, "type": "array" } }, { "description": "**SALES** Invoice number of the sale.", "in": "query", "name": "invoice_number", "schema": { "type": "string" } }, { "description": "**SALES** The `ID` of the customer associated with the sales.", "in": "query", "name": "customer_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**SALES** The `ID` of the user associated with the sales.", "in": "query", "name": "user_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**SALES** The `ID` of the outlet associated with the sales.", "in": "query", "name": "outlet_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**SALES** Lower limit for the sale date as UTC timestamp. Format: `2016-08-08T12:00:00Z`.", "in": "query", "name": "date_from", "schema": { "type": "string" } }, { "description": "**SALES** Upper limit for the sale date as UTC timestamp. Format: `2016-08-08T12:00:00Z`.", "in": "query", "name": "date_to", "schema": { "type": "string" } }, { "description": "**SALES** Lower time-of-day limit (in local time) for filtering sales. Format: `H:MM` or `HH:MM` (e.g. `09:00`). Use with `timezone` for accurate local-time filtering. When only `time_from` is provided, `time_to` defaults to `24:00`.", "in": "query", "name": "time_from", "schema": { "type": "string" } }, { "description": "**SALES** Upper time-of-day limit (in local time) for filtering sales. Format: `H:MM` or `HH:MM` (e.g. `17:00`). Use with `timezone` for accurate local-time filtering. When only `time_to` is provided, `time_from` defaults to `00:00`.", "in": "query", "name": "time_to", "schema": { "type": "string" } }, { "description": "**SALES** IANA timezone identifier used to interpret `time_from` and `time_to` (e.g. `America/Toronto`). Defaults to UTC when omitted. See the [list of tz database time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) for valid values.", "in": "query", "name": "timezone", "schema": { "type": "string" } }, { "description": "**SALES** The ID of the register associated with the sale.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "register_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**SALES** The ID of a payment type used in the sale.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "payment_type_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**SALES** The ID of a product included in the sale.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "product_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**SALES** The exact total amount of the sale to find.", "in": "query", "name": "sale_total", "schema": { "format": "float", "type": "number" } }, { "description": "**SALES** The name of the customer associated with the sale. Supports prefix matching.", "in": "query", "name": "customer_name", "schema": { "type": "string" } }, { "description": "**PRODUCTS** The SKU of products to include in the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "sku", "schema": { "type": "string" } }, { "description": "**PRODUCTS** The SKU of products to exclude from the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "-sku", "schema": { "type": "string" } }, { "description": "**PRODUCTS** The ID of the supplier associated with the product to include in the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "supplier_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the supplier associated with the product to exclude from the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "-supplier_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the brand associated with the product to include in the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "brand_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the brand associated with the product to exclude from the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "-brand_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the tag associated with the product to include in the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "tag_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the brand associated with the product to exclude from the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "-tag_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the product type associated with the product to include in the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "product_type_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the product type associated with the product to exclude from the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "-product_type_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the variant parent product associated with the product to include in the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "variant_parent_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**PRODUCTS** The ID of the variant parent product associated with the product to exclude from the search.\nCan be used multiple times to search for objects with different values of this parameter.", "in": "query", "name": "-variant_parent_id", "schema": { "format": "UUID", "type": "string" } }, { "description": "**CUSTOMERS** The `customer_code` associated with the customer to find.", "in": "query", "name": "customer_code", "schema": { "type": "string" } }, { "description": "**CUSTOMERS** The `email` address associated with the customer to find.", "in": "query", "name": "email", "schema": { "type": "string" } }, { "description": "**CUSTOMERS** The `first_name` for the customers to find.", "in": "query", "name": "first_name", "schema": { "type": "string" } }, { "description": "**CUSTOMERS** The `last_name` for the customers to find.", "in": "query", "name": "last_name", "schema": { "type": "string" } }, { "description": "**CUSTOMERS** The `company_name` for the customers to find.", "in": "query", "name": "company_name", "schema": { "type": "string" } }, { "description": "**CUSTOMERS** The `mobile number` for the customers to find.", "in": "query", "name": "mobile", "schema": { "type": "string" } }, { "description": "**CUSTOMERS** The `phone number` for the customers to find.", "in": "query", "name": "phone", "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SearchResponse" } } }, "description": "" } }, "summary": "Search for resources", "tags": [ "Search" ] } }, "/security_events": { "get": { "description": "This API returns a list of all the security log events **for the current user**. If you want a list of all the security events for all users please use the auditlog_events with filter type == \"security\". See the auditlog_events API in the beta documentation for more information.\n\n\ud83d\udd12 Requires: `audit:read` scope", "operationId": "get-security_events", "responses": { "200": { "content": { "Security signin example": { "example": { "action": "signin", "created_at": "2020-01-29T22:26:18Z", "id": "1222647183683117056", "ip_address": "14.1.34.16", "occurred_at": "2020-01-29T22:26:18Z", "type": "security", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36", "user_id": "02dcd191-ae2b-11e9-f336-cd2e6d8a5806" } }, "application/json": { "schema": { "properties": { "event": { "$ref": "#/components/schemas/AuditLogEvent" } }, "type": "object" } } }, "description": "OK" } }, "summary": "List security events for current user", "tags": [ "Audit" ] } }, "/serialnumbers": { "get": { "description": "Returns a paginated list of serial numbers.\n\n\ud83d\udd12 Requires: `serial_numbers:read` scope", "operationId": "get-serialnumbers", "parameters": [ { "description": "A product ID. This filters the serial numbers to only include ones on this product.", "in": "query", "name": "product_id", "schema": { "format": "uuid", "type": "string" } }, { "description": "An outlet ID. This filters the serial numbers to only include ones on this outlet.", "in": "query", "name": "outlet_id", "schema": { "format": "uuid", "type": "string" } }, { "description": "A sale ID. This filters the serial numbers to only include ones that were sold in the specified sale.", "in": "query", "name": "sale_id", "schema": { "format": "uuid", "type": "string" } }, { "description": "A line item ID. This filters the serial numbers to only include ones sold in the specified line item.", "in": "query", "name": "line_item_id", "schema": { "format": "uuid", "type": "string" } }, { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SerialNumberCollection" } } }, "description": "A paginated list of serial numbers." } }, "summary": "List serial numbers", "tags": [ "Serial Numbers" ] }, "post": { "description": "Creates a serial number.\n\n\ud83d\udd12 Requires: `serial_numbers:write` scope", "operationId": "create-serialnumber", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SerialNumberRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SerialNumberResponse" } } }, "description": "The serial number" } }, "summary": "Create a serial number", "tags": [ "Serial Numbers" ] } }, "/serialnumbers/{serialnumber_id}": { "delete": { "description": "Deletes a serial number.\n\n\ud83d\udd12 Requires: `serial_numbers:write` scope", "operationId": "delete-serialnumber", "parameters": [ { "description": "The serial number id", "in": "path", "name": "serialnumber_id", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "" } }, "summary": "Delete a serial number", "tags": [ "Serial Numbers" ] }, "get": { "description": "Returns a single serial number.\n\n\ud83d\udd12 Requires: `serial_numbers:read` scope", "operationId": "get-serialnumber", "parameters": [ { "description": "The serial number id", "in": "path", "name": "serialnumber_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SerialNumberResponse" } } }, "description": "The serial number" } }, "summary": "Get a single serial number", "tags": [ "Serial Numbers" ] } }, "/service_items/customer/{customer_id}": { "get": { "description": "Returns a paginated list of customer's service items.\n\n\ud83d\udd12 Requires: `services:read` scope", "operationId": "ListServiceItems", "parameters": [ { "description": "The customer id", "in": "path", "name": "customer_id", "required": true, "schema": { "type": "string" } }, { "description": "The lower limit for the service id to be included in the response. For proper pagination, it needs to be the item id of the last item in the response from your previous request.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "limit", "schema": { "default": 100, "format": "int64", "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "example": { "has_next": false, "job_items": [ { "created_at": "2025-08-12T18:46:30.216844Z", "created_by": "06e94082-ed4f-11ed-fd41-fef5ad8054af", "initial_condition": "Screen cracked, minor water damage", "item_details": { "description": "Customer's primary phone with cracked screen", "serial_number": "F2LXN1234A" }, "item_id": "e6fd369e-e579-4768-b12d-6754af620f2d", "item_name": "iPhone 15 Pro", "updated_at": "2025-08-12T18:46:30.216844Z", "updated_by": "06e94082-ed4f-11ed-fd41-fef5ad8054af" }, { "created_at": "2025-08-12T18:44:14.387026Z", "created_by": "06e94082-ed4f-11ed-fd41-fef5ad8054af", "initial_condition": "Spacebar key not responding consistently", "item_details": { "description": "13-inch laptop with keyboard issues", "serial_number": "C02D12345678" }, "item_id": "a57dc842-1075-458a-ab98-f658c4f985de", "item_name": "MacBook Air M2", "updated_at": "2025-08-12T18:44:14.387026Z", "updated_by": "06e94082-ed4f-11ed-fd41-fef5ad8054af" } ], "total_job_items": 2 }, "schema": { "properties": { "has_next": { "type": "boolean" }, "job_items": { "items": { "properties": { "created_at": { "type": "string" }, "created_by": { "type": "string" }, "initial_condition": { "type": "string" }, "item_details": { "properties": { "description": { "type": "string" }, "serial_number": { "type": "string" } }, "type": "object" }, "item_id": { "type": "string" }, "item_name": { "type": "string" }, "updated_at": { "type": "string" }, "updated_by": { "type": "string" } }, "type": "object" }, "type": "array" }, "total_job_items": { "type": "integer" } }, "type": "object" } } }, "description": "" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" } } }, "description": "Unauthorized" } }, "summary": "List a customer's service items", "tags": [ "Service Orders" ] } }, "/service_statuses": { "get": { "description": "Returns all service statuses for the retailer, including system defaults and custom ones.\n\n**Only available with the Service Orders module enabled.**\n\n\ud83d\udd12 Requires: `services:read` scope", "operationId": "ListServiceStatuses", "responses": { "200": { "content": { "application/json": { "example": [ { "created_at": "2026-01-15T10:00:00Z", "display_name": "New", "display_order": 1, "id": "2038696150067306496", "retailer_id": "00000000-0001-0001-0001-000000000001", "status_key": "NEW", "system_default": true, "updated_at": "2026-01-15T10:00:00Z" }, { "created_at": "2026-01-15T10:00:00Z", "display_name": "Waiting for Parts", "display_order": 2, "id": "2038696150067306497", "retailer_id": "00000000-0001-0001-0001-000000000001", "status_key": "CUSTOM", "system_default": false, "updated_at": "2026-01-15T10:00:00Z" } ], "schema": { "items": { "$ref": "#/components/schemas/ServiceStatusDetails" }, "type": "array" } } }, "description": "List of service statuses" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Unauthorized" }, "403": { "content": { "application/json": { "example": { "error": "user missing required permissions" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Forbidden \u2014 missing `services:read` scope" } }, "summary": "List service statuses", "tags": [ "Service Orders" ] }, "post": { "description": "Creates a new custom service status for the retailer. The new status is\nappended at the end of the display order. Use the PATCH endpoint to\nchange its position after creation.\n\n**Only available with the Service Orders module enabled.**\n\n\ud83d\udd12 Requires: `services:write` scope", "operationId": "CreateServiceStatus", "requestBody": { "content": { "application/json": { "schema": { "properties": { "name": { "description": "Human-readable name for the status.", "type": "string" } }, "required": [ "name" ], "type": "object" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "example": { "created_at": "2026-03-31T18:23:47.719422Z", "display_name": "Waiting for Parts", "display_order": 5, "id": "2039046012672835584", "retailer_id": "00000000-0001-0001-0001-000000000001", "status_key": "CUSTOM", "system_default": false, "updated_at": "2026-03-31T18:23:47.719422Z" }, "schema": { "$ref": "#/components/schemas/ServiceStatusDetails" } } }, "description": "Service status created successfully" }, "400": { "content": { "application/json": { "example": { "error": "name cannot be empty" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Bad request \u2014 name is missing or blank" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Unauthorized" }, "403": { "content": { "application/json": { "example": { "error": "user missing required permissions" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Forbidden \u2014 missing `services:write` scope" }, "409": { "content": { "application/json": { "example": { "error": "a status already exists with this name" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Conflict \u2014 a status with this name already exists" } }, "summary": "Create a service status", "tags": [ "Service Orders" ] } }, "/service_statuses/{id}": { "delete": { "description": "Deletes a custom service status.\n\nSystem default statuses cannot be deleted. A status cannot be deleted if it is still assigned to one or more service orders.\n\n**Only available with the Service Orders module enabled.**\n\n\ud83d\udd12 Requires: `services:write` scope", "operationId": "DeleteServiceStatus", "responses": { "204": { "description": "Service status deleted successfully" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Unauthorized" }, "403": { "content": { "application/json": { "example": { "error": "cannot modify system status" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Forbidden \u2014 missing `services:write` scope, or attempting to delete a system default status" }, "404": { "content": { "application/json": { "example": { "error": "job status not found" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Not Found" }, "409": { "content": { "application/json": { "example": { "error": "status is in use by one or more jobs and cannot be deleted without a replacement" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Conflict \u2014 status is still assigned to one or more service orders" } }, "summary": "Delete a service status", "tags": [ "Service Orders" ] }, "get": { "description": "Returns a single service status by ID.\n\n**Only available with the Service Orders module enabled.**\n\n\ud83d\udd12 Requires: `services:read` scope", "operationId": "GetServiceStatus", "responses": { "200": { "content": { "application/json": { "example": { "created_at": "2026-03-30T19:28:37.155851Z", "display_name": "newest custom edited?", "display_order": 4, "id": "2038699938241933312", "retailer_id": "00000000-0001-0001-0001-000000000001", "status_key": "CUSTOM", "system_default": false, "updated_at": "2026-03-31T18:23:07.400648Z" }, "schema": { "$ref": "#/components/schemas/ServiceStatusDetails" } } }, "description": "Service status found" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Unauthorized" }, "403": { "content": { "application/json": { "example": { "error": "user missing required permissions" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Forbidden \u2014 missing `services:read` scope" }, "404": { "content": { "application/json": { "example": { "error": "job status not found" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Not Found" } }, "summary": "Get a service status", "tags": [ "Service Orders" ] }, "parameters": [ { "description": "ID of the service status", "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ], "patch": { "description": "Partially updates a custom service status. Only provided fields are updated.\n\nSystem default statuses cannot be modified.\n\n**Only available with the Service Orders module enabled.**\n\n\ud83d\udd12 Requires: `services:write` scope", "operationId": "UpdateServiceStatus", "requestBody": { "content": { "application/json": { "schema": { "properties": { "display_order": { "description": "New display order. Can be set to null to clear it.", "nullable": true, "type": "integer" }, "name": { "description": "New human-readable name for the status. If provided, must not be blank.", "type": "string" } }, "type": "object" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "example": { "created_at": "2026-03-30T19:28:37.155851Z", "display_name": "newest custom edited?", "display_order": 4, "id": "2038699938241933312", "retailer_id": "00000000-0001-0001-0001-000000000001", "status_key": "CUSTOM", "system_default": false, "updated_at": "2026-03-31T18:23:07.400648Z" }, "schema": { "$ref": "#/components/schemas/ServiceStatusDetails" } } }, "description": "Service status updated successfully" }, "400": { "content": { "application/json": { "example": { "error": "name cannot be empty" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Bad request \u2014 name is provided but blank" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Unauthorized" }, "403": { "content": { "application/json": { "example": { "error": "cannot modify system status" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Forbidden \u2014 missing `services:write` scope, or attempting to modify a system default status" }, "404": { "content": { "application/json": { "example": { "error": "job status not found" }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Not Found" }, "409": { "content": { "application/json": { "examples": { "duplicate_display_order": { "value": { "error": "a status already exists with this display order" } }, "duplicate_name": { "value": { "error": "a status already exists with this name" } } }, "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Conflict \u2014 a status with this name or display order already exists" } }, "summary": "Update a service status", "tags": [ "Service Orders" ] } }, "/services": { "get": { "description": "Returns a paginated list of services.\n\n\ud83d\udd12 Requires: `services:read` scope", "operationId": "ListServices", "parameters": [ { "description": "The lower limit for the service id to be included in the response. For proper pagination, it needs to be the service id of the last item in the response from your previous request.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "limit", "schema": { "default": 100, "format": "int64", "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "example": { "has_next": false, "jobs": [ { "service": { "agenda": { "date": "2025-08-27T04:00:00Z", "minutes_scheduled": 120 }, "assigned_user_id": "", "created_at": "2025-08-25T16:26:29.56854Z", "id": "1960015938019700736", "line_items": [ { "fulfillment_type": "UNSPECIFIED", "gift_card": null, "id": "dc8fcea9-e4eb-47b1-9994-fa7fa8d10f53", "is_picklist_pickable": false, "note": "", "price_set": false, "product_id": "ced180dd-1234-47ae-b16e-149897b26681", "promotions": [], "quantity": "1", "register_id": "06e94082-ed4f-11ed-fd41-fef5ad8737fa", "register_sequence_id": "0698ab21-5f72-11f0-f6d9-785ab008ba49", "sales_person_id": "", "sequence": "0", "sku": "10026", "state": "CONFIRMED", "tax_components": [], "unit_discount": "0", "unit_loyalty": "0", "unit_price": "15" } ], "retailer_id": "06e94082-ed4f-11ed-fd41-fef5ad4ffc39", "sale_id": "6872a358-0089-89ae-11f0-81cfbf9b0ca1", "status": "NEW", "status_details": { "created_at": "2025-08-25T16:26:29.56854Z", "display_name": "New", "display_order": 1, "id": "2038696150067306496", "retailer_id": "06e94082-ed4f-11ed-fd41-fef5ad4ffc39", "status_key": "NEW", "system_default": true, "updated_at": "2025-08-25T16:26:29.56854Z" }, "totals": { "is_sale_level_discount_percentage": false, "sale_level_discount_value": "0", "sub_total": "15", "total_amount": "16.95", "total_promotion": "0", "total_tax": "1.95" }, "updated_at": "2025-08-25T16:26:29.732308Z" }, "service_item": { "created_at": "2025-08-21T18:08:14.277021Z", "created_by": "tech-001", "initial_condition": "Needs new brake pads and general tune-up.", "item_details": { "description": "2022 Trek FX 3 Disc, 21-speed hybrid bike, black.", "serial_number": "TREKFX3-2022-12345" }, "item_id": "bike-001", "item_name": "Trek FX 3 Disc Hybrid Bike", "updated_at": "2025-08-21T18:08:14.43438Z", "updated_by": "tech-001" } } ], "total_jobs": 1 }, "schema": { "properties": { "has_next": { "description": "Whether or not there are more pages available", "type": "boolean" }, "jobs": { "items": { "properties": { "service": { "$ref": "#/components/schemas/ServiceOrder" }, "service_item": { "nullable": true, "type": "object" } }, "type": "object" }, "type": "array" }, "total_jobs": { "description": "Total number of jobs", "type": "integer" } }, "type": "object" } } }, "description": "A paginated list of service orders" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" } } }, "description": "Unauthorized" } }, "summary": "List services", "tags": [ "Service Orders" ] }, "post": { "description": "**Only available with the Service Orders module enabled.**\n\nCreates a new service order. This endpoint allows you to create service orders with a customer, a service item, note and location.\n\n\ud83d\udd12 Requires: `services:write` `sales:write` scopes", "operationId": "CreateService", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceOrderRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DetailedService" } } }, "description": "Service order created successfully" }, "400": { "content": { "application/json": { "example": { "error": "twirp error invalid_argument: register_id register ID can't be empty" }, "schema": { "properties": { "error": { "description": "Error message describing the bad request", "type": "string" } }, "type": "object" } } }, "description": "Bad request" }, "401": { "content": { "application/json": { "example": { "error": "CSRF validation fail" }, "schema": { "properties": { "error": { "description": "Error message describing the authentication failure", "type": "string" } }, "type": "object" } } }, "description": "Unauthorized" }, "403": { "content": { "application/json": { "example": { "error": "user missing required permissions" }, "schema": { "properties": { "error": { "description": "Error message describing the authorization failure", "type": "string" } }, "type": "object" } } }, "description": "Forbidden" } }, "summary": "Create a service order", "tags": [ "Service Orders" ] } }, "/services/{service_id}": { "get": { "description": "Get a single service order.\n\n\ud83d\udd12 Requires: `services:read` scope", "operationId": "GetService", "responses": { "200": { "content": { "application/json": { "example": { "notes": [ { "body": "", "created_at": "2025-08-25T16:26:29.56854Z", "created_by": "06e94082-ed4f-11ed-fd41-fef5ad8054af", "id": "1960015938019700737", "service_id": "1960015938019700736", "service_status": "NEW" } ], "service": { "agenda": { "date": "2025-08-27T04:00:00Z", "minutes_scheduled": 120 }, "assigned_user_id": "", "created_at": "2025-08-25T16:26:29.56854Z", "id": "1960015938019700736", "line_items": [ { "fulfillment_type": "UNSPECIFIED", "gift_card": null, "id": "dc8fcea9-e4eb-47b1-9994-fa7fa8d10f53", "is_picklist_pickable": false, "note": "", "price_set": false, "product_id": "ced180dd-1234-47ae-b16e-149897b26681", "promotions": [], "quantity": "1", "register_id": "06e94082-ed4f-11ed-fd41-fef5ad8737fa", "register_sequence_id": "0698ab21-5f72-11f0-f6d9-785ab008ba49", "sales_person_id": "", "sequence": "0", "sku": "10026", "state": "CONFIRMED", "tax_components": [], "unit_discount": "0", "unit_loyalty": "0", "unit_price": "15" } ], "location": "Bike rack #123", "retailer_id": "06e94082-ed4f-11ed-fd41-fef5ad4ffc39", "sale_id": "6872a358-0089-89ae-11f0-81cfbf9b0ca1", "status": "NEW", "status_details": { "created_at": "2025-08-25T16:26:29.56854Z", "display_name": "New", "display_order": 1, "id": "2038696150067306496", "retailer_id": "06e94082-ed4f-11ed-fd41-fef5ad4ffc39", "status_key": "NEW", "system_default": true, "updated_at": "2025-08-25T16:26:29.56854Z" }, "totals": { "is_sale_level_discount_percentage": false, "sale_level_discount_value": "0", "sub_total": "15", "total_amount": "16.95", "total_promotion": "0", "total_tax": "1.95" }, "updated_at": "2025-08-25T16:26:29.732308Z" }, "service_item": { "created_at": "2025-07-25T23:59:10.335813Z", "created_by": "06e94082-ed4f-11ed-fd41-fef5ad8054af", "initial_condition": "Needs new brake pads and general tune-up.", "item_details": { "description": "2022 Trek FX 3 Disc, 21-speed hybrid bike, black.", "serial_number": "TREKFX3-2022-12345" }, "item_id": "f808afa3-c8f6-4b13-aa37-4b90dfae77a5", "item_name": "Trek FX 3 Disc Hybrid Bike", "updated_at": "2025-08-25T16:26:29.619284Z", "updated_by": "662d3131-6434-2d65-3832-303665393430" } }, "schema": { "$ref": "#/components/schemas/DetailedService" } } }, "description": "Service has been found" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" } } }, "description": "Unauthorized" }, "404": { "content": { "application/json": { "example": { "error": "service not found" } } }, "description": "Not Found" } }, "summary": "Get service", "tags": [ "Service Orders" ] }, "parameters": [ { "description": "ID of the service to get", "in": "path", "name": "service_id", "required": true, "schema": { "type": "string" } } ] }, "/services_agenda/outlet/{outlet_id}": { "get": { "description": "Returns the service agenda for the specified outlet within the given time window.\n\n\ud83d\udd12 Requires: `services:read` scope", "operationId": "get-agenda-outlet_id", "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DailyAgenda" }, "type": "array" } } }, "description": "Outlet's service agenda" }, "401": { "content": { "application/json": { "example": { "error": "Access token is not valid" } } }, "description": "Unauthorized" } }, "summary": "Get services agenda by outlet", "tags": [ "Service Orders" ] }, "parameters": [ { "description": "The size, in days, of the time window for which the agenda is requested.", "in": "query", "name": "days", "schema": { "default": 7, "example": 31, "type": "integer" } }, { "description": "The first date of the time window for which the agenda is requested.", "in": "query", "name": "start_date", "required": true, "schema": { "example": "2017-07-21T17:32:28Z", "format": "date-time", "type": "string" } }, { "description": "The timezone in which the agenda is requested. When provided, the agenda returned will account for time changes like daylight savings.", "in": "query", "name": "timezone", "schema": { "example": "America/New_York", "type": "string" } }, { "in": "path", "name": "outlet_id", "required": true, "schema": { "type": "string" } } ] }, "/shifts": { "get": { "description": "Returns a paginated list of shifts.", "operationId": "ListShifts", "parameters": [ { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "created_at": "2024-05-23T09:25:43.511Z", "id": "00000000-0001-0001-0001-000000000004", "retailer_id": "00000000-0001-0001-0001-000000000001", "time_in": "2024-06-23T09:25:43.511Z", "time_out": "2024-06-23T12:25:43.511Z", "updated_at": "2024-05-23T09:25:43.511Z", "updated_by": "08002782-0c90-11e6-e3ed-117ec127b1ca", "user_id": "08002782-0c90-11e6-e3ed-117ec127b1ca", "version": 3378 }, { "created_at": "2024-06-23T10:30:43.511Z", "id": "00000000-0001-0001-0001-000000000005", "retailer_id": "00000000-0001-0001-0001-000000000002", "time_in": "2024-07-23T10:30:43.511Z", "time_out": "2024-07-23T13:30:43.511Z", "updated_at": "2024-06-23T10:30:43.511Z", "updated_by": "08002782-0c90-11e6-e3ed-117ec127b1cb", "user_id": "08002782-0c90-11e6-e3ed-117ec127b1cb", "version": 3379 } ], "version": { "max": 3379, "min": 3378 } }, "schema": { "$ref": "#/components/schemas/ShiftCollection" } } }, "description": "" } }, "summary": "List shifts", "tags": [ "Shifts" ] } }, "/stock_adjustments": { "get": { "description": "Returns a paginated list of stock adjustments for the authenticated retailer.\n\n\ud83d\udd12 Requires: `inventory:write` scope", "operationId": "ListStockAdjustments", "parameters": [ { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "default": 100, "maximum": 1000, "type": "integer" } }, { "description": "Return records with a version greater than this value.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "Return records with a version less than this value.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StockAdjustmentCollection" } } }, "description": "The list of stock adjustments was successfully retrieved." }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" } }, "summary": "List stock adjustments", "tags": [ "Inventory" ] }, "post": { "description": "Creates one or more stock adjustments in a single batch (1\u20131000 items per request).\n\n\ud83d\udd12 Requires: `inventory:write` scope", "operationId": "CreateStockAdjustments", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateStockAdjustmentsRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StockAdjustmentBatchResponse" } } }, "description": "The stock adjustments were successfully created." }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "422": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "Unprocessable Entity" } }, "summary": "Create stock adjustments", "tags": [ "Inventory" ] } }, "/store_credits": { "get": { "description": "Returns all the store credit customers in a store with their store credit balance\nand a list of last store credit transactions for each customer\n\n\ud83d\udd12 Requires: `store_credits:read` scope", "operationId": "ListStoreCredit", "parameters": [ { "description": "The maximum number of items to be returned in the response", "in": "query", "name": "page_size", "schema": { "type": "integer" } }, { "description": "Include supplementary data. The only valid value for includes[] is 'customer'.", "in": "query", "name": "includes[]", "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "description": "Store Credit customer data in the shop", "items": { "$ref": "#/components/schemas/StoreCreditCustomer" }, "type": "array" } } }, "description": "The list of store credit customers." } }, "summary": "Get store credit usage for the store", "tags": [ "Store Credits" ] } }, "/store_credits/balances-bulk": { "post": { "description": "Returns all the store credit customers in a store with their store credit balance.\n\n\ud83d\udd12 Requires: `store_credits:read` scope", "operationId": "BulkBalancesStoreCreditList", "requestBody": { "content": { "application/json": { "schema": { "items": { "format": "uuid", "type": "string" }, "type": "array" } } }, "description": "The list of customer ids to get related store credit for.", "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditBalancesBulkResponse" } } }, "description": "A list of customers with associated store credit balances." } }, "summary": "Bulk Store Credit customers balances", "tags": [ "Store Credits" ] } }, "/store_credits/bulk": { "post": { "description": "Returns all the store credit customers in a store with their store credit balance\nand a list of last store credit transactions for each customer\n\n\ud83d\udd12 Requires: `store_credits:read` scope", "operationId": "BulkStoreCreditList", "requestBody": { "content": { "application/json": { "schema": { "items": { "format": "uuid", "type": "string" }, "type": "array" } } }, "description": "The list of customer ids to get related store credit for.", "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditBulkResponse" } } }, "description": "A list of customers with associated store credit balances." } }, "summary": "Bulk Store Credit customers", "tags": [ "Store Credits" ] } }, "/store_credits/report": { "get": { "description": "Returns a report of store credits.\n\n\ud83d\udd12 Requires: `store_credits:read` scope", "operationId": "StoreCreditReport", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditReport" } } }, "description": "A summary of a Store Credit usage in a store" } }, "summary": "Store credit report", "tags": [ "Store Credits" ] } }, "/store_credits/{customerId}": { "get": { "description": "Returns a balance and a history of store credit operations for the given customer id.\n\n\ud83d\udd12 Requires: `store_credits:read` scope", "operationId": "ListStoreCreditForCustomer", "parameters": [ { "description": "Customer id", "in": "path", "name": "customerId", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditCustomer" } } }, "description": "The store credit details for the given customer." }, "404": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "The given customer not found." } }, "summary": "Store Credit operations and a balance of a customer", "tags": [ "Store Credits" ] } }, "/store_credits/{customerId}/balance": { "get": { "description": "Returns a balance for the given customer id.\n\n\ud83d\udd12 Requires: `store_credits:read` scope", "operationId": "StoreCreditBalanceForCustomer", "parameters": [ { "description": "Customer id", "in": "path", "name": "customerId", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditCustomerBalance" } } }, "description": "The store credit details for the given customer." }, "404": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "The given customer not found." } }, "summary": "Store Credit balance of a customer", "tags": [ "Store Credits" ] } }, "/store_credits/{customerId}/hold": { "post": { "description": "Creates a tranaction that represents temporary store credit redemption\nThat redemption should be reverted later AND may get followed by a REDEMPTION", "operationId": "CreateStoreCreditHold", "parameters": [ { "description": "The customer id to create a hold for.", "in": "path", "name": "customerId", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditCreateHoldParams" } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditTransaction" } } }, "description": "A HOLD Transaction successfully created for a customer" }, "400": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "Invalid parameters or insufficient store credit balance" }, "404": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "The given customer was not found." } }, "summary": "Create a store credit HOLD transaction", "tags": [ "Store Credits" ] } }, "/store_credits/{customerId}/hold/reverse": { "post": { "description": "Creates a tranaction reverting a HOLD operation", "operationId": "ReverseStoreCreditHold", "parameters": [ { "description": "The customer id of the hold owner", "in": "path", "name": "customerId", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "properties": { "reference_id": { "description": "id of a previous HOLD transaction", "type": "string" } }, "type": "object" } } } }, "responses": { "200": { "description": "The hold transaction was reverted succesfully" }, "404": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "The given customer was not found." } }, "summary": "Reverse a store credit HOLD transaction", "tags": [ "Store Credits" ] } }, "/store_credits/{customerId}/transactions": { "post": { "description": "Creates a new store credit transaction. The type determines what sort of transaction it is.\n\n* \"REDEMPTION\" - Use this type when you want to redeem a certain amount from the store credit balance. The amount MUST be negative. If you want to add an amount to the balance use the \"ISSUE\" type.\n\ud83d\udd12 Requires: `store_credits:write:redeem`\n* \"ISSUE\" - Use this type when you issue store credit to a customer.\n\ud83d\udd12 Requires: `store_credits:write:issue`\n* \"REVERSE\" - Use this type when voiding an earlier ISSUE or REDEMPTION transaction.\n\ud83d\udd12 Requires: `store_credits:write:redeem`\n\nIf the customer account does not have enough credit to honour a REDEMPTION transaction a 422 HTTP status code will be returned.\n\n## Idempotency\n\n Please populate the client_id field with a unique transaction identifier, to ensure that the transaction is safe from double-submit problems.\n When creating an REVERSE operation, client_id must be equal to client_id of a reversed operation.\n See [the tutorial](/docs/store_credit#idempotency) for more information.", "operationId": "CreateStoreCreditTransaction", "parameters": [ { "description": "The customer id to apply the store transaction to.", "in": "path", "name": "customerId", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditTransactionParams" } } }, "description": "The store credit transaction details", "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StoreCreditTransaction" } } }, "description": "A transaction successfully created for the customer" }, "404": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "The given customer was not found." }, "422": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "There is insufficient balance for this customer to honour the transaction." } }, "summary": "Create a store credit transaction", "tags": [ "Store Credits" ] } }, "/suppliers": { "get": { "description": "Returns a paginated list of suppliers.\n\n\ud83d\udd12 Requires: `suppliers:read` scope", "operationId": "ListSuppliers", "parameters": [ { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } }, { "description": "Indicates whether deleted items should be included in the response.", "in": "query", "name": "deleted", "schema": { "type": "boolean" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "id": "dc85058a-a683-11e5-ef46-05a1ba8c8c08", "name": "Supplier post new test", "source": "USER" }, { "description": "", "id": "dc85058a-a683-11e5-ef46-08f9a926615e", "name": "Peak", "source": "" }, { "description": "API Supplier description", "id": "dc85058a-a683-11e5-e112-5734f1f3a2ca", "name": "API Supplier", "source": "USER" } ] }, "schema": { "$ref": "#/components/schemas/SupplierCollection" } } }, "description": "" } }, "summary": "List suppliers", "tags": [ "Suppliers" ] }, "post": { "description": "Creates a new supplier.\n\n\ud83d\udd12 Requires: `suppliers:write` scope", "operationId": "CreateSupplier", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSupplierRequest" } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "description": "The id of the supplier created.", "format": "uuid", "type": "string" } }, "type": "object" } } }, "description": "" } }, "summary": "Create new supplier", "tags": [ "Suppliers" ] } }, "/suppliers/{supplier_id}": { "delete": { "description": "Deletes a supplier. If there are products associated with the supplier, the products will be disassociated from the supplier.\n\n\ud83d\udd12 Requires: `suppliers:write` scope", "operationId": "DeleteSupplierById", "parameters": [ { "description": "The supplier id.", "in": "path", "name": "supplier_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "properties": { "id": { "description": "The id of the supplier deleted.", "format": "uuid", "type": "string" }, "job_id": { "description": "The id of the asynchronous job to disassociate products from the supplier.", "type": "string" } }, "type": "object" } }, "type": "object" } } }, "description": "The deleted supplier." } }, "summary": "Delete a single supplier", "tags": [ "Suppliers" ] }, "get": { "description": "Returns a single supplier with a given ID.\n\n\ud83d\udd12 Requires: `suppliers:read` scope", "operationId": "GetSupplierByID", "parameters": [ { "description": "The supplier id", "in": "path", "name": "supplier_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": { "id": "06bf537b-c783-11e7-ff13-02d1589727d5", "name": "Best supplies" } }, "schema": { "$ref": "#/components/schemas/SupplierResponse" } } }, "description": "" } }, "summary": "Get a single supplier", "tags": [ "Suppliers" ] }, "put": { "description": "Updates a supplier.\n\n\ud83d\udd12 Requires: `suppliers:write` scope", "operationId": "UpdateSupplierByID", "parameters": [ { "description": "The supplier id", "in": "path", "name": "supplier_id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSupplierRequest" } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "id": { "description": "The id of the supplier updated.", "format": "uuid", "type": "string" } }, "type": "object" } } }, "description": "" } }, "summary": "Update a supplier", "tags": [ "Suppliers" ] } }, "/tags": { "get": { "description": "Returns a collection of tags.\n\n\ud83d\udd12 Requires: `products:read` scope", "operationId": "ListTags", "parameters": [ { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } }, { "description": "Indicates whether deleted items should be included in the response.", "in": "query", "name": "deleted", "schema": { "type": "boolean" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TagCollection" } }, "new": { "example": { "data": [ { "id": "a0bb3580-027a-11e4-a0f5-b8ca3a64f8f4", "name": "test" }, { "id": "a72bb4ec-027a-11e4-a0f5-b8ca3a64f8f4", "name": "some_other_tag" }, { "id": "b1e2e709-f019-11e3-a0f5-b8ca3a64f8f4", "name": "General" } ] } } }, "description": "" } }, "summary": "List tags", "tags": [ "Tags" ] }, "post": { "description": "Creates a new tag.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "CreateTag", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTagRequest" } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "description": "The id of the created tag.", "format": "uuid", "type": "string" } }, "type": "object" } } }, "description": "" } }, "summary": "Create tag", "tags": [ "Tags" ] } }, "/tags/{tag_id}": { "delete": { "description": "Deletes a tag. If there are products associated with the tag, the products will be disassociated from the tag.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "DeleteTagByID", "parameters": [ { "description": "The tag id.", "in": "path", "name": "tag_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "properties": { "id": { "description": "The id of the tag deleted.", "format": "uuid", "type": "string" }, "job_id": { "description": "The id of the asynchronous job to disassociate products from the tag.", "type": "string" } }, "type": "object" } }, "type": "object" } } }, "description": "The deleted tag." } }, "summary": "Delete a single tag", "tags": [ "Tags" ] }, "get": { "description": "Returns a single tag with a given ID.\n\n\ud83d\udd12 Requires: `products:read` scope", "operationId": "GetTagByID", "parameters": [ { "description": "The tag id.", "in": "path", "name": "tag_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": { "id": "a0bb3580-027a-11e4-a0f5-b8ca3a64f8f4", "name": "test" } }, "schema": { "$ref": "#/components/schemas/TagResponse" } } }, "description": "" } }, "summary": "Get a single tag", "tags": [ "Tags" ] }, "put": { "description": "Updates a tag.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "UpdateTagByID", "parameters": [ { "description": "The tag id", "in": "path", "name": "tag_id", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTagRequest" } } } }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TagResponse" } } }, "description": "" } }, "summary": "Update a single tag", "tags": [ "Tags" ] } }, "/taxes": { "get": { "description": "Returns a paginated list of taxes.\n\n\ud83d\udd12 Requires: `taxes:read` scope", "operationId": "ListTaxes", "parameters": [ { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "deleted_at": null, "display_name": "No Tax", "id": "b1cecdf6-f019-11e3-a0f5-b8ca3a64f8f4", "is_default": false, "name": "No Tax", "rates": [ { "display_name": "No Tax", "id": "b1cfbc85-f019-11e3-a0f5-b8ca3a64f8f4", "name": "No Tax", "rate": 0 } ], "version": 391487 }, { "deleted_at": null, "display_name": "GST", "id": "b1d192bc-f019-11e3-a0f5-b8ca3a64f8f4", "is_default": true, "name": "GST", "rates": [ { "display_name": "GST", "id": "b1dfed8b-f019-11e3-a0f5-b8ca3a64f8f4", "name": "GST", "rate": 0.15 } ], "version": 391490 }, { "deleted_at": null, "display_name": "VAT", "id": "dc85058a-a683-11e5-e112-4600acd0096a", "is_default": false, "name": "VAT", "rates": [ { "display_name": "VAT", "id": "accff2bf-4600-11e5-8112-dc85058aa69e", "name": "VAT", "rate": 0.2 } ], "version": 478922 } ] }, "schema": { "$ref": "#/components/schemas/TaxCollection" } } }, "description": "" } }, "summary": "List taxes", "tags": [ "Taxes" ] }, "post": { "description": "Creates a new tax.\n\n\ud83d\udd12 Requires: `taxes:write` scope", "operationId": "CreateTax", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTaxRequest" } } } }, "responses": { "201": { "content": { "application/json": { "example": { "data": { "deleted_at": null, "display_name": "GST", "id": "b1d192bc-f019-11e3-a0f5-b8ca3a64f8f4", "is_default": true, "name": "GST", "rates": [ { "display_name": "GST", "id": "b1dfed8b-f019-11e3-a0f5-b8ca3a64f8f4", "name": "GST", "rate": 0.15 } ], "version": 391490 } }, "schema": { "$ref": "#/components/schemas/TaxResponse" } } }, "description": "Tax created successfully." }, "409": { "description": "Conflict - A tax with the given name already exists." } }, "summary": "Create tax", "tags": [ "Taxes" ] } }, "/taxes/{tax_id}": { "get": { "description": "Returns a single tax with a given ID.\n\n\ud83d\udd12 Requires: `taxes:read` scope", "operationId": "GetTaxByID", "parameters": [ { "description": "The tax id.", "in": "path", "name": "tax_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": { "deleted_at": null, "display_name": "GST", "id": "b1d192bc-f019-11e3-a0f5-b8ca3a64f8f4", "is_default": true, "name": "GST", "rates": [ { "display_name": "GST", "id": "b1dfed8b-f019-11e3-a0f5-b8ca3a64f8f4", "name": "GST", "rate": 0.15 } ], "version": 391490 } }, "schema": { "$ref": "#/components/schemas/TaxResponse" } } }, "description": "" } }, "summary": "Get a single tax", "tags": [ "Taxes" ] } }, "/user": { "get": { "description": "Returns the current user.\n\n\ud83d\udd12 Requires: `users:read` scope", "operationId": "GetUser", "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "account_type": "admin", "created_at": "2024-08-11T12:45:44+00:00", "deleted_at": null, "display_name": "API User", "email": "x-series.api@lightspeedhq.com", "email_verified_at": null, "enabled": true, "enabled_mfa": null, "id": "b1ed6158-f019-11e3-a0f5-b8ca3a64f8f4", "image_source": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "images": { "original": "https://vendimageuploadcdn.global.ssl.fastly.net/1920,fit/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sl": "https://vendimageuploadcdn.global.ssl.fastly.net/150x150,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sm": "https://vendimageuploadcdn.global.ssl.fastly.net/100x100,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "ss": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "st": "https://vendimageuploadcdn.global.ssl.fastly.net/40x40,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "standard": "https://vendimageuploadcdn.global.ssl.fastly.net/350,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "thumb": "https://vendimageuploadcdn.global.ssl.fastly.net/160,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg" }, "is_primary_user": false, "permissions": [ "user.add_edit", "user.view" ], "require_password_change": false, "restricted_outlet_id": null, "restricted_outlet_ids": [], "roles": [ { "id": 100, "name": "Admin", "system_role_id": 100 } ], "rules": { "sale.line_item_discount.manage": { "max_discount": 100 }, "sale.total_sale_discount.manage": { "max_discount": 100 } }, "seen_at": "2024-08-11T23:29:41+00:00", "switch_id": "usi:3e4b5edaec24", "target_daily": 1000, "target_monthly": 20000, "target_weekly": 5000, "time_until_deletion": null, "updated_at": "2016-04-18T15:32:17+00:00", "username": "apiuser", "version": 5020 } ] }, "schema": { "$ref": "#/components/schemas/UserResponse" } } }, "description": "" } }, "summary": "Get current user", "tags": [ "Users" ] } }, "/users": { "get": { "description": "Returns a paginated list of users.\n\n\ud83d\udd12 Requires: `users:read` scope", "operationId": "ListUsers", "parameters": [ { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "type": "integer" } }, { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "type": "integer" } }, { "description": "The maximum number of items to be returned in the response.", "in": "query", "name": "page_size", "schema": { "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "account_type": "admin", "created_at": "2024-08-11T12:45:44+00:00", "deleted_at": null, "display_name": "API User", "email": "x-series.api@lightspeedhq.com", "email_verified_at": null, "enabled": true, "enabled_mfa": null, "id": "b1ed6158-f019-11e3-a0f5-b8ca3a64f8f4", "image_source": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "images": { "original": "https://vendimageuploadcdn.global.ssl.fastly.net/1920,fit/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sl": "https://vendimageuploadcdn.global.ssl.fastly.net/150x150,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sm": "https://vendimageuploadcdn.global.ssl.fastly.net/100x100,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "ss": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "st": "https://vendimageuploadcdn.global.ssl.fastly.net/40x40,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "standard": "https://vendimageuploadcdn.global.ssl.fastly.net/350,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "thumb": "https://vendimageuploadcdn.global.ssl.fastly.net/160,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg" }, "is_primary_user": false, "permissions": null, "require_password_change": false, "restricted_outlet_id": null, "restricted_outlet_ids": [], "roles": [ { "id": 100, "name": "Admin", "system_role_id": 100 } ], "rules": {}, "seen_at": "2024-08-11T23:29:41+00:00", "switch_id": "usi:3e4b5edaec24", "target_daily": 1000, "target_monthly": 20000, "target_weekly": 5000, "time_until_deletion": null, "updated_at": "2016-04-18T15:32:17+00:00", "username": "apiuser", "version": 5020 } ], "version": { "max": 3348795492, "min": 298969 } }, "schema": { "$ref": "#/components/schemas/UserCollection" } } }, "description": "" } }, "summary": "List users", "tags": [ "Users" ] } }, "/users/bulk": { "post": { "description": "Get multiple users by id.\n\n\ud83d\udd12 Requires: `users:read` scope", "operationId": "GetUsersById", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUsersByIdsRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "account_type": "admin", "created_at": "2024-08-11T12:45:44+00:00", "deleted_at": null, "display_name": "API User", "email": "x-series.api@lightspeedhq.com", "email_verified_at": null, "enabled": true, "enabled_mfa": null, "id": "b1ed6158-f019-11e3-a0f5-b8ca3a64f8f4", "image_source": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "images": { "original": "https://vendimageuploadcdn.global.ssl.fastly.net/1920,fit/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sl": "https://vendimageuploadcdn.global.ssl.fastly.net/150x150,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sm": "https://vendimageuploadcdn.global.ssl.fastly.net/100x100,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "ss": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "st": "https://vendimageuploadcdn.global.ssl.fastly.net/40x40,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "standard": "https://vendimageuploadcdn.global.ssl.fastly.net/350,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "thumb": "https://vendimageuploadcdn.global.ssl.fastly.net/160,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg" }, "is_primary_user": false, "permissions": null, "require_password_change": false, "restricted_outlet_id": null, "restricted_outlet_ids": [], "roles": [ { "id": 100, "name": "Admin", "system_role_id": 100 } ], "rules": {}, "seen_at": "2024-08-11T23:29:41+00:00", "switch_id": "usi:3e4b5edaec24", "target_daily": 1000, "target_monthly": 20000, "target_weekly": 5000, "time_until_deletion": null, "updated_at": "2016-04-18T15:32:17+00:00", "username": "apiuser", "version": 5020 } ], "version": { "max": 3348795492, "min": 298969 } }, "schema": { "$ref": "#/components/schemas/UserCollection" } } }, "description": "" } }, "summary": "Get multiple users by id", "tags": [ "Users" ] } }, "/users/{user_id}": { "delete": { "description": "Returns the user that has been deleted.", "operationId": "DeleteUserByID", "parameters": [ { "description": "A valid user id that is not the current user nor a primary admin", "in": "path", "name": "user_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "account_type": "admin", "created_at": "2024-08-11T12:45:44+00:00", "deleted_at": "2024-08-12T16:00:03+00:00", "display_name": "API User", "email": "x-series.api@lightspeedhq.com", "email_verified_at": null, "enabled": true, "enabled_mfa": null, "id": "b1ed6158-f019-11e3-a0f5-b8ca3a64f8f4", "image_source": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "images": { "original": "https://vendimageuploadcdn.global.ssl.fastly.net/1920,fit/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sl": "https://vendimageuploadcdn.global.ssl.fastly.net/150x150,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sm": "https://vendimageuploadcdn.global.ssl.fastly.net/100x100,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "ss": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "st": "https://vendimageuploadcdn.global.ssl.fastly.net/40x40,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "standard": "https://vendimageuploadcdn.global.ssl.fastly.net/350,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "thumb": "https://vendimageuploadcdn.global.ssl.fastly.net/160,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg" }, "is_primary_user": false, "permissions": null, "require_password_change": false, "restricted_outlet_id": null, "restricted_outlet_ids": [], "roles": [ { "id": 100, "name": "Admin", "system_role_id": 100 } ], "rules": {}, "seen_at": "2024-08-11T23:29:41+00:00", "switch_id": "usi:3e4b5edaec24", "target_daily": 1000, "target_monthly": 20000, "target_weekly": 5000, "time_until_deletion": null, "updated_at": "2016-04-18T15:32:17+00:00", "username": "apiuser", "version": 5020 } ], "version": { "max": 3348795492, "min": 298969 } }, "schema": { "$ref": "#/components/schemas/UserResponse" } } }, "description": "" }, "403": { "content": { "application/json": { "example": { "error": "permission denied" } } }, "description": "Forbidden" }, "404": { "content": { "application/json": { "example": { "error": "user not found" } } }, "description": "Not Found" } }, "summary": "Delete a single user", "tags": [ "Users" ] }, "get": { "description": "Returns a single user with the requested ID.\n\n\ud83d\udd12 Requires: `users:read` scope", "operationId": "GetUserByID", "parameters": [ { "description": "A valid user id", "in": "path", "name": "user_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "account_type": "admin", "created_at": "2024-08-11T12:45:44+00:00", "deleted_at": null, "display_name": "API User", "email": "x-series.api@lightspeedhq.com", "email_verified_at": null, "enabled": true, "enabled_mfa": null, "id": "b1ed6158-f019-11e3-a0f5-b8ca3a64f8f4", "image_source": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "images": { "original": "https://vendimageuploadcdn.global.ssl.fastly.net/1920,fit/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sl": "https://vendimageuploadcdn.global.ssl.fastly.net/150x150,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "sm": "https://vendimageuploadcdn.global.ssl.fastly.net/100x100,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "ss": "https://vendimageuploadcdn.global.ssl.fastly.net/50x50,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "st": "https://vendimageuploadcdn.global.ssl.fastly.net/40x40,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "standard": "https://vendimageuploadcdn.global.ssl.fastly.net/350,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg", "thumb": "https://vendimageuploadcdn.global.ssl.fastly.net/160,fit,q90/vend-images/user/original/1/b/1ba1099aecfbbcbdfc4aa8efb136507f99a3c0d9.jpg" }, "is_primary_user": false, "permissions": null, "require_password_change": false, "restricted_outlet_id": null, "restricted_outlet_ids": [], "roles": [ { "id": 100, "name": "Admin", "system_role_id": 100 } ], "rules": {}, "seen_at": "2024-08-11T23:29:41+00:00", "switch_id": "usi:3e4b5edaec24", "target_daily": 1000, "target_monthly": 20000, "target_weekly": 5000, "time_until_deletion": null, "updated_at": "2016-04-18T15:32:17+00:00", "username": "apiuser", "version": 5020 } ], "version": { "max": 3348795492, "min": 298969 } }, "schema": { "$ref": "#/components/schemas/UserResponse" } } }, "description": "" } }, "summary": "Get a single user", "tags": [ "Users" ] } }, "/users/{user_id}/sale_totals": { "get": { "description": "Returns a single user's sales totals.", "operationId": "GetSalesTotalsForUserByID", "parameters": [ { "description": "A valid user id", "in": "path", "name": "user_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "example": { "data": [ { "cost": 0, "date_from": "2024-08-11T12:00:00+00:00", "date_to": "2024-08-12T11:59:59+00:00", "discounts": 0, "label": "today", "loyalty": 0, "revenue": 0, "sale_count": 0, "tax": 0, "total": 0 }, { "cost": 0, "date_from": "2024-07-31T12:00:00+00:00", "date_to": "2024-08-12T11:59:59+00:00", "discounts": 0, "label": "month", "loyalty": 0, "revenue": 0, "sale_count": 0, "tax": 0, "total": 0 } ] }, "schema": { "$ref": "#/components/schemas/UserSaleTotalResponse" } } }, "description": "" } }, "summary": "Get the sales totals for a single user", "tags": [ "Users" ] } }, "/users/{user_id}/sessions": { "delete": { "description": "Deletes all sessions and personal tokens of the given user.\n\n\ud83d\udd12 Requires: `users:write` scope", "operationId": "DeleteSessionsByUserID", "parameters": [ { "description": "A valid user id", "in": "path", "name": "user_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "401": { "description": "Unauthorized" }, "403": { "description": "Forbidden" }, "404": { "description": "Not Found" } }, "summary": "Delete user sessions", "tags": [ "Users" ] } }, "/variant_attributes": { "get": { "description": "Retrieve all Variant Attributes.\n\n\ud83d\udd12 Requires: `products:read` scope", "operationId": "ListVariantAttributes", "parameters": [ { "description": "Indicates whether deleted items should be included in the response.", "in": "query", "name": "deleted", "schema": { "type": "boolean" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariantAttributesListResponse" } } }, "description": "The list of variant attributes." } }, "summary": "Retrieve all Variant Attributes", "tags": [ "Variant Attributes" ] }, "post": { "description": "Variant Attributes are required when creating variants. They are used to specify what properties make a particular SKU different to another. e.g. You may\nhave an attribute 'Size' that lets you differentiate variants based on their size.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "CreateVariantAttribute", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariantAttributeCreateUpdateBody" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariantAttributeCreateResponse" } } }, "description": "The created variant attribute." }, "422": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "Error response. Failed to process variant attribute." } }, "summary": "Create a Variant Attribute", "tags": [ "Variant Attributes" ] } }, "/variant_attributes/{attribute-id}": { "delete": { "description": "Note you can't delete a variant attribute that is currently being used by a family.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "DeleteVariantAttribute", "parameters": [ { "description": "The object identifier of the Variant Attribute to delete.", "in": "path", "name": "attribute-id", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariantAttributeDeleteResponse" } } }, "description": "The deleted variant attribute." }, "404": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "Error response. Attribute not found." } }, "summary": "Delete a variant attribute", "tags": [ "Variant Attributes" ] }, "get": { "description": "Retrieves a single Variant Attribute with the given id.\n\n\ud83d\udd12 Requires: `products:read` scope", "operationId": "GetVariantAttributes", "parameters": [ { "description": "The object identifier of the Variant Attribute to retrieve.", "in": "path", "name": "attribute-id", "required": true, "schema": { "format": "uuid", "type": "string" } }, { "description": "Indicates whether deleted items should be included in the response.", "in": "query", "name": "deleted", "schema": { "type": "boolean" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariantAttributeResponse" } } }, "description": "The variant attribute." } }, "summary": "Retrieve a single Variant Attribute", "tags": [ "Variant Attributes" ] }, "put": { "description": "Updates a Variant Attribute's name.\n\n\ud83d\udd12 Requires: `products:write` scope", "operationId": "UpdateVariantAttribute", "parameters": [ { "description": "The object identifier of the Variant Attribute to update.", "in": "path", "name": "attribute-id", "required": true, "schema": { "format": "uuid", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariantAttributeCreateUpdateBody" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/VariantAttributeUpdateResponse" } } }, "description": "The updated variant attribute." }, "404": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "Error response. Attribute not found." }, "422": { "content": { "application/json": { "schema": { "type": "object" } } }, "description": "Error response. Failed to process variant attribute." } }, "summary": "Update a Variant Attribute's", "tags": [ "Variant Attributes" ] } }, "/webhooks": { "get": { "description": "List all webhooks.\n\n\ud83d\udd12 Requires: `webhooks` scope", "operationId": "get-webhooks", "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "items": { "$ref": "#/components/schemas/Webhook" }, "type": "array" } }, "type": "object" } }, "example-1": { "example": {} } }, "description": "OK" } }, "summary": "List webhooks", "tags": [ "Webhooks" ] }, "post": { "description": "Create a webhook.\n\n\ud83d\udd12 Requires: `webhooks` scope", "operationId": "post-webhooks", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhookRequest" } } }, "required": true }, "responses": { "201": { "content": { "application/json": { "schema": { "properties": { "data": { "$ref": "#/components/schemas/Webhook" } }, "type": "object" } } }, "description": "Created" }, "409": { "content": { "application/json": { "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "A webhook with this type and URL already exists." } }, "summary": "Create Webhook", "tags": [ "Webhooks" ] } }, "/webhooks/{webhookId}": { "delete": { "description": "Delete a webhook\n\n\ud83d\udd12 Requires: `webhooks` scope", "operationId": "delete-webhooks-webhookId", "parameters": [ { "in": "path", "name": "webhookId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "OK" }, "404": { "content": { "application/json": { "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Not Found" } }, "summary": "Delete Webhook", "tags": [ "Webhooks" ] }, "get": { "description": "Fetch a single webhook by its ID.\n\n\ud83d\udd12 Requires: `webhooks` scope", "operationId": "get-webhooks-id", "parameters": [ { "in": "path", "name": "webhookId", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "$ref": "#/components/schemas/Webhook" } }, "type": "object" } } }, "description": "OK" }, "404": { "content": { "application/json": { "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Not Found" } }, "summary": "Get Webhook", "tags": [ "Webhooks" ] }, "put": { "description": "Update an existing webhook\n\n\ud83d\udd12 Requires: `webhooks` scope", "operationId": "put-webhooks-id", "parameters": [ { "in": "path", "name": "webhookId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WebhookRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "$ref": "#/components/schemas/Webhook" } }, "type": "object" } } }, "description": "OK" }, "404": { "content": { "application/json": { "schema": { "properties": { "error": { "type": "string" } }, "type": "object" } } }, "description": "Not Found" } }, "summary": "Update Webhook", "tags": [ "Webhooks" ] } }, "/workflows/custom_fields": { "get": { "description": "Returns the custom field definitions for a given entity type.\n\n\ud83d\udd12 Requires: `custom_fields:read` scope", "operationId": "GetCustomFields", "parameters": [ { "description": "The entity type.", "in": "query", "name": "entity", "required": true, "schema": { "enum": [ "sale", "line_item", "customer", "product" ], "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldDefinitionCollection" } } }, "description": "A list of all the custom field definitions associated with the entity type." } }, "summary": "List custom field definitions", "tags": [ "Workflows" ] }, "post": { "description": "Create a new custom field definition for a given entity type.\n\n\ud83d\udd12 Requires: `custom_fields:write` scope", "operationId": "CreateCustomField", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldDefinitionParams" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "$ref": "#/components/schemas/CustomFieldDefinition" } }, "type": "object" } } }, "description": "A custom field definition." } }, "summary": "Define a new custom field", "tags": [ "Workflows" ] } }, "/workflows/custom_fields/values": { "get": { "description": "Returns the custom field values for a given entity.\n\n\ud83d\udd12 Requires: `custom_fields:read` scope", "operationId": "GetCustomFieldValues", "parameters": [ { "description": "The entity type.", "in": "query", "name": "entity", "required": true, "schema": { "enum": [ "sale", "line_item", "customer", "product" ], "type": "string" } }, { "description": "The entity ID.", "in": "query", "name": "entity_id", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldValueCollection" } } }, "description": "A list of all the custom field values associated with entity." } }, "summary": "List custom field values", "tags": [ "Workflows" ] }, "post": { "description": "Set new custom field values on a given entity.\n\n\ud83d\udd12 Requires: `custom_fields:write` scope", "operationId": "SetCustomFieldValues", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldValuesParams" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomFieldValueCollection" } } }, "description": "A list of all the custom field values associated with the entity." } }, "summary": "Set new custom field values", "tags": [ "Workflows" ] } }, "/workflows/custom_fields/{customFieldId}": { "delete": { "description": "Delete a custom field and all the values stored on that field.\n\n\ud83d\udd12 Requires: `custom_fields:write` scope", "operationId": "delete-custom-field", "parameters": [ { "description": "The ID of the custom field that you want deleted.", "in": "path", "name": "customFieldId", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "The custom field was deleted." } }, "summary": "Delete a custom field", "tags": [ "Workflows" ] }, "put": { "description": "Updates properties on a custom field.\n\n\ud83d\udd12 Requires: `custom_fields:write` scope", "operationId": "update-custom-field", "parameters": [ { "description": "The ID of the custom field that you want to update.", "in": "path", "name": "customFieldId", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateCustomFieldParams" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "$ref": "#/components/schemas/CustomFieldDefinition" } }, "type": "object" } } }, "description": "A custom field definition." } }, "summary": "Update a custom field", "tags": [ "Workflows" ] } }, "/workflows/remote_rules": { "get": { "description": "Returns the remote business rules registered on the retailer.\n\n\ud83d\udd12 Requires: `remote_rules:read` scope", "operationId": "get-remote-rules", "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "items": { "$ref": "#/components/schemas/RemoteBusinessRule" }, "type": "array" } }, "required": [ "data" ], "type": "object" } } }, "description": "A list of all the remote business rules associated with the retailer." } }, "summary": "List remote rules", "tags": [ "Workflows" ] }, "post": { "description": "Register a new remote rule for the retailer.\n\n\ud83d\udd12 Requires: `remote_rules:write` scope", "operationId": "create-remote-rule", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RemoteBusinessRuleParams" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "$ref": "#/components/schemas/RemoteBusinessRule" } }, "type": "object" } } }, "description": "A remote business rule." } }, "summary": "Create remote rule", "tags": [ "Workflows" ] } }, "/workflows/remote_rules/{remoteRuleId}": { "delete": { "description": "Delete a remote business rule.\n\n\ud83d\udd12 Requires: `remote_rules:write` scope", "operationId": "delete-remote-rule", "parameters": [ { "description": "The ID of the remote business rules that you want deleted.", "in": "path", "name": "remoteRuleId", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "The remote business rule was deleted." } }, "summary": "Delete a remote rule", "tags": [ "Workflows" ] } }, "/workflows/rules": { "get": { "description": "Returns the business rules for the retailer.\n\n\ud83d\udd12 Requires: `business_rules:read` scope", "operationId": "get-rules", "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "items": { "$ref": "#/components/schemas/BusinessRule" }, "type": "array" } }, "type": "object" } } }, "description": "A list of all the business rules associated with the retailer." } }, "summary": "List rules", "tags": [ "Workflows" ] }, "post": { "description": "Create a rule for the retailer.\n\n\ud83d\udd12 Requires: `business_rules:write` scope", "operationId": "create-rule", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BusinessRuleParams" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "properties": { "data": { "$ref": "#/components/schemas/BusinessRule" } }, "type": "object" } } }, "description": "A business rule." } }, "summary": "Create rule", "tags": [ "Workflows" ] } }, "/workflows/rules/{ruleId}": { "delete": { "description": "Delete a business rule.\n\n\ud83d\udd12 Requires: `business_rules:write` scope", "operationId": "delete-rule", "parameters": [ { "description": "The ID of the business rules that you want deleted.", "in": "path", "name": "ruleId", "required": true, "schema": { "type": "string" } } ], "responses": { "204": { "description": "The business rule was deleted." } }, "summary": "Delete a business rule", "tags": [ "Workflows" ] } } }, "components": { "parameters": { "PurchaseOrderAfter": { "description": "The lower limit for the version numbers to be included in the response.", "in": "query", "name": "after", "schema": { "format": "int64", "minimum": 0, "type": "integer" } }, "PurchaseOrderBefore": { "description": "The upper limit for the version numbers to be included in the response.", "in": "query", "name": "before", "schema": { "format": "int64", "minimum": 0, "type": "integer" } }, "PurchaseOrderID": { "description": "The unique identifier of the purchase order.", "in": "path", "name": "purchase_order_id", "required": true, "schema": { "type": "string" } }, "PurchaseOrderPageSize": { "description": "The maximum number of items to return. Defaults to 100 and cannot exceed 1000.", "in": "query", "name": "page_size", "schema": { "format": "int64", "maximum": 1000, "minimum": 0, "type": "integer" } } }, "schemas": { "Action": { "description": "Action triggered by a promotion.", "properties": { "exclude": { "items": { "$ref": "#/components/schemas/Filter" }, "type": "array" }, "include": { "items": { "$ref": "#/components/schemas/Filter" }, "type": "array" }, "max_quantity": { "description": "Maximum quantity, if required by the action type.", "type": "integer" }, "min_quantity": { "description": "Minimum quantity, if required by the action type.", "type": "integer" }, "quantity": { "description": "Quantity, if required by the action type.", "type": "integer" }, "type": { "description": "The type of action.", "enum": [ "basic_percent_discount", "basic_fixed_discount", "fixed_discount", "percent_discount", "loyalty", "fixed_price_discount", "fixed_pool_discount", "percent_pool_discount" ], "type": "string" }, "value": { "description": "Value associated with the action.", "format": "double", "type": "number" } }, "required": [ "type", "value" ], "title": "Action", "type": "object" }, "Adjustment": { "description": "An adjustment contains a modification to the sale price. For example, it can be a service fee (fee when the customer pays by credit card) or a discount.\nThe types defined here are the one used so far, but we reserve the right to add others.", "properties": { "adjustment_type": { "description": "Type of the adjustment.", "enum": [ "NON_CASH_FEE", "DISCOUNT", "TIP", "SURCHARGE", "ECOM_CUSTOM_CHARGE" ], "type": "string" }, "name": { "type": "string" }, "tax_components": { "description": "Collection of aggregated tax components associated with the adjustment.", "items": { "$ref": "#/components/schemas/LineItemTaxComponent" }, "type": "array" }, "value": { "description": "Aggregated total value of the adjustment.", "type": "number" } }, "required": [ "name", "type", "value" ], "title": "Adjustment", "type": "object" }, "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" }, "Attribute": { "properties": { "key": { "description": "The key for the attribute.", "type": "string" }, "value": { "description": "The value for the attribute.", "type": "string" } }, "required": [ "key", "value" ], "title": "Attribute", "type": "object" }, "AuditLogEvent": { "description": "The structure of the event and security event model", "properties": { "action": { "description": "The type of the action performed on the object.", "enum": [ "insert", "update", "delete" ], "type": "string" }, "created_at": { "description": "The timestamp indicating when the event was persisted to the audit log.", "format": "date-time", "type": "string" }, "data": { "description": "An object in JSON format representing the new values of the attributes that were changed by the event.", "oneOf": [ { "type": "object" }, { "items": { "type": "object" }, "type": "array" } ] }, "entity_id": { "description": "The id of the object involved in the event", "maxLength": 36, "type": "string" }, "id": { "description": "Autogenerated object identifier.", "type": "string" }, "ip_address": { "description": "The ip address from which the request causing the event originated.", "format": "ipv4", "maxLength": 64, "type": "string" }, "occurred_at": { "description": "The timestamp indicating when the action causing the event occurred.", "format": "date-time", "type": "string" }, "old_data": { "description": "An object in JSON format representing the old values of the attributes that were changed by the event.", "type": "object" }, "type": { "description": "The type of the object involved in the event. This may be something like \"security\" for security events or the name of the table the action was performed on, like \"vend_customer\".", "maxLength": 64, "type": "string" }, "user_agent": { "description": "User agent of the http client which submitted the request.", "maxLength": 500, "type": "string" }, "user_id": { "description": "The `id` of the user executing the action registered by this event.", "maxLength": 36, "type": "string" } }, "title": "Audit Log Event", "type": "object", "x-examples": { "example-1": { "action": "insert", "created_at": "2019-08-24T14:15:22Z", "data": {}, "entity_id": "string", "id": "string", "ip_address": "192.168.0.1", "occurred_at": "2019-08-24T14:15:22Z", "old_data": {}, "type": "string", "user_agent": "string", "user_id": "string" } } }, "BaseSupplier": { "properties": { "contact": { "description": "Contact information for the supplier.", "nullable": true, "properties": { "company_name": { "description": "The name of the supplier company. This field is defaulted to the supplier name if not provided.", "nullable": true, "type": "string" }, "email": { "description": "The contact email of the supplier.", "nullable": true, "type": "string" }, "fax": { "description": "Fax number of the supplier.", "nullable": true, "type": "string" }, "first_name": { "description": "The firstname of the contact person.", "nullable": true, "type": "string" }, "last_name": { "description": "The last name of the contact person.", "nullable": true, "type": "string" }, "mobile": { "description": "Mobile contact number of the supplier.", "nullable": true, "type": "string" }, "phone": { "description": "Physical contact number of the supplier.", "nullable": true, "type": "string" }, "physical_address1": { "description": "Line 1 address of the supplier's physical address.", "nullable": true, "type": "string" }, "physical_address2": { "description": "Line 2 address of the supplier's physical address.", "nullable": true, "type": "string" }, "physical_city": { "description": "City of the supplier's physical address.", "nullable": true, "type": "string" }, "physical_country_id": { "description": "ID of the country of the supplier's physical address.", "nullable": true, "type": "string" }, "physical_postcode": { "description": "Postcode of the supplier's physical address.", "nullable": true, "type": "string" }, "physical_state": { "description": "State of the supplier's physical address.", "nullable": true, "type": "string" }, "physical_suburb": { "description": "Suburb of the supplier's physical address.", "nullable": true, "type": "string" }, "postal_address1": { "description": "Line 1 address of the supplier's postal address.", "nullable": true, "type": "string" }, "postal_address2": { "description": "Line 2 address of the supplier's postal address.", "nullable": true, "type": "string" }, "postal_city": { "description": "City of the supplier's postal address.", "nullable": true, "type": "string" }, "postal_country_id": { "description": "ID of the country of the supplier's postal address.", "nullable": true, "type": "string" }, "postal_postcode": { "description": "Postcode of the supplier's postal address.", "nullable": true, "type": "string" }, "postal_state": { "description": "State of the supplier's postal address.", "nullable": true, "type": "string" }, "postal_suburb": { "description": "Suburb of the supplier's postal address.", "nullable": true, "type": "string" }, "twitter": { "description": "Twitter handle of the supplier contact.", "nullable": true, "type": "string" }, "website": { "description": "The website address of the supplier", "nullable": true, "type": "string" } }, "type": "object" }, "default_markup": { "description": "This is used for record-keeping purposes and it does not have any effect on your products.", "type": "number" }, "description": { "description": "The Supplier description.", "nullable": true, "type": "string" }, "name": { "description": "The Supplier name.", "type": "string" } }, "required": [ "name", "contact" ], "title": "BaseSupplier", "type": "object" }, "BasketProductResponse": { "description": "Per-line-item product pricing result returned by the basket endpoint.", "properties": { "adjustments": { "description": "List of price adjustments applied to this product.", "items": { "properties": { "amount": { "description": "Monetary amount of the adjustment (decimal string).", "type": "string" }, "description": { "description": "Human-readable description of the adjustment.", "type": "string" }, "id": { "description": "The adjustment ID.", "type": "string" }, "label": { "description": "Short label for the adjustment.", "type": "string" }, "type": { "description": "The adjustment type (e.g. promotion, discount).", "type": "string" }, "value": { "description": "Adjustment rate or value (decimal string).", "type": "string" } }, "required": [ "type", "id", "label", "description", "value", "amount" ], "type": "object" }, "type": "array" }, "final_price": { "description": "Final unit price after all adjustments (decimal string).", "type": "string" }, "final_tax": { "description": "Final unit tax after all adjustments (decimal string).", "type": "string" }, "id": { "description": "The product ID.", "type": "string" }, "loyalty_value": { "description": "Loyalty value earned for this product (decimal string).", "type": "string" }, "original_price": { "description": "Original unit price before adjustments (decimal string).", "type": "string" }, "original_tax": { "description": "Original unit tax before adjustments (decimal string).", "type": "string" } }, "required": [ "id", "original_price", "original_tax", "final_price", "final_tax", "adjustments", "loyalty_value" ], "title": "BasketProductResponse", "type": "object" }, "BasketRequest": { "properties": { "conditions": { "description": "Contextual conditions affecting pricing and promotions.\n", "items": { "oneOf": [ { "type": "string" }, { "items": { "type": "object" }, "type": "array" }, { "type": "object" } ], "properties": { "type": { "description": "Condition type.", "enum": [ "channel", "customer_group", "customer_id", "promo_code", "outlet_id", "tax_removal", "sale_discount", "price_overrides", "line_item_discount_percentages", "credit_redemption" ], "type": "string" }, "value": { "description": "Value shape depends on `type`: - `channel`: string (channel ID) - `customer_group`: string (customer group ID) - `customer_id`: string (customer ID) - `promo_code`: string (promo code) - `outlet_id`: string (outlet ID) - `tax_removal`: array of TaxRemoval objects - `sale_discount`: SaleDiscountCondition object - `price_overrides`: array of PriceOverride objects - `line_item_discount_percentages`: array of LineItemDiscountPercentage objects - `credit_redemption`: array of CreditRedemption objects\n" } }, "required": [ "type", "value" ], "type": "object" }, "minItems": 1, "type": "array" }, "config": { "properties": { "advanced_promotion": { "default": false, "description": "Enable advanced promotion engine.", "type": "boolean" }, "disable_promotions": { "default": false, "description": "Disable all promotion calculations.", "type": "boolean" }, "resolve_tax": { "default": false, "description": "Resolve tax rates from the outlet configuration instead of requiring tax_rate on each product. Requires an outlet_id condition.\n", "type": "boolean" } }, "type": "object" }, "items": { "description": "Line items in the basket. At least one required.", "items": { "properties": { "id": { "description": "Unique line item ID within this basket.", "type": "string" }, "product": { "properties": { "id": { "description": "Product ID.", "type": "string" }, "quantity": { "description": "Quantity (decimal string). Must be positive.\n", "example": "2.000", "type": "string" }, "tax_rate": { "description": "Tax rate as a decimal (e.g. \"0.15\" for 15%). Required unless config.resolve_tax=true. Must be positive.\n", "type": "string" } }, "required": [ "id", "quantity" ], "type": "object" } }, "required": [ "id", "product" ], "type": "object" }, "minItems": 1, "type": "array" }, "request_id": { "description": "Optional client-supplied idempotency ID. Echoed back in the response.", "type": "string" }, "sale_channel": { "description": "Sale channel. `Register` = in-store, `Ecommerce` = online. Null if not applicable.\n", "enum": [ "Register", "Ecommerce" ], "nullable": true, "type": "string" } }, "required": [ "items", "conditions" ], "type": "object" }, "BasketResponse": { "properties": { "credit_redemption": { "nullable": true, "properties": { "loyalty_points_spent": { "description": "Loyalty points redeemed (decimal string).", "type": "string" }, "store_credit_spent": { "description": "Store credit redeemed (decimal string).", "type": "string" }, "warnings": { "items": { "additionalProperties": true, "description": "Non-fatal warning about an item or discount calculation.", "type": "object" }, "type": "array" } }, "type": "object" }, "items": { "items": { "properties": { "id": { "type": "string" }, "product": { "$ref": "#/components/schemas/BasketProductResponse" }, "quantity": { "description": "Decimal string.", "type": "string" }, "tax_components": { "items": { "properties": { "rate_id": { "type": "string" }, "total": { "description": "Tax amount for this component (decimal string).", "type": "string" } }, "type": "object" }, "type": "array" }, "tax_id": { "type": "string" }, "total_discount": { "description": "Total discount applied (decimal string).", "type": "string" }, "total_price": { "description": "Total price after adjustments (decimal string).", "type": "string" }, "total_tax": { "description": "Total tax amount (decimal string).", "type": "string" }, "warning": { "additionalProperties": true, "description": "Non-fatal warning about an item or discount calculation.", "nullable": true, "type": "object" } }, "required": [ "id", "product", "quantity", "total_price", "total_tax", "total_discount", "tax_id", "tax_components" ], "type": "object" }, "type": "array" }, "potential_promotions": { "description": "Promotions that could apply if additional conditions were met.", "items": { "properties": { "action": { "description": "Action applied when the promotion triggers.", "nullable": true, "type": "object" }, "condition": { "description": "Criteria that must be met to trigger this promotion.", "type": "object" }, "description": { "type": "string" }, "end_time": { "format": "date-time", "nullable": true, "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "start_time": { "format": "date-time", "type": "string" } }, "type": "object" }, "type": "array" }, "promo_code_validations": { "description": "Validation result for each promo_code condition supplied.", "items": { "$ref": "#/components/schemas/PromoCodeValidation" }, "type": "array" }, "request_id": { "description": "Echoed from the request.", "type": "string" }, "sale_discount": { "nullable": true, "properties": { "amount": { "description": "Discount amount applied (decimal string).", "type": "string" }, "discount_product_id": { "type": "string" }, "tax": { "description": "Tax portion of the discount (decimal string).", "type": "string" }, "tax_components": { "items": { "properties": { "rate_id": { "type": "string" }, "total": { "description": "Tax amount for this component (decimal string).", "type": "string" } }, "type": "object" }, "type": "array" }, "tax_id": { "type": "string" }, "warning": { "additionalProperties": true, "description": "Non-fatal warning about an item or discount calculation.", "nullable": true, "type": "object" } }, "type": "object" }, "taxes": { "description": "Aggregated tax breakdown across the basket.", "items": { "$ref": "#/components/schemas/BasketTaxResponse" }, "type": "array" }, "totals": { "properties": { "amount": { "description": "Total amount payable (decimal string).", "type": "string" }, "remaining_sale_balance": { "description": "Remaining balance after credit/loyalty redemptions (decimal string).\n", "type": "string" }, "tax": { "description": "Total tax across all items (decimal string).", "type": "string" } }, "required": [ "tax", "amount", "remaining_sale_balance" ], "type": "object" } }, "required": [ "items", "potential_promotions", "promo_code_validations", "taxes", "totals" ], "type": "object" }, "BasketTaxResponse": { "description": "Aggregated tax entry in the basket response.", "properties": { "id": { "description": "The tax ID.", "type": "string" }, "name": { "description": "Tax name.", "type": "string" }, "rate": { "description": "Tax rate (decimal string, e.g. \"0.15\" for 15%).", "type": "string" }, "tax": { "description": "Total tax amount for this tax group (decimal string).", "type": "string" } }, "required": [ "id", "tax", "name", "rate" ], "title": "BasketTaxResponse", "type": "object" }, "Brand": { "properties": { "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "description": { "description": "The brand description.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "name": { "description": "The brand name.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "name", "id" ], "title": "Brand", "type": "object" }, "BrandBase": { "properties": { "description": { "description": "The brand description.", "type": "string" }, "name": { "description": "The Brand name.", "type": "string" } }, "required": [ "name" ], "title": "Brand", "type": "object" }, "BrandCollection": { "properties": { "data": { "description": "An array of Brand objects wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/Brand" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "Brand Collection", "type": "object" }, "BrandResponse": { "properties": { "data": { "$ref": "#/components/schemas/Brand" } }, "title": "Brand Response", "type": "object" }, "BrandSample": { "nullable": true, "properties": { "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "name": { "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "title": "Brand Sample", "type": "object" }, "BusinessRule": { "properties": { "created_at": { "description": "The creation timestamp in UTC.", "format": "date-time", "readOnly": true, "type": "string" }, "event_type": { "enum": [ "sale.ready_for_payment", "sale.line_items.added", "sale.customer.changed", "sale.created", "sale.updated" ], "type": "string" }, "id": { "example": "1239349747718000640", "readOnly": true, "type": "string" }, "remote_rule_id": { "example": "1239349157873029120", "type": "string" } }, "required": [ "event_type", "remote_rule_id" ], "title": "Business Rule", "type": "object" }, "BusinessRuleParams": { "description": "The parameters that can be passed to the create rule API.", "properties": { "event_type": { "enum": [ "sale.ready_for_payment", "sale.line_items.added", "sale.customer.changed", "sale.created", "sale.updated" ], "type": "string" }, "remote_rule_id": { "example": "1239349157873029120", "type": "string" } }, "required": [ "event_type", "remote_rule_id" ], "title": "Rule Parameters", "type": "object" }, "ButtonLayout": { "properties": { "deletedAt": { "format": "date-time", "nullable": true, "type": "string" }, "id": { "description": "Autogenerated object identifier.", "type": "string" }, "name": { "description": "The name of the button layout.", "type": "string" }, "nodes": { "description": "The nodes that make up the button layout.", "items": { "$ref": "#/components/schemas/ButtonLayoutNode" }, "type": "array" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "id", "name", "nodes", "version" ], "type": "object" }, "ButtonLayoutCollection": { "properties": { "data": { "items": { "$ref": "#/components/schemas/ButtonLayout" }, "type": "array" }, "pagination": { "$ref": "#/components/schemas/PaginationMetadata" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "type": "object" }, "ButtonLayoutNode": { "properties": { "attributes": { "description": "The attributes associated with this node.", "items": { "$ref": "#/components/schemas/ButtonLayoutNodeAttribute" }, "type": "array" }, "id": { "description": "Autogenerated object identifier.", "type": "string" }, "parentNodeId": { "description": "The ID of the parent node, if applicable.", "format": "uuid", "nullable": true, "type": "string" }, "position": { "description": "The position of the node within its parent.", "type": "integer" }, "productId": { "description": "The product ID associated with this node, if applicable.", "nullable": true, "type": "string" } }, "required": [ "id", "position", "attributes" ], "type": "object" }, "ButtonLayoutNodeAttribute": { "properties": { "key": { "description": "The attribute key.", "type": "string" }, "value": { "description": "The attribute value.", "type": "string" } }, "required": [ "key", "value" ], "type": "object" }, "Card": { "properties": { "brand": { "type": "string" }, "fingerprint": { "type": "string" }, "last_four": { "type": "string" }, "type": { "type": "string" } }, "type": "object" }, "CardDetails": { "properties": { "auth_code": { "type": "string" }, "auth_result": { "type": "string" }, "card": { "$ref": "#/components/schemas/Card" }, "entry_method": { "enum": [ "SWIPED", "KEYED", "CONTACTLESS", "EMV", "UNKNOWN", "CHIP", "FALLBACK", "CONTACTLESSMSD" ], "type": "string" } }, "type": "object" }, "Channel": { "description": "An object representing a single channel.", "properties": { "channel_type": { "description": "The type of channel this is.", "enum": [ "woocommerce" ], "type": "string" }, "created_at": { "description": "An RFC3339 representation of the time at which the channel was created.", "format": "date-time", "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "inventory_outlet_ids": { "description": "IDs of the outlets that count towards inventory.", "items": { "minLength": 1, "type": "string" }, "type": "array" }, "payment_type_id": { "description": "The payment type id that sale payments will be associated to.", "type": "string" }, "products_last_imported_at": { "description": "An RFC3339 representation of the time at which products were last imported.", "format": "date-time", "type": "string" }, "register_id": { "description": "The register id that sales will be associated to.", "type": "string" }, "sales_last_imported_at": { "description": "An RFC3339 representation of the time at which sales were last imported.", "format": "date-time", "type": "string" }, "store_url": { "description": "The store identifier.", "type": "string" } }, "required": [ "channel_type", "id", "inventory_outlet_ids", "payment_type_id", "products_last_imported_at", "register_id", "sales_last_imported_at", "store_url" ], "title": "Channel", "type": "object" }, "ChannelCollectionResponse": { "description": "A collection of channel records wrapped in a top-level data object.", "properties": { "data": { "items": { "$ref": "#/components/schemas/Channel" }, "type": "array" } }, "title": "Channels response", "type": "object" }, "Composite": { "properties": { "product_id": { "description": "The ID of the component product.", "format": "uuid", "type": "string" }, "quantity": { "description": "The quantity of the component product.", "type": "number" } }, "title": "Composite", "type": "object" }, "Condition": { "description": "A condition to determine whether a promotion should apply to a sale.", "properties": { "exclude": { "items": { "$ref": "#/components/schemas/Filter" }, "type": "array" }, "include": { "items": { "$ref": "#/components/schemas/Filter" }, "type": "array" }, "max_quantity": { "description": "Minimum quantity, if required by the condition type.", "type": "integer" }, "min_price": { "description": "Minimum price, if required by the condition type.", "format": "double", "type": "number" }, "min_quantity": { "description": "Minimum quantity, if required by the condition type.", "type": "integer" }, "quantity": { "description": "Quantity, if required by the condition type.", "minimum": 1, "type": "integer" }, "type": { "description": "Condition type.", "enum": [ "product_set", "sale_price" ], "type": "string" } }, "required": [ "type", "quantity" ], "title": "Condition", "type": "object" }, "Consignment": { "properties": { "consignment_date": { "description": "11-28T19:02:15+00:00 (timestamp) - Consignment creation date.", "nullable": true, "type": "string" }, "created_at": { "description": "Creation timestamp in UTC.", "nullable": true, "type": "string" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "due_at": { "description": "11-30T19:08:541+00:00 (timestamp) - Due date.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "name": { "description": "Tue 29 Nov 2016 (string) - Consignment name. For orders, the note field in the UI will be the name value.", "type": "string" }, "outlet_id": { "description": "A valid ID of an outlet where stock will be received.", "format": "uuid", "type": "string" }, "received_at": { "description": "11-30T19:08:541+00:00 (timestamp) - The date when consignment was received.", "nullable": true, "type": "string" }, "reference": { "description": "Order number.+ `total_count_gain` (number)", "nullable": true, "type": "string" }, "source_outlet_id": { "description": "A valid ID of an outlet where stock will come from. **Stock transfers only**.", "format": "uuid", "nullable": true, "type": "string" }, "status": { "description": "* Supplier Order: One of `OPEN`, `SENT`, `DISPATCHED`, `RECEIVED`, `CANCELLED`\n* Outlet Transfer: One of `OPEN`, `SENT`, `RECEIVED`, `CANCELLED`\n* Return Order: One of `OPEN`, `SENT`, `CANCELLED`\n* Stocktake: One of `STOCKTAKE_SCHEDULED`, `STOCKTAKE_IN_PROGRESS`, `STOCKTAKE_IN_PROGRESS_PROCESSED`, `STOCKTAKE_COMPLETE`, `CLOSED`, `CANCELLED`\nThis is not a definitive list and may be extended in future\n", "enum": [ "OPEN", "SENT", "DISPATCHED", "RECEIVED", "STOCKTAKE_IN_PROGRESS", "STOCKTAKE_SCHEDULED", "STOCKTAKE_IN_PROGRESS_PROCESSED", "STOCKTAKE_COMPLETE", "CLOSED", "CANCELLED" ], "type": "string" }, "supplier_id": { "description": "a valid supplier ID.", "format": "uuid", "nullable": true, "type": "string" }, "supplier_invoice": { "description": "Supplier invoice number.", "nullable": true, "type": "string" }, "total_cost_gain": { "description": "The cost of items over the expected level.", "format": "double", "nullable": true, "type": "number" }, "total_cost_loss": { "description": "The cost of items below the expected level.", "format": "double", "nullable": true, "type": "number" }, "total_count_gain": { "description": "The number of items over the expected level.", "format": "double", "nullable": true, "type": "number" }, "total_count_loss": { "description": "The number of items below the expected level.", "format": "double", "nullable": true, "type": "number" }, "type": { "description": "One of `SUPPLIER`, `OUTLET`, `STOCKTAKE`, `RETURN`.", "enum": [ "SUPPLIER", "OUTLET", "STOCKTAKE", "RETURN" ], "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "name", "outlet_id", "type" ], "title": "Consignment", "type": "object" }, "ConsignmentCollection": { "properties": { "data": { "description": "An array of Consignment objects.", "items": { "$ref": "#/components/schemas/Consignment" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "title": "Consignment Collection", "type": "object" }, "ConsignmentProduct": { "properties": { "cost": { "description": "The cost of the item.", "nullable": true, "type": "string" }, "count": { "description": "Expected item count.", "nullable": true, "type": "string" }, "created_at": { "description": "The creation timestamp in UTC.", "type": "string" }, "deleted_at": { "description": "The deletion timestamp in UTC.", "nullable": true, "type": "string" }, "is_included": { "description": "Indicated whether the item was included via a filter. Can be `null`. For full count (no filters) always `true`.", "type": "boolean" }, "product_id": { "description": "The ID of the product.", "format": "uuid", "type": "string" }, "product_sku": { "description": "The SKU of the product.", "nullable": true, "type": "string" }, "received": { "description": "Observed item count.", "type": "string" }, "status": { "description": "The status of the item. One of: `PENDING`, `SUCCESS`.", "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "product_id" ], "title": "Consignment Product", "type": "object" }, "ConsignmentProductCollection": { "properties": { "data": { "description": "An array of consignment products.", "items": { "$ref": "#/components/schemas/ConsignmentProduct" }, "type": "array" } }, "title": "Consignment Product Collection", "type": "object" }, "ConsignmentProductRequest": { "properties": { "data": { "$ref": "#/components/schemas/ConsignmentProduct" } }, "required": [ "data" ], "title": "Consignment Product Request", "type": "object" }, "ConsignmentProductResponse": { "properties": { "data": { "$ref": "#/components/schemas/ConsignmentProductCollection" } }, "required": [ "data" ], "title": "Consignment Product Response", "type": "object" }, "ConsignmentRequest": { "properties": { "data": { "$ref": "#/components/schemas/Consignment" } }, "required": [ "data" ], "title": "Consignment Request", "type": "object" }, "ConsignmentResponse": { "properties": { "data": { "$ref": "#/components/schemas/Consignment" } }, "title": "Consignment Response", "type": "object" }, "ConsignmentTotalsResponse": { "properties": { "data": { "items": { "properties": { "total_received_cost": { "type": "string" }, "total_received_count": { "type": "string" }, "total_sent_cost": { "type": "string" }, "total_sent_count": { "type": "string" } }, "type": "object" }, "type": "array" } }, "type": "object" }, "CreateCustomInventoryAdjustmentReasonRequest": { "description": "Parameters for creating a new custom inventory adjustment reason.", "properties": { "enabled": { "description": "Whether the reason can be selected when creating stock adjustments.", "type": "boolean" }, "name": { "description": "Display name of the reason. Must be unique within the retailer. Max 30 characters.", "maxLength": 30, "type": "string" }, "type": { "description": "Whether the reason applies to positive (stock-in) or negative (stock-out) adjustments.", "enum": [ "POSITIVE", "NEGATIVE" ], "type": "string" } }, "required": [ "name", "enabled", "type" ], "title": "Create Custom Inventory Adjustment Reason Request", "type": "object" }, "CreateStockAdjustmentItem": { "additionalProperties": false, "description": "A single stock adjustment to create as part of a batch.", "properties": { "custom_inventory_adjustment_reason_id": { "description": "Required when `reason` is `CUSTOM`; must be omitted otherwise.", "format": "uuid", "maxLength": 36, "minLength": 1, "type": "string" }, "outlet_id": { "description": "The ID of the outlet where the adjustment is recorded.", "format": "uuid", "maxLength": 36, "minLength": 1, "type": "string" }, "product_id": { "description": "The ID of the product to adjust.", "format": "uuid", "maxLength": 36, "minLength": 1, "type": "string" }, "quantity": { "description": "Quantity to adjust. Must be a numeric string (e.g. `\"1\"` or `\"-3\"`). Negative for DAMAGE/EXPIRY/etc., positive for STOCK_FOUND/SAMPLE_FOR_SALE.", "example": "1", "maxLength": 32, "type": "string" }, "reason": { "$ref": "#/components/schemas/StockAdjustmentReason" } }, "required": [ "product_id", "outlet_id", "quantity", "reason" ], "title": "Create Stock Adjustment Item", "type": "object" }, "CreateStockAdjustmentsRequest": { "additionalProperties": false, "description": "A batch of 1\u20131000 stock adjustments to create.", "properties": { "stock_adjustments": { "description": "The stock adjustments to create.", "items": { "$ref": "#/components/schemas/CreateStockAdjustmentItem" }, "maxItems": 1000, "minItems": 1, "type": "array" } }, "required": [ "stock_adjustments" ], "title": "Create Stock Adjustments Request", "type": "object" }, "CreateSupplierRequest": { "allOf": [ { "$ref": "#/components/schemas/BaseSupplier" } ], "required": [ "name" ], "title": "CreateSupplierRequest" }, "CreateTagRequest": { "properties": { "name": { "description": "The Tag name.", "type": "string" } }, "required": [ "name" ], "title": "CreateTagRequest", "type": "object" }, "CreateTaxRequest": { "properties": { "clothing_footwear_exemption": { "description": "Whether the tax is exempt for clothing and footwear. This is applicable for tax exclusive retailers only.", "type": "boolean" }, "clothing_footwear_threshold_value": { "description": "The threshold value for clothing and footwear exemption. This is applicable for tax exclusive retailers only.", "format": "double", "type": "number" }, "name": { "description": "The Tax name.", "type": "string" }, "rate": { "description": "The Tax rate percentage.", "example": 0.1, "format": "double", "type": "number" }, "tax_over_threshold": { "description": "Whether the tax applies over the threshold. This is applicable for tax exclusive retailers only.", "type": "boolean" } }, "required": [ "name", "rate" ], "title": "CreateTaxRequest", "type": "object" }, "CustomFieldDefinition": { "description": "The type, name, and configuration of a custom field.", "properties": { "created_at": { "description": "The creation timestamp in UTC.", "format": "date-time", "readOnly": true, "type": "string" }, "editable_in_ui": { "description": "Is this custom field be editable in the UI.", "type": "boolean" }, "entity": { "description": "The type of entity.", "enum": [ "sale", "line_item", "customer", "product" ], "type": "string" }, "id": { "example": "1239349157873029120", "readOnly": true, "type": "string" }, "name": { "example": "my_custom_field", "type": "string" }, "title": { "example": "My Custom Field", "type": "string" }, "type": { "description": "The type of the value to be stored using this custom field.", "enum": [ "string", "integer", "boolean", "date", "product_id", "qrcode", "string_array" ], "type": "string" }, "visible_in_ui": { "description": "Is this custom field visible in the UI.", "type": "boolean" } }, "title": "Custom Field Definition", "type": "object" }, "CustomFieldDefinitionCollection": { "description": "The fields returned by the custom fields definition list API.", "properties": { "data": { "description": "An array of Custom Field Definitions.", "items": { "$ref": "#/components/schemas/CustomFieldDefinition" }, "type": "array" } }, "required": [ "data" ], "title": "Custom Field Definition Collection", "type": "object" }, "CustomFieldDefinitionParams": { "description": "The parameters that can be passed to the create custom field definition API.", "properties": { "editable_in_ui": { "default": false, "description": "Should this custom field be editable in the UI.", "type": "boolean" }, "entity": { "description": "The type of entity.", "enum": [ "sale", "line_item", "customer", "product" ], "type": "string" }, "name": { "example": "my_custom_field", "type": "string" }, "print_on_receipt": { "default": false, "description": "Should this custom field be printed on receipts.", "type": "boolean" }, "title": { "example": "My Custom Field", "type": "string" }, "type": { "description": "The type of the value to be stored using this custom field.", "enum": [ "string", "integer", "boolean", "date", "product_id", "qrcode", "string_array" ], "type": "string" }, "visible_in_ui": { "default": false, "description": "Should this custom field be visible in the UI.", "type": "boolean" } }, "required": [ "entity", "name", "title", "type" ], "title": "Custom Field Definition Parameters", "type": "object" }, "CustomFieldValue": { "description": "The value of a custom field on an entity.", "properties": { "boolean_value": { "type": "boolean" }, "definition_id": { "description": "The ID of the custom field definition associated with this value.", "example": "1239349157873029120", "readOnly": true, "type": "string" }, "integer_value": { "format": "int64", "type": "integer" }, "name": { "example": "my_custom_field", "type": "string" }, "string_value": { "type": "string" }, "title": { "example": "My Custom Field", "type": "string" }, "type": { "description": "The type of the value to be stored using this custom field.", "enum": [ "string", "integer", "boolean", "date" ], "type": "string" } }, "title": "Custom Field Value", "type": "object" }, "CustomFieldValueCollection": { "description": "The fields returned by the custom field value list API.", "properties": { "data": { "description": "An array of Custom Field Values.", "items": { "$ref": "#/components/schemas/CustomFieldValue" }, "type": "array" } }, "required": [ "data" ], "title": "Custom Field Value Collection", "type": "object" }, "CustomFieldValuesParams": { "description": "The parameters that can be passed to the set custom field values API.", "properties": { "entity": { "description": "The entity type.", "enum": [ "sale", "line_item", "customer", "product" ], "type": "string" }, "entity_id": { "description": "The ID of entity.", "format": "uuid", "type": "string" }, "values": { "description": "The values.", "items": { "properties": { "boolean_value": { "type": "boolean" }, "integer_value": { "format": "int64", "type": "integer" }, "name": { "description": "The name of the custom field to set a value for. Must match an existing custom field name for the entity type.", "example": "my_custom_field", "type": "string" }, "string_value": { "example": "spec-test-value", "type": "string" } }, "required": [ "name", "string_value" ], "type": "object" }, "type": "array" } }, "required": [ "entity", "entity_id", "values" ], "title": "Custom Field Value Parameters", "type": "object" }, "CustomInventoryAdjustmentReason": { "description": "A custom inventory adjustment reason that retailers can use when creating stock adjustments.", "properties": { "created_at": { "description": "The creation timestamp in RFC 3339 format.", "format": "date-time", "type": "string" }, "enabled": { "description": "Whether the reason can be selected when creating stock adjustments.", "type": "boolean" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "is_from_external_source": { "description": "`true` when the reason was created via the API; `false` when created via the X-Series UI.", "type": "boolean" }, "name": { "description": "Display name of the reason. Unique within the retailer. Max 30 characters.", "maxLength": 30, "type": "string" }, "type": { "description": "Whether the reason can be used for positive (stock-in) or negative (stock-out) adjustments.", "enum": [ "POSITIVE", "NEGATIVE" ], "type": "string" }, "updated_at": { "description": "The last update timestamp in RFC 3339 format.", "format": "date-time", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "id", "name", "enabled", "type", "is_from_external_source", "version", "created_at", "updated_at" ], "title": "Custom Inventory Adjustment Reason", "type": "object" }, "CustomInventoryAdjustmentReasonCollection": { "description": "A paginated list of custom inventory adjustment reasons.", "properties": { "data": { "description": "An array of custom inventory adjustment reasons.", "items": { "$ref": "#/components/schemas/CustomInventoryAdjustmentReason" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "Custom Inventory Adjustment Reason Collection", "type": "object" }, "CustomInventoryAdjustmentReasonSingleton": { "description": "A single custom inventory adjustment reason response.", "properties": { "data": { "$ref": "#/components/schemas/CustomInventoryAdjustmentReason" } }, "required": [ "data" ], "title": "Custom Inventory Adjustment Reason Response", "type": "object" }, "Customer": { "properties": { "balance": { "description": "Customer's unpaid balance.", "format": "double", "type": "number" }, "company_name": { "description": "Company name.", "nullable": true, "type": "string" }, "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "custom_field_1": { "description": "Custom field 1. Can be used to store random data.", "nullable": true, "type": "string" }, "custom_field_2": { "description": "Custom field 2.", "nullable": true, "type": "string" }, "custom_field_3": { "description": "Custom field 3.", "nullable": true, "type": "string" }, "custom_field_4": { "description": "Custom field 4.", "nullable": true, "type": "string" }, "customer_code": { "description": "Customer code used for claiming loyalty.", "type": "string" }, "customer_group_id": { "description": "Customer group ID.", "type": "string" }, "date_of_birth": { "description": "Birthday.", "nullable": true, "type": "string" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "do_not_email": { "default": false, "description": "Indicates whether the customer opted out of email communications.", "type": "boolean" }, "email": { "description": "Customer's email address.", "nullable": true, "type": "string" }, "enable_loyalty": { "type": "boolean" }, "enable_promotional_sms": { "default": false, "description": "Indicates whether the customer opted in to SMS communications.", "type": "boolean" }, "fax": { "description": "Fax no.", "nullable": true, "type": "string" }, "first_name": { "description": "Customer's first name.", "nullable": true, "type": "string" }, "gender": { "description": "Customer's gender. Can be `M`, `F` or null.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "last_name": { "description": "Customer 's last name.", "nullable": true, "type": "string" }, "loyalty_balance": { "description": "Customer's loyalty balance.", "format": "double", "type": "number" }, "mobile": { "description": "Mobile phone no.", "nullable": true, "type": "string" }, "name": { "deprecated": true, "description": "Customers full name. **deprecated**", "nullable": true, "type": "string" }, "note": { "description": "Customer note.", "nullable": true, "type": "string" }, "on_account_limit": { "description": "Customer's OnAccount Limit.", "format": "double", "nullable": true, "type": "number" }, "phone": { "description": "Phone no.", "nullable": true, "type": "string" }, "physical_address_1": { "description": "Physical address, line 1.", "nullable": true, "type": "string" }, "physical_address_2": { "description": "Physical address, line 2.", "nullable": true, "type": "string" }, "physical_city": { "description": "Physical address, city.", "nullable": true, "type": "string" }, "physical_country_id": { "description": "Physical address, country code.", "nullable": true, "type": "string" }, "physical_postcode": { "description": "Physical address, post code.", "nullable": true, "type": "string" }, "physical_state": { "description": "Physical address, state.", "nullable": true, "type": "string" }, "physical_suburb": { "description": "Physical address, suburb.", "nullable": true, "type": "string" }, "postal_address_1": { "description": "Postal address, line 1.", "nullable": true, "type": "string" }, "postal_address_2": { "description": "Postal address, line 2.", "nullable": true, "type": "string" }, "postal_city": { "description": "Postal address, city.", "nullable": true, "type": "string" }, "postal_country_id": { "description": "Postal address, country code.", "nullable": true, "type": "string" }, "postal_postcode": { "description": "Postal address, post code.", "nullable": true, "type": "string" }, "postal_state": { "description": "Postal address, state.", "nullable": true, "type": "string" }, "postal_suburb": { "description": "Postal address, suburb.", "nullable": true, "type": "string" }, "tax_id": { "description": "Customer's tax ID.", "nullable": true, "type": "string" }, "twitter": { "description": "Twitter handle.", "nullable": true, "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" }, "website": { "description": "Website URL.", "nullable": true, "type": "string" }, "year_to_date": { "description": "Customer's spending this year.", "format": "double", "type": "number" } }, "required": [ "first_name", "last_name" ], "title": "Customer", "type": "object" }, "CustomerAddress": { "properties": { "address_line_1": { "description": "Primary address line (street address, P.O. box, etc.).", "maxLength": 50, "type": "string" }, "address_line_2": { "description": "Secondary address line (apartment, suite, unit, building, floor, etc.).", "maxLength": 50, "nullable": true, "type": "string" }, "city": { "description": "City or town name.", "maxLength": 28, "type": "string" }, "country_code": { "description": "ISO 3166-1 alpha-2 country code (e.g., US, NZ, AU).", "type": "string" }, "country_name": { "description": "Full country name derived from the country code.", "type": "string" }, "created_at": { "description": "Creation timestamp in UTC.", "format": "date-time", "type": "string" }, "customer_id": { "description": "The unique identifier of the customer this address belongs to.", "format": "uuid", "type": "string" }, "id": { "description": "Auto-generated address ID.", "format": "int64", "type": "integer" }, "postcode": { "description": "Postal code or ZIP code.", "type": "string" }, "state": { "description": "State, province, or region name.", "maxLength": 35, "nullable": true, "type": "string" }, "state_code": { "description": "State or province code. Required for US and CA.", "nullable": true, "type": "string" }, "suburb": { "description": "Suburb or district.", "nullable": true, "type": "string" }, "type": { "description": "The type of address.", "enum": [ "BILLING", "SHIPPING" ], "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "format": "date-time", "type": "string" } }, "required": [ "id", "customer_id", "address_line_1", "city", "postcode", "country_code", "type", "created_at", "updated_at" ], "title": "Customer Address", "type": "object" }, "CustomerAddressBase": { "properties": { "address_line_1": { "description": "Primary address line (street address, P.O. box, etc.).", "maxLength": 50, "type": "string" }, "address_line_2": { "description": "Secondary address line (apartment, suite, unit, building, floor, etc.).", "maxLength": 50, "nullable": true, "type": "string" }, "city": { "description": "City or town name.", "maxLength": 28, "type": "string" }, "country_code": { "description": "ISO 3166-1 alpha-2 country code (e.g., US, NZ, AU).", "type": "string" }, "postcode": { "description": "Postal code or ZIP code.", "type": "string" }, "state": { "description": "State, province, or region name.", "maxLength": 35, "nullable": true, "type": "string" }, "state_code": { "description": "State or province code. Required for US and CA.", "nullable": true, "type": "string" }, "suburb": { "description": "Suburb or district.", "nullable": true, "type": "string" }, "type": { "description": "The type of address.", "enum": [ "BILLING", "SHIPPING" ], "type": "string" } }, "required": [ "address_line_1", "city", "postcode", "country_code", "type" ], "title": "Customer Address Base", "type": "object" }, "CustomerAddressCollection": { "properties": { "data": { "description": "An array of customer address objects.", "items": { "$ref": "#/components/schemas/CustomerAddress" }, "type": "array" } }, "title": "Customer Address Collection", "type": "object" }, "CustomerAddressCreateResponse": { "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CustomerAddress" }, { "properties": { "id_token": { "description": "Token to be used when associating this address with a sale.", "type": "string" } }, "type": "object" } ] } }, "title": "Customer Address Create Response", "type": "object" }, "CustomerAddressResponse": { "properties": { "data": { "$ref": "#/components/schemas/CustomerAddress" } }, "title": "Customer Address Response", "type": "object" }, "CustomerBase": { "properties": { "company_name": { "description": "Company name.", "nullable": true, "type": "string" }, "custom_field_1": { "description": "Custom field 1. Can be used to store random data.", "nullable": true, "type": "string" }, "custom_field_2": { "description": "Custom field 2.", "nullable": true, "type": "string" }, "custom_field_3": { "description": "Custom field 3.", "nullable": true, "type": "string" }, "custom_field_4": { "description": "Custom field 4.", "nullable": true, "type": "string" }, "customer_code": { "description": "Customer code used for claiming loyalty.", "type": "string" }, "customer_group_id": { "description": "Customer group ID.", "type": "string" }, "date_of_birth": { "description": "Birthday.", "type": "string" }, "do_not_email": { "default": false, "description": "Indicates whether the customer opted out of email communications.", "type": "boolean" }, "email": { "description": "Customer's email address.", "nullable": true, "type": "string" }, "enable_loyalty": { "type": "boolean" }, "enable_promotional_sms": { "default": false, "description": "Indicates whether the customer opted in to SMS communications.", "type": "boolean" }, "fax": { "description": "Fax no.", "nullable": true, "type": "string" }, "first_name": { "description": "Customer's first name.", "nullable": true, "type": "string" }, "gender": { "description": "Customer's gender. Can be `M`, `F` or null.", "nullable": true, "type": "string" }, "last_name": { "description": "Customer 's last name.", "nullable": true, "type": "string" }, "mobile": { "description": "Mobile phone no.", "nullable": true, "type": "string" }, "note": { "description": "Customer note.", "nullable": true, "type": "string" }, "on_account_limit": { "description": "Customer's OnAccount Limit.", "format": "double", "nullable": true, "type": "number" }, "phone": { "description": "Phone no.", "nullable": true, "type": "string" }, "physical_address_1": { "description": "Physical address, line 1.", "nullable": true, "type": "string" }, "physical_address_2": { "description": "Physical address, line 2.", "nullable": true, "type": "string" }, "physical_city": { "description": "Physical address, city.", "nullable": true, "type": "string" }, "physical_country_id": { "description": "Physical address, country code.", "nullable": true, "type": "string" }, "physical_postcode": { "description": "Physical address, post code.", "nullable": true, "type": "string" }, "physical_state": { "description": "Physical address, state.", "nullable": true, "type": "string" }, "physical_suburb": { "description": "Physical address, suburb.", "nullable": true, "type": "string" }, "postal_address_1": { "description": "Postal address, line 1.", "nullable": true, "type": "string" }, "postal_address_2": { "description": "Postal address, line 2.", "nullable": true, "type": "string" }, "postal_city": { "description": "Postal address, city.", "nullable": true, "type": "string" }, "postal_country_id": { "description": "Postal address, country code.", "nullable": true, "type": "string" }, "postal_postcode": { "description": "Postal address, post code.", "nullable": true, "type": "string" }, "postal_state": { "description": "Postal address, state.", "nullable": true, "type": "string" }, "postal_suburb": { "description": "Postal address, suburb.", "nullable": true, "type": "string" }, "tax_id": { "description": "Customer's tax ID.", "nullable": true, "type": "string" }, "twitter": { "description": "Twitter handle.", "nullable": true, "type": "string" }, "website": { "description": "Website URL.", "nullable": true, "type": "string" } }, "required": [ "first_name", "last_name" ], "title": "Customer Base", "type": "object" }, "CustomerCollection": { "properties": { "data": { "description": "An array of Customer objects.", "items": { "$ref": "#/components/schemas/Customer" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "title": "Customer Collection", "type": "object" }, "CustomerGroup": { "properties": { "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "group_id": { "description": "The customer group identifier.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "name": { "description": "The customer group name.", "type": "string" }, "retailer_id": { "description": "The retailer identifier", "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "name" ], "title": "Customer Group", "type": "object", "x-examples": { "All customers": { "created_at": "2023-04-16T12:44:54+00:00", "deleted_at": null, "group_id": "1111111111", "id": "28020918-a068-aae4-11e9-cad0d053ea28", "name": "All Customers", "retailer_id": "00000000-0001-0001-0001-000000000001", "updated_at": "2023-04-16T12:44:54+00:00", "version": 150547 } } }, "CustomerGroupCollection": { "properties": { "data": { "description": "An array of customer group objects wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/CustomerGroup" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "title": "Customer Group Collection", "type": "object" }, "CustomerGroupResponse": { "properties": { "data": { "$ref": "#/components/schemas/CustomerGroup" } }, "title": "Customer Group Response", "type": "object" }, "CustomerResponse": { "properties": { "data": { "$ref": "#/components/schemas/Customer" } }, "title": "Customer Response", "type": "object" }, "CustomizationFile": { "properties": { "filename": { "description": "The name of the file.", "type": "string" }, "id": { "description": "The ID of the file.", "type": "string" }, "provider": { "description": "Storage provider of the file.", "type": "string" }, "size": { "description": "Size of the file in bytes.", "type": "integer" } }, "title": "Customization File", "type": "object" }, "DailyAgenda": { "properties": { "date": { "type": "string" }, "minutes_scheduled": { "type": "integer" } }, "title": "DailyAgenda", "type": "object" }, "DetailedService": { "properties": { "notes": { "description": "An array of service notes, or null if no notes exist.", "items": { "$ref": "#/components/schemas/ServiceNote" }, "nullable": true, "type": "array" }, "service": { "$ref": "#/components/schemas/ServiceOrder" }, "serviceItems": { "$ref": "#/components/schemas/ServiceItems" } }, "title": "DetailedService", "type": "object", "x-stoplight": { "id": "2fu3rgyr0q1gp" } }, "DiscountCustomerParam": { "properties": { "customer_group_id": { "description": "Customer group ID", "type": "string" } }, "title": "Customer applicable to a discount", "type": "object" }, "DiscountLineItem": { "properties": { "confirmed": { "description": "Whether the line item is confirmed as part of a layby or on account sale.", "type": "boolean" }, "explicit_loyalty_value": { "description": "Whether loyalty was explicitly set in the product or it just uses the default outlet ratio.", "type": "boolean" }, "handle": { "description": "Handle.", "type": "string" }, "id": { "description": "Line item ID.", "type": "string" }, "loyalty_value": { "description": "The line item's loyalty value", "format": "double", "type": "number" }, "price_adjusted": { "description": "Indicator to suggest that the price has been adjusted manually, such as through a discount.", "type": "boolean" }, "product_brand_id": { "description": "Product Brand ID.", "type": "string" }, "product_id": { "description": "Product ID", "type": "string" }, "product_supplier_id": { "description": "Product Supplier ID.", "type": "string" }, "product_tag_ids": { "description": "Product Tag IDs.", "items": { "type": "string" }, "type": "array" }, "product_type_id": { "description": "Product Type ID.", "type": "string" }, "promotion_ids": { "description": "List of promotion IDs applied to this line item.", "items": { "type": "string" }, "type": "array" }, "quantity": { "description": "Quantity of the line item.", "type": "integer" }, "unit_discount": { "description": "The line item's unit discount", "format": "double", "type": "number" }, "unit_price": { "description": "The unit price for the line item.", "format": "double", "type": "number" }, "unit_tax_discount": { "description": "The line item's unit tax discount", "format": "double", "type": "number" }, "variant_parent_id": { "description": "Product variant parent ID", "type": "string" } }, "required": [ "handle", "product_brand_id", "product_id", "product_supplier_id", "product_tag_ids", "product_type_id", "quantity", "unit_price", "unit_tax_discount" ], "title": "Line Item, for use while applying a discount", "type": "object" }, "DiscountParam": { "properties": { "channel": { "description": "The channel where the sale is coming from", "type": "string" }, "customer": { "$ref": "#/components/schemas/DiscountCustomerParam" }, "is_tax_inclusive": { "description": "Indication whether the sale is tax inclusive or tax exclusive", "type": "boolean" }, "outlet_id": { "description": "The outlet ID for this sale", "type": "string" }, "promo_code": { "description": "The promo code to apply to this sale", "type": "string" }, "sale": { "$ref": "#/components/schemas/DiscountSaleParam" } }, "required": [ "channel", "customer", "outlet_id", "sale" ], "title": "DiscountParam consists of a Sale, and related information to check if a promotion applies, and to calculate the discount", "type": "object" }, "DiscountResponse": { "properties": { "data": { "$ref": "#/components/schemas/DiscountResponseParam" } }, "title": "DiscountParam consists of a Sale, and related information to check if a promotion applies, and to calculate the discount", "type": "object" }, "DiscountResponseParam": { "properties": { "promo_code_validation": { "$ref": "#/components/schemas/PromoCodeValidation" }, "promotions": { "items": { "$ref": "#/components/schemas/PromotionDescription" }, "type": "array" }, "sale": { "$ref": "#/components/schemas/DiscountSaleParam" } }, "title": "DiscountParam consists of a Sale, and related information to check if a promotion applies, and to calculate the discount", "type": "object" }, "DiscountSaleParam": { "properties": { "line_items": { "description": "Collection of line items.", "items": { "$ref": "#/components/schemas/DiscountLineItem" }, "type": "array" }, "sale_date": { "description": "Sale timestamp in UTC, e.g. `2006-01-02T15:04:05` (no timezone suffix).", "type": "string" }, "total_price": { "description": "Total (tax exclusive) price of the sale", "format": "double", "type": "number" }, "total_tax": { "description": "Total tax.", "format": "double", "type": "number" } }, "required": [ "line_items", "sale_date", "total_price", "total_tax" ], "title": "Sale object for use in a Discount request", "type": "object" }, "EMV": { "properties": { "aid": { "type": "string" }, "application_label": { "type": "string" }, "application_preferred_name": { "type": "string" }, "cryptogram": { "type": "string" }, "cryptogram_type": { "type": "string" }, "pin_statement": { "type": "string" }, "tags": { "items": { "properties": { "key": { "type": "string" }, "value": { "type": "string" } }, "type": "object" }, "type": "array" } }, "type": "object" }, "EcomCustomCharge": { "properties": { "name": { "description": "Display name of eCom custom charge", "type": "string" }, "source_id": { "description": "Unique identifier of eCom custom charge type", "type": "string" }, "tax_components": { "description": "Collection of tax components associated with specific eCom custom charge", "items": { "$ref": "#/components/schemas/EcomCustomChargeTaxComponent" }, "type": "array" }, "total": { "description": "Tax exclusive amount for specific eCom custom charge", "format": "double", "type": "number" }, "total_incl": { "description": "Tax inclusive amount for specific eCom custom charge", "format": "double", "type": "number" }, "total_tax": { "description": "Total tax for specific eCom custom charge", "format": "double", "type": "number" } }, "title": "Ecom Custom Charges", "type": "object" }, "EcomCustomChargeTaxComponent": { "properties": { "rate_id": { "description": "Tax rate ID.", "type": "string" }, "total_tax": { "description": "Tax total.", "format": "double", "type": "number" } }, "title": "Ecom Custom Charge Tax Component", "type": "object" }, "FeatureResolution": { "properties": { "context": { "additionalProperties": { "type": "string" }, "type": "object" }, "editable_features": { "items": { "type": "string" }, "type": "array" }, "features": { "additionalProperties": { "type": "boolean" }, "example": { "another_feature": false, "cool_feature": true }, "type": "object" } }, "required": [ "features" ], "type": "object" }, "Filter": { "properties": { "field": { "description": "name of the filter field", "enum": [ "brand_id", "product_id", "supplier_id", "tag_id", "type_id", "variant_parent_id" ], "type": "string" }, "value": { "description": "value of the filter field", "type": "string" } }, "required": [ "field", "value" ], "title": "Condition Filter", "type": "object" }, "FulfillLineItemSourceBreakdown": { "description": "Specifies how a fulfillment quantity should be sourced. When provided, all three fields are required and must sum to the parent quantity.", "properties": { "quantity_from_not_started": { "description": "Quantity to source from the not-started state.", "format": "double", "type": "number" }, "quantity_from_packed": { "description": "Quantity to source from the packed state.", "format": "double", "type": "number" }, "quantity_from_picked": { "description": "Quantity to source from the picked state.", "format": "double", "type": "number" } }, "required": [ "quantity_from_picked", "quantity_from_packed", "quantity_from_not_started" ], "type": "object" }, "FulfillLineItemsRequest": { "properties": { "line_items": { "description": "The line items to be fulfilled", "items": { "$ref": "#/components/schemas/FulfillmentLineItemRequest" }, "type": "array" }, "version": { "description": "The current version number of the fulfillment.", "example": 5, "format": "int32", "type": "integer" } }, "required": [ "version", "line_items" ], "type": "object" }, "FulfillLineItemsResponse": { "properties": { "data": { "properties": { "id": { "description": "The unique identifier of the fulfillment.", "example": "7428951063847291856", "type": "string" }, "version": { "description": "The new version number of the fulfillment after the update.", "example": 3, "format": "int32", "type": "integer" } }, "type": "object" } }, "type": "object" }, "FulfillSaleRequest": { "properties": { "sale_id": { "description": "The unique identifier of the sale to be fulfilled.", "example": "075bbd4b-302a-a27c-11f0-6d3a98056287", "format": "uuid", "type": "string" } }, "required": [ "sale_id" ], "type": "object" }, "FulfillSaleResponse": { "properties": { "data": { "description": "A list of the updated fulfillments.", "items": { "$ref": "#/components/schemas/FulfillmentResponse" }, "type": "array" } }, "type": "object" }, "Fulfillment": { "properties": { "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "line_items": { "description": "The line items that were fulfilled.", "items": { "$ref": "#/components/schemas/FulfillmentLineItem" }, "type": "array" }, "outlet_id": { "description": "The ID of the outlet that the sale was fulfilled from.", "format": "uuid", "type": "string" }, "sale_id": { "description": "The ID of the sale that was fulfilled.", "format": "uuid", "type": "string" }, "shipping_address_id": { "description": "ID of the shipping address associated with this fulfillment. Only present for SHIPPED fulfillments with a shipping address.", "nullable": true, "type": "string" }, "status": { "description": "Status of the fulfillment.", "enum": [ "SHIPPED", "PICKED_UP" ], "type": "string" }, "user_id": { "description": "The ID of the user who fulfilled the sale.", "format": "uuid", "type": "string" } }, "title": "Fulfillment", "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.", "nullable": true, "type": "string" }, "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.", "nullable": true, "type": "string" }, "type": { "description": "The fulfillment type to which this fulfillment detail applies.", "enum": [ "DISPATCH", "PICKUP" ], "type": "string" } }, "type": "object" }, "FulfillmentHistoryEntry": { "description": "A single state-change event in the fulfillment history ledger", "properties": { "created_at": { "description": "Timestamp when the event was recorded", "example": "2025-01-15T10:30:00Z", "format": "date-time", "type": "string" }, "event_type": { "description": "The type of state-change event", "enum": [ "CREATED", "QUANTITY_UPDATED", "REMOVED", "PICKED", "PACKED", "FULFILLED", "VOIDED", "UNVOIDED", "RETURNED", "RETURN_VOIDED", "SPLIT" ], "type": "string" }, "fulfilled_delta": { "description": "Change in fulfilled quantity for this line item", "example": "0", "type": "string" }, "packed_quantity_delta": { "description": "Change in packed quantity for this line item", "example": "0", "type": "string" }, "picked_quantity_delta": { "description": "Change in picked quantity for this line item", "example": "0", "type": "string" }, "product_id": { "description": "The ID of the product associated with the line item", "example": "e058ea02-c565-405f-be27-cefaeeca1f92", "format": "uuid", "type": "string" }, "quantity_delta": { "description": "Change in total quantity for this line item", "example": "5", "type": "string" }, "sale_line_item_id": { "description": "The ID of the sale line item this event relates to", "example": "81b37e5f-aa50-4fe3-95d3-a3cec73a7e2c", "format": "uuid", "type": "string" }, "source_sale_id": { "description": "The ID of the source sale (present for RETURNED and SPLIT events)", "example": "81d2fc44-e4d4-4180-8f1e-b36de2acf438", "format": "uuid", "type": "string" } }, "required": [ "sale_line_item_id", "product_id", "event_type", "quantity_delta", "picked_quantity_delta", "packed_quantity_delta", "fulfilled_delta", "created_at" ], "type": "object" }, "FulfillmentHistoryResponse": { "description": "Paginated response containing fulfillment history entries", "properties": { "data": { "description": "List of history entries ordered oldest-first", "items": { "$ref": "#/components/schemas/FulfillmentHistoryEntry" }, "type": "array" }, "next_cursor": { "description": "Opaque cursor for fetching the next page. Empty when no more pages exist.", "type": "string" } }, "required": [ "data" ], "type": "object" }, "FulfillmentLineItem": { "properties": { "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "product_id": { "description": "The ID of a product that was fulfilled.", "format": "uuid", "type": "string" }, "quantity": { "description": "Quantity of product units included in the fulfillment.", "type": "string" } }, "title": "Fulfillment Line Item", "type": "object" }, "FulfillmentLineItemRequest": { "properties": { "quantity": { "description": "The quantity to be fulfilled", "example": 1, "format": "double", "type": "number" }, "sale_line_item_id": { "description": "The unique identifier of the sale line item to be fulfilled.", "example": "f3a8d2c1-9b7e-4f56-8a12-3e4d5c6b7a89", "format": "uuid", "type": "string" }, "source_breakdown": { "$ref": "#/components/schemas/FulfillLineItemSourceBreakdown" } }, "required": [ "sale_line_item_id", "quantity" ], "type": "object" }, "FulfillmentResponse": { "properties": { "id": { "description": "The unique identifier of the fulfillment.", "example": "1950523126384443392", "type": "string" }, "version": { "description": "The new version number of the fulfillment after the update.", "example": 2, "format": "int32", "type": "integer" } }, "type": "object" }, "FulfillmentSummaryItem": { "properties": { "created_at": { "description": "Timestamp when the item was created", "example": "2024-01-15T10:30:00Z", "format": "date-time", "type": "string" }, "id": { "description": "Unique identifier for the fulfillment summary item", "example": "1947700198720344064", "type": "string" }, "line_items": { "items": { "$ref": "#/components/schemas/FulfillmentSummaryLineItem" }, "type": "array" }, "note": { "description": "Combined notes with newline separators", "example": "Customer requested specific pickup time\nHandle with care", "type": "string" }, "outlet_id": { "description": "Identifier of the outlet", "example": "e058ea02-c565-405f-be27-cefaeeca1f92", "type": "string" }, "sale_id": { "description": "Identifier of the sale", "example": "81b37e5f-aa50-4fe3-95d3-a3cec73a7e2c", "type": "string" }, "shipping_address_id": { "description": "ID of the shipping address associated with this fulfillment. Only present for DISPATCH type fulfillments.", "example": "12345678901234567", "nullable": true, "type": "string" }, "state": { "description": "Current state of the fulfillment", "enum": [ "OPEN", "STARTED", "PICKED", "PACKED", "FULFILLED" ], "example": "OPEN", "type": "string" }, "type": { "description": "Type of fulfillment", "enum": [ "PICKUP", "DISPATCH", "SERVICE" ], "example": "PICKUP", "type": "string" }, "updated_at": { "description": "Timestamp when the item was last updated", "example": "2024-01-15T14:20:00Z", "format": "date-time", "type": "string" }, "user_ids": { "description": "List of user IDs associated with this fulfillment", "example": [ "cca2eff2-9d4a-403b-a045-af953b6572b0" ], "items": { "type": "string" }, "type": "array" }, "version": { "description": "Version number for optimistic locking", "example": 1, "format": "int32", "type": "integer" } }, "required": [ "id", "outlet_id", "sale_id", "type", "state", "user_ids", "note", "created_at", "updated_at", "version", "line_items" ], "type": "object" }, "FulfillmentSummaryLineItem": { "properties": { "fulfilled_quantity": { "description": "Quantity that has been fulfilled (decimal as string)", "example": "0.00", "pattern": "^-?\\d+(\\.\\d+)?$", "type": "string" }, "packed_quantity": { "description": "Quantity that has been packed (decimal as string)", "example": "0.00", "pattern": "^-?\\d+(\\.\\d+)?$", "type": "string" }, "picked_quantity": { "description": "Quantity that has been picked (decimal as string)", "example": "0.00", "pattern": "^-?\\d+(\\.\\d+)?$", "type": "string" }, "product_id": { "description": "Identifier of the product", "example": "e9d7d1b3-0561-45f5-9e40-c7bfa81db394", "type": "string" }, "quantity": { "description": "Total quantity (decimal as string)", "example": "5.00", "pattern": "^-?\\d+(\\.\\d+)?$", "type": "string" }, "sale_line_item_id": { "description": "Identifier of the sale line item", "example": "460e1119-2f41-42a3-bd61-3f9639e2e265", "type": "string" } }, "required": [ "sale_line_item_id", "product_id", "quantity", "picked_quantity", "packed_quantity", "fulfilled_quantity" ], "type": "object" }, "FulfillmentSummaryResponse": { "properties": { "data": { "items": { "$ref": "#/components/schemas/FulfillmentSummaryItem" }, "type": "array" } }, "required": [ "data" ], "type": "object" }, "FulfillmentsResponse": { "properties": { "data": { "items": { "$ref": "#/components/schemas/Fulfillment" }, "type": "array" } }, "title": "Fulfillments Response", "type": "object" }, "GenerateTokenResponse": { "properties": { "location": { "description": "The Stripe Terminal location ID associated with the outlet.", "type": "string" }, "on_behalf_of": { "description": "The Stripe connected account ID the token is issued on behalf of.", "type": "string" }, "token": { "description": "The Stripe Terminal connection token.", "type": "string" } }, "required": [ "location", "token" ], "type": "object" }, "GetUsersByIdsRequest": { "description": "An array of user IDs to retrieve.", "items": { "format": "uuid", "type": "string" }, "title": "GetUsersByIdsRequest", "type": "array" }, "GiftCard": { "description": "A gift card with monetary values represented as strings for precision.", "properties": { "balance": { "description": "The balance of the gift card, represented as a string for precision.", "type": "string" }, "created_at": { "description": "The creation timestamp in UTC.", "type": "string" }, "expires_at": { "description": "The expiry timestamp in UTC.", "nullable": true, "type": "string" }, "gift_card_transactions": { "description": "An array of Gift Card Transactions.", "items": { "$ref": "#/components/schemas/GiftCardTransaction" }, "type": "array" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "number": { "description": "The gift card number.", "type": "string" }, "sale_id": { "description": "The ID of the sale associated with the gift card creation, if it was created through a register sale. Null if the gift card was created directly via the API.", "nullable": true, "type": "string" }, "sale_source": { "description": "The source system where the gift card was created (e.g. x-series, e-series).", "type": "string" }, "status": { "description": "The gift card status.", "enum": [ "ACTIVE", "INACTIVE", "REDEEMED", "VOIDED", "EXPIRED" ], "type": "string" }, "total_redeemed": { "description": "The amount redeemed with this gift card, represented as a string for precision.", "type": "string" }, "total_sold": { "description": "The amount loaded onto this gift card during activation or reloading, represented as a string for precision.", "type": "string" } }, "title": "Gift Card", "type": "object" }, "GiftCardActivationParams": { "description": "The parameters for creating and activating a new gift card.", "properties": { "amount": { "description": "The initial balance to be loaded onto the gift card. Represented as a string for precision (e.g. \"100.00\").", "example": "10.00", "type": "string" }, "expires_at": { "description": "The expiry date of the gift card in YYYY-MM-DD format. If omitted, the expiry will be calculated based on the validity period configured in the Lightspeed Retail UI, or will be null if expiry is not enabled.", "type": "string" }, "number": { "description": "The unique number to assign to the gift card.", "type": "string" }, "time_zone": { "description": "The timezone to use when interpreting the `expires_at` date (e.g. \"Pacific/Auckland\"). See the list of tz database time zones for valid values.", "type": "string" }, "user_id": { "description": "The ID of the user creating the gift card. If omitted, the authenticated user will be used.", "type": "string" } }, "required": [ "amount", "number" ], "title": "Gift Card Activation Parameters", "type": "object" }, "GiftCardCollection": { "description": "A paginated list of gift cards.", "properties": { "data": { "description": "An array of Gift Cards.", "items": { "$ref": "#/components/schemas/GiftCard" }, "type": "array" } }, "required": [ "data" ], "title": "Gift Card Collection", "type": "object" }, "GiftCardSingleton": { "description": "A single gift card response.", "properties": { "data": { "$ref": "#/components/schemas/GiftCard" } }, "required": [ "data" ], "title": "Gift Card Response", "type": "object" }, "GiftCardTransaction": { "description": "A gift card transaction with the amount represented as a string for precision.", "properties": { "amount": { "description": "The transaction amount, represented as a string for precision.", "type": "string" }, "client_id": { "description": "The client id is a unique transaction identifier. The client must provide this and is normally the transaction id from the client system.", "nullable": true, "type": "string" }, "created_at": { "description": "The creation timestamp in UTC.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "source": { "description": "The source of the transaction.", "nullable": true, "type": "string" }, "source_id": { "description": "The source id is a unique identifier for the transaction in the source system.", "nullable": true, "type": "string" }, "type": { "description": "The type of transaction.", "enum": [ "ACTIVATION", "REDEEMING", "IMPORTING", "VOIDING", "EXPIRING", "REVERSING", "RELOADING" ], "type": "string" }, "user_id": { "description": "The user id associated with the transaction.", "type": "string" } }, "title": "Gift Card Transaction", "type": "object" }, "GiftCardTransactionParams": { "description": "The parameters for creating a new gift card transaction.", "properties": { "amount": { "description": "The transaction amount. Must be negative for REDEEMING transactions and positive for RELOADING transactions.", "type": "string" }, "client_id": { "description": "A unique transaction identifier for idempotency. The client must provide this and is normally the transaction id from the client system.", "type": "string" }, "expires_at": { "description": "Optional new expiry date for the gift card in YYYY-MM-DD format. Can be used to extend the gift card's expiry when reloading.", "type": "string" }, "time_zone": { "description": "The timezone to use when interpreting the `expires_at` date (e.g. \"Pacific/Auckland\"). See the list of tz database time zones for valid values.", "type": "string" }, "type": { "description": "The type of the transaction.", "enum": [ "REDEEMING", "RELOADING" ], "type": "string" }, "user_id": { "description": "The ID of the user creating the transaction. If omitted, the authenticated user will be used.", "type": "string" } }, "required": [ "amount", "client_id", "type" ], "title": "Gift Card Transaction Parameters", "type": "object" }, "GiftCardTransactionSingleton": { "description": "A single gift card transaction response.", "properties": { "data": { "$ref": "#/components/schemas/GiftCardTransaction" } }, "required": [ "data" ], "title": "Gift Card Transaction Response", "type": "object" }, "GlobalPaymentType": { "description": "The global (platform-level) payment type definition associated with a retailer payment type.", "properties": { "badge": { "description": "URL of the payment type badge image.", "nullable": true, "type": "string" }, "category": { "description": "The category of the payment type.", "type": "string" }, "configuration_url": { "description": "URL for configuring this payment type.", "nullable": true, "type": "string" }, "description": { "description": "A description of the payment type.", "nullable": true, "type": "string" }, "header": { "description": "The display header for the payment type.", "nullable": true, "type": "string" }, "id": { "description": "The global payment type ID.", "format": "int64", "type": "integer" }, "internal": { "description": "Indicates if this is an internal payment type.", "type": "boolean" }, "logo": { "description": "URL of the payment type logo.", "nullable": true, "type": "string" }, "name": { "description": "The name of the global payment type.", "type": "string" }, "online_only": { "description": "Indicates if this payment type is available online only.", "type": "boolean" }, "platforms": { "description": "The platforms on which this payment type is supported.", "items": { "type": "string" }, "nullable": true, "type": "array" }, "referred_inactive": { "description": "Indicates if the payment type was referred but is inactive.", "type": "boolean" }, "show_banner": { "description": "Indicates if a banner should be shown for this payment type.", "type": "boolean" }, "subcategory": { "description": "The subcategory of the payment type.", "type": "string" }, "subtext": { "description": "Additional display text shown below the payment type name.", "nullable": true, "type": "string" } }, "required": [ "id", "name", "internal", "platforms", "category", "subcategory", "referred_inactive", "show_banner", "online_only" ], "type": "object" }, "Image": { "properties": { "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "position": { "description": "Position of the image in collection of images associated with a product.", "format": "double", "type": "number" }, "product_id": { "description": "The ID of the product this image is associated with.", "format": "uuid", "type": "string" }, "status": { "description": "Status if the image upload processing. Can be `processing`, `uploaded`, `error`.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "title": "Image", "type": "object" }, "ImagePosition": { "properties": { "position": { "description": "New position for the image.", "format": "double", "type": "number" } }, "required": [ "position" ], "title": "Image Position", "type": "object" }, "ImageResponse": { "properties": { "data": { "$ref": "#/components/schemas/Image" } }, "title": "Image Response", "type": "object" }, "ImageSample": { "properties": { "id": { "description": "Auto-generated object ID.", "type": "string" }, "url": { "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "title": "Image Sample", "type": "object" }, "IntegrationSource": { "properties": { "id": { "description": "Integration source ID.", "type": "string" }, "type": { "description": "Integration source type.", "type": "string" } }, "title": "Integration Source", "type": "object" }, "Inventory": { "properties": { "average_cost": { "description": "The average cost of inventory available to sell.", "format": "double", "nullable": true, "type": "number" }, "current_inventory_level": { "description": "Current inventory level.", "format": "double", "type": "number" }, "deleted_at": { "description": "The deletion timestamp in UTC, or null if not deleted.", "format": "date-time", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "outlet_id": { "description": "The ID of the outlet associated with this inventory record.", "type": "string" }, "product_id": { "description": "The ID of the product associated with this inventory record.", "type": "string" }, "quantity_to_procure": { "description": "Quantity of stock to procure in order to satisfy current fulfilments and service orders.", "format": "double", "type": "number" }, "reorder_amount": { "description": "The quantity to order to reach the desired stock level. For the `FIXED` method, this is a static amount that was set when the reorder method was configured. For `MIN_MAX`, this is dynamically computed as the difference between reorder_target and current_inventory_level, or zero if current stock exceeds the target. This computation is independent of reorder_point and may produce a non-zero value even when current_inventory_level is above the reorder point. It is null if no reorder method is configured.", "format": "double", "nullable": true, "type": "number" }, "reorder_method": { "description": "The reorder strategy in use. Either `FIXED` or `MIN_MAX`. Null if no reorder method is configured.", "enum": [ "FIXED", "MIN_MAX", null ], "nullable": true, "type": "string" }, "reorder_point": { "description": "The inventory level at which a product should be automatically included in stock orders.", "format": "double", "nullable": true, "type": "number" }, "reorder_target": { "description": "The desired stock level to restore to when reordering. For reorder_method `MIN_MAX`, this is the target the reorder amount is computed against. For `FIXED`, this equals reorder_point + reorder_amount. Null if no reorder method is configured.", "format": "double", "nullable": true, "type": "number" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "title": "Inventory", "type": "object" }, "InventoryCollection": { "properties": { "data": { "description": "An array of Inventory records wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/Inventory" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "title": "Inventory Collection", "type": "object" }, "InventoryCountItem": { "properties": { "cost": { "description": "The cost of the item.", "type": "string" }, "count": { "description": "Expected item count.", "type": "string" }, "created_at": { "description": "The creation timestamp in UTC.", "type": "string" }, "deleted_at": { "description": "The deletion timestamp in UTC.", "type": "string" }, "is_included": { "description": "Indicated whether the item was included via a filter. Can be `null`. For full count (no filters) always `true`.", "type": "boolean" }, "product_id": { "description": "The ID of the product associated with this count item.", "format": "uuid", "type": "string" }, "product_sku": { "type": "string" }, "received": { "description": "Observed item count.", "type": "string" }, "status": { "description": "The status of the item. One of: `PENDING`, `SUCCESS`.", "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "cost", "count", "created_at", "deleted_at", "product_id", "received", "status", "updated_at", "version" ], "title": "Inventory Count Item", "type": "object" }, "InventoryCountItemResponse": { "properties": { "data": { "$ref": "#/components/schemas/InventoryCountItem" } }, "required": [ "data" ], "title": "Inventory Count Item Response", "type": "object" }, "InventoryLevel": { "properties": { "average_cost": { "description": "The average cost of inventory available to sell.\n\n\ud83d\udd12 Requires: `product:cost:view` scope", "format": "double", "type": "number" }, "brand_id": { "format": "uuid", "type": "string" }, "current_inventory_level": { "description": "Total inventory available to sell.", "format": "double", "type": "number" }, "location_id": { "format": "uuid", "type": "string" }, "name": { "type": "string" }, "product_id": { "format": "uuid", "type": "string" }, "product_type_id": { "format": "uuid", "type": "string" }, "quantity_to_procure": { "description": "Quantity of stock to procure in order to satisfy current fulfilments and service orders.", "format": "double", "type": "number" }, "reorder_amount": { "description": "The quantity of stock to reorder. For `FIXED`, this is the static amount configured when the reorder method was set up. For `MIN_MAX`, this is dynamically computed as `reorder_target` minus `current_inventory_level` (or zero if current stock already meets or exceeds the target). Omitted if no reorder method is configured.", "format": "double", "type": "number" }, "reorder_method": { "description": "The reorder strategy in use. `FIXED` uses a static reorder amount each time the threshold is reached. `MIN_MAX` dynamically computes the reorder amount to bring stock up to the configured maximum. Omitted if no reorder method is configured.", "enum": [ "FIXED", "MIN_MAX", null ], "nullable": true, "type": "string" }, "reorder_target": { "description": "The target inventory level for replenishment. For `FIXED`, this equals `reorder_threshold` + `reorder_amount`. For `MIN_MAX`, this is the maximum inventory level to restock to. Omitted if no reorder method is configured.", "format": "double", "type": "number" }, "reorder_threshold": { "description": "The inventory level at which reordering is triggered. For `FIXED`, this is the reorder point below which a reorder is suggested. For `MIN_MAX`, this is the minimum inventory level. Omitted if no reorder method is configured.", "format": "double", "type": "number" }, "root_product_id": { "description": "The root product ID of the product's variant family.", "format": "uuid", "type": "string" }, "supplier_id": { "format": "uuid", "type": "string" }, "total_cost": { "description": "The total cost of inventory available to sell.", "format": "double", "type": "number" } } }, "InventoryLevelsRequest": { "properties": { "group_variants": { "default": false, "description": "If filtering by `root_product_ids` and `group_variants` is true, one aggregated level will be returned\nfor each variant family at each outlet.", "type": "boolean" }, "include_composites": { "default": false, "description": "Include composite products in the response.", "type": "boolean" }, "include_inactive": { "default": false, "description": "Include inactive products in the response.", "type": "boolean" }, "location_ids": { "description": "Optional outlet IDs to filter response by.", "items": { "format": "uuid", "type": "string" }, "maxItems": 1000, "type": "array" }, "offset": { "default": 0, "description": "How many inventory levels to skip.", "format": "int64", "type": "integer" }, "product_ids": { "description": "Optional product IDs to filter response by. Mutually exclusive with `root_product_ids`. When omitted, returns inventory levels for all products.", "items": { "format": "uuid", "type": "string" }, "maxItems": 1000, "type": "array" }, "root_product_ids": { "description": "Optional root product IDs to filter response by. Mutually exclusive with `product_ids`. When omitted, returns inventory levels for all products.", "items": { "format": "uuid", "type": "string" }, "maxItems": 1000, "type": "array" }, "size": { "default": 100, "description": "How many inventory levels to return.", "format": "int64", "maximum": 10000, "type": "integer" }, "sort_direction": { "default": "desc", "description": "Whether to sort the response ascending or descending.", "enum": [ "asc", "desc" ], "type": "string" }, "sort_type": { "default": "total_count", "description": "Which response field to sort by.", "enum": [ "total_count", "total_cost", "average_cost", "reorder_point", "reorder_amount", "product_name", "created_at" ], "type": "string" }, "supplier_ids": { "description": "Optional supplier IDs to filter response by.", "items": { "format": "uuid", "type": "string" }, "maxItems": 1000, "type": "array" }, "to_be_procured_only": { "default": false, "description": "Only include inventory with a positive quantity to procure.", "type": "boolean" } } }, "InventoryRequest": { "properties": { "after": { "description": "The lower limit for the version numbers to be included in the response.", "format": "int64", "type": "integer" }, "before": { "description": "The upper limit for the version numbers to be included in the response.", "format": "int64", "type": "integer" }, "include_deleted": { "default": false, "description": "Whether to include inventory records for deleted products.", "type": "boolean" }, "product_id": { "description": "Optional filter to restrict results to the specified product. When combined with variants: true, it's \ntreated as a root product ID and matches all variants of that product; otherwise it matches the exact \nproduct.", "format": "uuid", "type": "string" }, "size": { "default": 1000, "description": "The maximum number of inventory records to return.", "format": "int64", "maximum": 5000, "type": "integer" }, "sort_direction": { "default": "desc", "description": "Whether to sort the response by ascending or descending.", "enum": [ "asc", "desc" ], "type": "string" }, "variants": { "default": false, "description": "When true (and product_id is set), matches all variant products sharing the same root_product_id, rather\nthan just the exact product.", "type": "boolean" } } }, "InvoiceMetadata": { "properties": { "resolve_number": { "description": "Whether to resolve the invoice number automatically.", "type": "boolean" }, "sequence": { "description": "Invoice sequence number.", "format": "int32", "type": "integer" } }, "title": "Invoice Metadata", "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" }, "LineItem": { "properties": { "cost": { "description": "Unit cost for the line item.", "format": "double", "type": "number" }, "cost_total": { "description": "Total cost for the line item.", "format": "double", "type": "number" }, "discount": { "description": "Discount value of the line item.", "format": "double", "type": "number" }, "discount_total": { "description": "Total discount for the line item.", "format": "double", "type": "number" }, "id": { "description": "The ID of this line item.", "format": "uuid", "type": "string" }, "is_return": { "description": "Indicates whether this line item is a return from another sale (referenced by `return_for` on the main sale object).", "type": "boolean" }, "loyalty_value": { "description": "The value that should be added to associated customer's loyalty balance.", "format": "double", "type": "number" }, "note": { "description": "Line item note.", "nullable": true, "type": "string" }, "price": { "description": "Unit price of the line item.", "format": "double", "type": "number" }, "price_set": { "description": "Indicates whether the price was set manually. Using `true` means that the value will never be refreshed from the Price Book when reloaded (sale retrieved from parked sales).", "type": "boolean" }, "price_total": { "description": "Total price for the line item.", "format": "double", "type": "number" }, "product_id": { "description": "The ID of the product associated with this line item.", "format": "uuid", "type": "string" }, "quantity": { "description": "Quantity of products for the line item.", "format": "double", "type": "number" }, "salesperson_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" }, "sequence": { "description": "Order of the line item in the sale.", "format": "double", "type": "number" }, "status": { "description": "Status of the line item.", "enum": [ "SAVED", "VOIDED", "CONFIRMED" ], "type": "string" }, "surcharges": { "description": "Collection of surcharges associated with the line item.", "items": { "$ref": "#/components/schemas/LineItemSurcharge" }, "type": "array" }, "tax": { "deprecated": true, "description": "The unit tax value associated with this line item. **deprecated**", "format": "double", "type": "number" }, "tax_components": { "description": "Collection of tax components associated with the line item.", "items": { "$ref": "#/components/schemas/LineItemTaxComponent" }, "type": "array" }, "tax_id": { "description": "The ID of the tax associated with this line item.", "format": "uuid", "type": "string" }, "tax_total": { "description": "Total tax value.", "format": "double", "type": "number" } }, "title": "Line Item", "type": "object" }, "LineItemAdjustment": { "properties": { "amount": { "$ref": "#/components/schemas/AdjustmentAmount" }, "name": { "description": "The name of the adjustment.", "type": "string" }, "source": { "$ref": "#/components/schemas/AdjustmentSource" }, "target": { "$ref": "#/components/schemas/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" }, "LineItemCustomization": { "properties": { "field_type": { "description": "The field type of the customization.", "type": "string" }, "files": { "description": "Files attached to this customization.", "items": { "$ref": "#/components/schemas/CustomizationFile" }, "type": "array" }, "id": { "description": "The ID of the customization.", "type": "string" }, "name": { "description": "The name of the customization.", "type": "string" }, "value": { "description": "The value of the customization.", "type": "string" } }, "title": "Line Item Customization", "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": "#/components/schemas/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" }, "LineItemProductDetails": { "properties": { "id": { "description": "The ID of the product associated with this line item.", "format": "uuid", "type": "string" } }, "title": "Line Item Product Details", "type": "object" }, "LineItemPromotion": { "properties": { "amount": { "description": "Promotion discount amount.", "format": "double", "type": "number" }, "id": { "description": "Promotion ID.", "type": "string" }, "name": { "description": "Promotion name.", "type": "string" }, "promo_code": { "description": "Promo code used.", "type": "string" }, "promo_code_id": { "description": "Promo code ID.", "type": "string" } }, "title": "Line Item Promotion", "type": "object" }, "LineItemResponseMetadata": { "properties": { "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 of the line item in the sale.", "type": "integer" }, "tax_components": { "description": "Tax components for this line item.", "items": { "$ref": "#/components/schemas/LineItemTaxComponentResponse" }, "type": "array" } }, "title": "Line Item Response Metadata", "type": "object" }, "LineItemResponsePricing": { "properties": { "cost": { "description": "Unit cost for the line item.", "format": "double", "type": "number" }, "cost_total": { "description": "Total cost for the line item (`cost` \u00d7 `quantity`).", "format": "double", "type": "number" }, "discount": { "description": "Discount value of the line item.", "format": "double", "type": "number" }, "discount_total": { "description": "Total discount for the line item (`discount` \u00d7 `quantity`).", "format": "double", "type": "number" }, "loyalty_amount": { "description": "The value that should be added to associated customer's loyalty balance.", "format": "double", "type": "number" }, "loyalty_amount_total": { "description": "Total loyalty value for the line item (`loyalty_amount` \u00d7 `quantity`).", "format": "double", "type": "number" }, "price": { "description": "Unit price of the line item.", "format": "double", "type": "number" }, "total": { "description": "Total price for the line item.", "format": "double", "type": "number" } }, "title": "Line Item Response Pricing", "type": "object" }, "LineItemResponseSource": { "properties": { "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 Response Source", "type": "object" }, "LineItemResponseTax": { "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.", "format": "uuid", "type": "string" }, "total": { "description": "Total tax value.", "format": "double", "type": "number" } }, "title": "Line Item Response Tax", "type": "object" }, "LineItemReturn": { "properties": { "is_return": { "description": "Indicates whether this line item is a return.", "type": "boolean" }, "reason": { "description": "Return reason.", "type": "string" } }, "title": "Line Item Return", "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" }, "LineItemSurcharge": { "properties": { "tax_components": { "description": "Collection of tax components associated with the surcharge.", "items": { "$ref": "#/components/schemas/LineItemTaxComponentResponse" }, "type": "array" }, "value": { "description": "Tax exclusive surcharge amount for a specific payment.", "format": "double", "type": "number" } }, "title": "Line Item Surcharge", "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" }, "LineItemTaxComponentResponse": { "properties": { "rate_id": { "description": "Tax rate ID.", "type": "string" }, "total_tax": { "description": "Tax total.", "format": "double", "type": "number" } }, "title": "Line Item Tax Component", "type": "object" }, "LoyaltyAdjustmentCreateBody": { "description": "Request body to perform loyalty balance adjustment", "properties": { "adjustments": { "items": { "description": "single customer loyalty adjustment item", "properties": { "credit": { "description": "how much loyalty to add to the balance (mutually exclusive with debit)", "type": "number" }, "customer_id": { "description": "id of a customer to perform an adjustment", "format": "uuid", "type": "string" }, "debit": { "description": "how much loyalty to subtract from the balance (mutually exclusive with credit)", "type": "number" }, "reason": { "description": "Arbitrary note that would be associated with the transaction", "type": "string" } }, "type": "object" }, "type": "array" }, "session_id": { "description": "An unique ID that prevents double adjustment (same request sent twice will be only applied once)\nMust be an uuidv4", "format": "uuid", "type": "string" } }, "type": "object" }, "LoyaltyAdjustmentResponse": { "description": "Response for the loyalty balance adjustment request", "properties": { "applied": { "description": "adjustments that were successful", "items": { "properties": { "balance": { "description": "updated customer balance", "type": "number" }, "customer_id": { "type": "string" } }, "type": "object" }, "type": "array" }, "errors": { "description": "adjustments that failed", "items": { "properties": { "customer_id": { "type": "string" }, "error": { "description": "update error", "type": "string" } }, "type": "object" }, "type": "array" } }, "type": "object" }, "LspayCNPConfigResponse": { "properties": { "client_key": { "description": "The client key for card-not-present payment processing.", "type": "string" }, "currency": { "description": "The currency configured for card-not-present payments.", "type": "string" } }, "required": [ "currency", "client_key" ], "title": "LspayCNPConfigResponse", "type": "object" }, "LspayNewTransactionRequest": { "properties": { "amount": { "description": "The transaction amount as a decimal string.", "type": "string" }, "currency": { "description": "The ISO 4217 currency code.", "type": "string" }, "metadata": { "$ref": "#/components/schemas/LspayTransactionMetadata" }, "payment_start_time_ms": { "description": "The Unix timestamp in milliseconds when payment was initiated.", "format": "int64", "type": "integer" }, "register_sale_payment_id": { "description": "The register sale payment ID to associate with this transaction.", "type": "string" }, "retailer_payment_type_id": { "description": "The retailer payment type ID configured for LSPay.", "type": "string" }, "tip_eligible_amount": { "description": "The tip-eligible portion of the amount as a decimal string.", "type": "string" }, "with_surcharge": { "description": "Whether to apply a surcharge to this transaction.", "type": "boolean" } }, "required": [ "amount", "currency", "register_sale_payment_id", "retailer_payment_type_id", "metadata" ], "title": "LspayNewTransactionRequest", "type": "object" }, "LspayPairingAttemptRequest": { "properties": { "source": { "description": "The source of the pairing attempt.", "type": "string" } }, "title": "LspayPairingAttemptRequest", "type": "object" }, "LspayPaymentIntentRequest": { "properties": { "payment_intent_id": { "description": "The Stripe payment intent ID.", "type": "string" } }, "required": [ "payment_intent_id" ], "title": "LspayPaymentIntentRequest", "type": "object" }, "LspayReprocessTransactionRequest": { "properties": { "currency": { "description": "The ISO 4217 currency code. Required when with_surcharge is true.", "type": "string" }, "payment_intent_id": { "description": "The Stripe payment intent ID.", "type": "string" }, "payment_start_time_ms": { "description": "The Unix timestamp in milliseconds when payment was initiated.", "format": "int64", "type": "integer" }, "tip_eligible_amount": { "description": "The tip-eligible portion of the amount as a decimal string.", "type": "string" }, "with_surcharge": { "description": "Whether to apply a surcharge to the reprocessed transaction.", "type": "boolean" } }, "required": [ "payment_intent_id" ], "title": "LspayReprocessTransactionRequest", "type": "object" }, "LspayRetailerFeaturesResponse": { "additionalProperties": { "type": "string" }, "description": "A map of LSPay feature flag keys to their string values (e.g. \"pmof_enabled\" \u2192 \"true\").", "title": "LspayRetailerFeaturesResponse", "type": "object" }, "LspaySetupIntentResponse": { "properties": { "client_secret": { "description": "The Stripe setup intent client secret.", "type": "string" } }, "required": [ "client_secret" ], "title": "LspaySetupIntentResponse", "type": "object" }, "LspayTender": { "properties": { "amount": { "description": "The tender amount.", "type": "number" }, "card_details": { "additionalProperties": true, "description": "Card-specific details returned by the provider.", "type": "object" }, "created_at": { "description": "The time the tender was created.", "format": "date-time", "type": "string" }, "currency": { "description": "The ISO 4217 currency code.", "type": "string" }, "emv": { "additionalProperties": true, "description": "EMV chip data returned by the provider.", "type": "object" }, "external_transaction_id": { "description": "The external (provider) transaction ID.", "type": "string" }, "id": { "description": "The tender ID.", "type": "string" }, "provider_fields": { "additionalProperties": true, "description": "Provider-specific fields.", "type": "object" }, "status": { "description": "The tender status.", "enum": [ "APPROVED", "APPROVED_PIN", "APPROVED_SIGNATURE", "CANCELLED", "DECLINED", "REFUNDED", "REVERSED", "UNKNOWN" ], "type": "string" }, "transaction_id": { "description": "The transaction ID this tender belongs to.", "type": "string" }, "type": { "description": "The tender type.", "enum": [ "SALE", "REFUND", "REVERSAL", "TIP", "SURCHARGE" ], "type": "string" } }, "required": [ "id", "transaction_id", "created_at", "currency", "amount", "type", "status" ], "title": "LspayTender", "type": "object" }, "LspayTokenResponse": { "properties": { "location": { "description": "The Stripe Terminal location ID.", "type": "string" }, "on_behalf_of": { "description": "The Stripe account ID on behalf of which the token is issued.", "type": "string" }, "serial_number": { "description": "The terminal serial number. Only present when pairingData=true.", "type": "string" }, "token": { "description": "The Stripe Terminal connection token.", "type": "string" } }, "required": [ "token", "location" ], "title": "LspayTokenResponse", "type": "object" }, "LspayTransaction": { "properties": { "created_at": { "description": "The time the transaction was created.", "format": "date-time", "type": "string" }, "id": { "description": "The transaction ID.", "type": "string" }, "payment_type_id": { "description": "The payment type ID.", "type": "string" }, "provider_fields": { "additionalProperties": true, "description": "Provider-specific fields.", "type": "object" }, "register_id": { "description": "The register ID.", "type": "string" }, "register_sale_payment_id": { "description": "The register sale payment ID.", "type": "string" }, "retailer_id": { "description": "The retailer ID.", "type": "string" }, "retailer_payment_type_id": { "description": "The retailer payment type ID.", "type": "string" }, "status": { "description": "The transaction status.", "enum": [ "CANCELLED", "CANCELLED_BAD_CARD", "CANCELLED_BUSY", "COMPLETED", "DECLINED", "REFUNDED", "REVERSED", "TIMEOUT", "UNKNOWN", "PROCESSING" ], "type": "string" }, "tenders": { "description": "The tenders associated with this transaction.", "items": { "$ref": "#/components/schemas/LspayTender" }, "type": "array" }, "updated_at": { "description": "The time the transaction was last updated.", "format": "date-time", "type": "string" } }, "required": [ "id", "register_sale_payment_id", "retailer_id", "created_at", "updated_at", "status", "tenders", "register_id", "retailer_payment_type_id", "provider_fields" ], "title": "LspayTransaction", "type": "object" }, "LspayTransactionMetadata": { "properties": { "product_version": { "description": "The version of the POS product initiating the transaction.", "type": "string" }, "register_sale_id": { "description": "The register sale ID associated with this transaction.", "type": "string" } }, "required": [ "register_sale_id", "product_version" ], "title": "LspayTransactionMetadata", "type": "object" }, "LspayTransactionResponse": { "properties": { "payment_intent_id": { "description": "The Stripe payment intent ID.", "type": "string" }, "reason": { "description": "The reason for the transaction status.", "enum": [ "TERMINAL_BUSY", "TERMINAL_TIMEOUT", "TERMINAL_UNAVAILABLE", "TERMINAL_ERROR", "UNKNOWN", "CARD_DECLINED", "EXPIRED_CARD", "INSUFFICIENT_FUNDS", "INVALID_AMOUNT", "INVALID_ACCOUNT", "STRIPE_INVALID_REQUEST_ERROR", "STRIPE_API_ERROR", "TRANSACTION_NOT_ALLOWED", "INCORRECT_PIN", "PIN_TRY_EXCEEDED", "INTENT_CANCELLED", "OVERRIDE_CANCELLED", "CUSTOMER_CANCELED", "PAYMENT_INTENT_NOT_FOUND", "PAYMENT_METHOD_NOT_AVAILABLE", "MOBILE_DEVICE_AUTHENTICATION_REQUIRED", "MISMATCH_INTENT", "MISSING_PAYMENT_METHOD", "WRONG_RSPI", "SETUP_INTENT_NOT_FOUND", "SETUP_INTENT_NOT_FAILED", "TERMINAL_ACTION_FAILED", "CARD_PRESENTED_MISMATCH_ORIGINAL_CARD" ], "type": "string" }, "register_sale_payment_id": { "description": "The register sale payment ID.", "type": "string" }, "status": { "description": "The cached transaction status.", "enum": [ "CANCELLED", "COMPLETED", "DECLINED", "PROCESSING", "AUTHORISED", "UNKNOWN", "CARD_PRESENTED" ], "type": "string" }, "transaction": { "$ref": "#/components/schemas/LspayTransaction" } }, "required": [ "register_sale_payment_id", "payment_intent_id", "status" ], "title": "LspayTransactionResponse", "type": "object" }, "Outlet": { "properties": { "attributes": { "description": "The outlet attributes such as `low_stock_warning`, `order_reference`, `order_reference_prefix`, `return_reference`, `return_reference_prefix`.", "items": { "$ref": "#/components/schemas/Attribute" }, "type": "array" }, "currency": { "description": "Currency name.", "type": "string" }, "currency_symbol": { "description": "Currency symbol.", "type": "string" }, "default_tax_id": { "deprecated": true, "description": "Default tax id used for sales in this outlet. **deprecated**", "type": "string" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "display_prices": { "description": "Indicates whether prices in this outlet should be displayed as tax-inclusive.", "enum": [ "inclusive", "exclusive" ], "type": "string" }, "email": { "description": "Specified email for the outlet.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "latitude": { "description": "Geographical latitude of the outlet.", "nullable": true, "type": "string" }, "longitude": { "description": "Geographical longitude of the outlet.", "nullable": true, "type": "string" }, "name": { "description": "The outlet name.", "type": "string" }, "phone": { "description": "Contact phone number for the outlet.", "nullable": true, "type": "string" }, "physical_address_1": { "description": "Physical address, line 1.", "nullable": true, "type": "string" }, "physical_address_2": { "description": "Physical address, line 2.", "nullable": true, "type": "string" }, "physical_city": { "description": "Physical address, city.", "nullable": true, "type": "string" }, "physical_country_id": { "description": "Physical address, country code.", "nullable": true, "type": "string" }, "physical_postcode": { "description": "Physical address, post code.", "nullable": true, "type": "string" }, "physical_state": { "description": "Physical address, state.", "nullable": true, "type": "string" }, "physical_suburb": { "description": "Physical address, suburb.", "nullable": true, "type": "string" }, "time_zone": { "description": "Outlet timezone. **read only**", "nullable": true, "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "id", "name", "default_tax_id", "currency", "display_prices", "time_zone", "currency_symbol", "attributes", "version" ], "title": "Outlet", "type": "object" }, "OutletCollection": { "properties": { "data": { "description": "An array of Outlet objects wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/Outlet" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "Outlet Collection", "type": "object" }, "OutletResponse": { "properties": { "data": { "$ref": "#/components/schemas/Outlet" } }, "title": "Outlet Response", "type": "object" }, "OutletTax": { "properties": { "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "outlet_id": { "description": "The ID of the outlet this record is associated with.", "format": "uuid", "type": "string" }, "product_id": { "description": "The ID of the product this record is associated with.", "format": "uuid", "type": "string" }, "tax_id": { "description": "The ID of the tax this record is associated with.", "format": "uuid", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "outlet_id", "product_id", "tax_id", "version" ], "title": "Outlet Product Tax", "type": "object" }, "OutletTaxCollection": { "properties": { "data": { "description": "An array of outlet-product-tax records.", "items": { "$ref": "#/components/schemas/OutletTax" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "type": "object" }, "PackLineItemRequest": { "properties": { "quantity": { "description": "The quantity to be packed", "example": 1, "format": "double", "type": "number" }, "sale_line_item_id": { "description": "The unique identifier of the sale line item to be packed.", "example": "f3a8d2c1-9b7e-4f56-8a12-3e4d5c6b7a89", "format": "uuid", "type": "string" }, "source_breakdown": { "$ref": "#/components/schemas/PackLineItemSourceBreakdown" } }, "required": [ "sale_line_item_id", "quantity" ], "type": "object" }, "PackLineItemSourceBreakdown": { "description": "Specifies how a packing quantity should be sourced. When provided, both fields are required and must sum to the parent quantity. Source breakdown is not allowed when the parent quantity is negative (unpacking).", "properties": { "quantity_from_not_started": { "description": "Quantity to source from the not-started state.", "format": "double", "type": "number" }, "quantity_from_picked": { "description": "Quantity to source from the picked state.", "format": "double", "type": "number" } }, "required": [ "quantity_from_picked", "quantity_from_not_started" ], "type": "object" }, "PackLineItemsRequest": { "properties": { "line_items": { "description": "The line items to be packed", "items": { "$ref": "#/components/schemas/PackLineItemRequest" }, "type": "array" }, "version": { "description": "The current version number of the fulfillment.", "example": 5, "format": "int32", "type": "integer" } }, "required": [ "version", "line_items" ], "type": "object" }, "PackLineItemsResponse": { "properties": { "data": { "properties": { "id": { "description": "The unique identifier of the fulfillment.", "example": "7428951063847291856", "type": "string" }, "version": { "description": "The new version number of the fulfillment after the update.", "example": 3, "format": "int32", "type": "integer" } }, "type": "object" } }, "type": "object" }, "PackedLineItem": { "description": "A single sale line item and the quantity to include on the partial packing slip", "properties": { "quantity": { "description": "The quantity of this line item to pack. Must be a positive finite number and must not exceed the quantity already packed on the pick lists.", "example": 2, "format": "double", "type": "number" }, "sale_line_item_id": { "description": "The ID of the sale line item to include on the packing slip", "example": "81b37e5f-aa50-4fe3-95d3-a3cec73a7e2c", "format": "uuid", "type": "string" } }, "required": [ "sale_line_item_id", "quantity" ], "title": "Packed Line Item", "type": "object" }, "PaginationMetadata": { "properties": { "page": { "type": "integer" }, "pageSize": { "type": "integer" }, "results": { "type": "integer" } }, "type": "object" }, "Pairing": { "description": "A terminal pairing record associating a register with a payment terminal.", "properties": { "created_at": { "description": "When the pairing was created.", "format": "date-time", "type": "string" }, "pairing_key": { "description": "The pairing key identifying the terminal.", "type": "string" }, "pairing_value": { "description": "The pairing value (e.g. serial number or location).", "type": "string" }, "register_id": { "description": "The register ID associated with this pairing.", "type": "string" }, "retailer_id": { "description": "The retailer ID associated with this pairing.", "type": "string" }, "updated_at": { "description": "When the pairing was last updated.", "format": "date-time", "type": "string" } }, "required": [ "register_id", "retailer_id", "pairing_key", "pairing_value", "created_at", "updated_at" ], "title": "Pairing", "type": "object" }, "PartialPackingSlipRequest": { "description": "Request body describing the subset of line items and quantities to render on a partial packing slip", "properties": { "lang": { "description": "BCP 47 language tag used to localize the static template strings on the packing slip. Defaults to `en-US` when omitted or unrecognized.", "example": "en-US", "type": "string" }, "packed_line_items": { "description": "The sale line items and quantities to include on the partial packing slip. Must contain at least one item.", "items": { "$ref": "#/components/schemas/PackedLineItem" }, "minItems": 1, "type": "array" } }, "required": [ "packed_line_items" ], "title": "Partial Packing Slip Request", "type": "object" }, "PartnerSubscription": { "description": "PartnerSubscription contains all the subscription under one partner application", "properties": { "application_id": { "type": "string" }, "application_name": { "example": "Partner Application", "type": "string" }, "partner_subscription_info": { "items": { "$ref": "#/components/schemas/PartnerSubscriptionInfo" }, "type": "array" } }, "type": "object" }, "PartnerSubscriptionInfo": { "properties": { "charge_interval": { "example": 1, "format": "int64", "type": "integer" }, "charge_interval_unit": { "example": "month", "type": "string" }, "components": { "items": { "$ref": "#/components/schemas/ProductInfoComponent" }, "type": "array" }, "currency": { "example": "nzd", "type": "string" }, "id": { "example": "1348730086846538752", "type": "string" }, "next_assessment_at": { "example": "2021-02-11T20:34:42Z", "type": "string" }, "price_in_cents": { "example": "5000", "type": "string" }, "product_family_name": { "example": "Marshmallow Production Subscription", "type": "string" }, "product_name": { "example": "Marshmallow Lite Subscription", "type": "string" }, "product_price_point_name": { "example": "marshmallow-product-price-point", "type": "string" }, "state": { "example": "canceled", "type": "string" } }, "type": "object" }, "PartnerSubscriptionToken": { "description": "PartnerSubscriptionToken repreasent a partner subscription token", "properties": { "components": { "example": "{components: [{\"component_handle\": \"additional_registers\", \"component_price_point_handle\": \"basic\", \"quantity\": 2}]}", "type": "string" }, "created_at": { "example": "2020-10-06T05:07:26Z", "format": "date-time", "type": "string" }, "is_used": { "example": true, "type": "boolean" }, "product_handle": { "example": "lite", "type": "string" }, "product_price_point_handle": { "example": "marshmallow-lite", "type": "string" }, "retailer_id": { "example": "0242ac12-001c-11eb-fa07-0f585c3d42ee", "type": "string" }, "return_url": { "example": "https://example.com/redirect", "type": "string" }, "subscription_id": { "example": 1316881562803438000, "format": "int64", "type": "integer" }, "token": { "description": "Token is a randomly generated string that is a required parameter for consent page", "example": "0a7e36eb05a94bf1a4d3daeff0f561f9", "maxLength": 32, "minLength": 32, "type": "string" }, "used_at": { "example": "2020-10-06T07:00:38Z", "format": "date-time", "type": "string" }, "vend_application_id": { "example": "iYsePmZaddtZRNYQrr7g3Eg2ItSkTiFx", "type": "string" } }, "type": "object" }, "PartnerSubscriptionTokenComponent": { "description": "PartnerSubscriptionTokenComponent represents a component to be added to a subscription", "properties": { "component_handle": { "description": "Unique reference to the component to be included in the new subscription", "example": "additional_registers", "type": "string" }, "component_price_handle": { "description": "Unique reference to the component price point", "example": "lite", "type": "string" }, "quantity": { "description": "How many components should be added", "example": 1, "format": "int64", "type": "integer" } }, "required": [ "component_handle", "component_price_handle", "quantity" ], "type": "object" }, "PartnerSubscriptionTokenRequest": { "description": "PartnerSubscriptionTokenRequest represents the request's body for subscription token API", "properties": { "components": { "description": "Components is a list of components to add on to the plan", "items": { "$ref": "#/components/schemas/PartnerSubscriptionTokenComponent" }, "type": "array" }, "coupon_code": { "description": "CouponCode is the coupon code to be attached to the activation", "example": "TEST10POFFFORLIFE", "type": "string" }, "price_handle": { "description": "ProductPricePointHandle is the product price point handle", "example": "small-v1", "type": "string" }, "product_handle": { "description": "ProductHandle is the product handle", "example": "small-v1", "type": "string" }, "return_url": { "description": "ReturnURL is the URL to which the user is redirected to after giving his/her consent", "example": "https://www.example.com/return", "type": "string" } }, "required": [ "price_handle", "product_handle", "return_url" ], "type": "object" }, "PartnerSubscriptionTokenResponse": { "description": "PartnerSubscriptionTokenResponse contains the token and its expiration time", "properties": { "expires_at": { "description": "ExpiresAt is the exact time of token expiry in UTC timezone and displayed in RFC3339 format", "example": "2020-10-06T05:07:26Z", "type": "string" }, "expires_in": { "description": "ExpiresIn is the number of seconds till the token is expired", "example": "86400", "type": "string" }, "token": { "description": "Token is a randomly generated string that is a required parameter for consent page", "example": "0a7e36eb05a94bf1a4d3daeff0f561f9", "maxLength": 32, "minLength": 32, "type": "string" } }, "type": "object" }, "PartnerSubscriptions": { "description": "PartnerSubscriptions contains all the subscriptions of the retailer from all the partners", "items": { "$ref": "#/components/schemas/PartnerSubscription" }, "nullable": true, "type": "array" }, "PartnerUpdateSubscriptionTokenComponent": { "description": "PartnerUpdateSubscriptionTokenComponent represents a component to be added to an updated subscription", "properties": { "component_handle": { "description": "Unique reference for the component to be updated", "example": "additional_registers", "type": "string" }, "component_price_handle": { "description": "Unique reference for the component price point to be updated to", "example": "lite", "type": "string" }, "quantity": { "description": "How many components should be there after the update", "example": 1, "format": "int64", "type": "integer" } }, "required": [ "component_handle", "quantity" ], "type": "object" }, "PartnerUpdateSubscriptionTokenRequest": { "description": "PartnerUpdateSubscriptionTokenRequest represents the request's body for updating a subscription via token API", "properties": { "components": { "description": "Components is a list of components to add on to the plan", "items": { "$ref": "#/components/schemas/PartnerUpdateSubscriptionTokenComponent" }, "type": "array" }, "price_handle": { "description": "ProductPricePointHandle is the product price point handle, required if `product_handle` is specified", "example": "small-v1", "type": "string" }, "product_handle": { "description": "ProductHandle is the product handle to update", "example": "small-v1", "type": "string" }, "return_url": { "description": "ReturnURL is the URL to which the user is redirected to after giving his/her consent", "example": "https://www.example.com/return", "type": "string" } }, "required": [ "return_url" ], "type": "object" }, "Payment": { "properties": { "amount": { "description": "Payment amount.", "format": "double", "type": "number" }, "id": { "description": "Auto-generated payment ID.", "format": "uuid", "type": "string" }, "name": { "description": "Payment type name.", "type": "string" }, "outlet_id": { "description": "A valid outlet ID.", "format": "uuid", "type": "string" }, "payment_date": { "description": "Payment date in UTC.", "type": "string" }, "payment_type_id": { "deprecated": true, "description": "A payment type associated with the retailer payment type. **deprecated**", "type": "string" }, "register_id": { "description": "A valid register ID.", "format": "uuid", "type": "string" }, "retailer_payment_type_id": { "description": "A valid retailer payment type ID.", "format": "uuid", "type": "string" }, "surcharge": { "$ref": "#/components/schemas/SaleSurcharge" } }, "title": "Payment", "type": "object" }, "PaymentErrorResponse": { "properties": { "error": { "properties": { "code": { "type": "integer" }, "message": { "description": "Human-readable error description.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" } }, "required": [ "error" ], "type": "object" }, "PaymentExternalApplication": { "properties": { "application_id": { "description": "ID of the external application.", "type": "string" }, "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "external_id": { "description": "ID from the external application.", "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" } }, "title": "Payment External Application", "type": "object" }, "PaymentExternalAttribute": { "additionalProperties": true, "description": "External attributes for the payment. Additional dynamic keys may be present.", "properties": { "card_last_four_digits": { "description": "Last 4 digits of the card.", "type": "string" }, "source": { "description": "Source of the external attribute.", "type": "string" }, "transaction_id": { "description": "Transaction ID from the external system.", "type": "string" } }, "title": "Payment External Attribute", "type": "object" }, "PaymentIntegration": { "properties": { "card_last4": { "description": "Last 4 digits of the card.", "type": "string" }, "is_authorized": { "description": "Whether the payment is authorized.", "type": "boolean" }, "receipt_number": { "description": "Receipt number from the payment integration.", "type": "string" }, "source": { "$ref": "#/components/schemas/IntegrationSource" }, "transaction_id": { "description": "Transaction ID from the payment integration.", "type": "string" } }, "title": "Payment Integration", "type": "object" }, "PaymentIntentMetadata": { "properties": { "order_id": { "description": "Payment ID / register_sale_payment_id.", "type": "string" }, "product_version": { "description": "Version of the POS product.", "type": "string" }, "register_name": { "description": "Name of the register. If omitted, swiper will resolve it via the Vend API using register_id.\n", "type": "string" }, "register_sale_id": { "description": "The register sale ID associated with this payment.", "type": "string" }, "terminal_label": { "description": "Device name / terminal label.", "type": "string" }, "terminal_serial_number": { "description": "Device serial number / ID.", "type": "string" } }, "type": "object" }, "PaymentIntentRequest": { "properties": { "amount": { "description": "Payment amount in the store's currency units.", "example": 10.5, "format": "double", "type": "number" }, "currency": { "description": "ISO 4217 currency code.", "example": "AUD", "type": "string" }, "metadata": { "$ref": "#/components/schemas/PaymentIntentMetadata" }, "outlet_id": { "description": "The outlet identifier. Required to derive the Stripe connected account (PLI).", "type": "string" }, "support_interac": { "default": false, "description": "When true and currency is CAD, adds Interac as a supported payment method.\n", "type": "boolean" } }, "required": [ "amount", "currency", "outlet_id" ], "type": "object" }, "PaymentIntentResponse": { "properties": { "capture_method": { "description": "Stripe capture method. Determined by currency: - `automatic` for AUD - `manual` for all other currencies\n", "enum": [ "automatic", "manual" ], "type": "string" }, "client_secret": { "description": "Client secret for completing the payment on the client side.", "example": "pi_3Abc123_secret_xyz", "type": "string" }, "id": { "description": "Stripe payment intent ID.", "example": "pi_3Abc123", "type": "string" }, "on_behalf_of": { "description": "Stripe connected account ID. Present when the payment is on behalf of a connected account.", "type": "string" }, "status": { "description": "Stripe payment intent status.", "example": "requires_payment_method", "type": "string" } }, "required": [ "id", "client_secret", "capture_method", "status" ], "type": "object" }, "PaymentResponseMetadata": { "properties": { "register_open_sequence_id": { "description": "Register open sequence ID.", "format": "uuid", "type": "string" } }, "title": "Payment Response Metadata", "type": "object" }, "PaymentResponseSource": { "properties": { "id": { "description": "Integrator-derived payment source ID. Non-null when the integrator provides a transaction ID.", "type": "string" }, "outlet_id": { "description": "A valid outlet ID.", "format": "uuid", "type": "string" }, "register_id": { "description": "The ID of the register used to add this payment to the sale.", "format": "uuid", "type": "string" } }, "title": "Payment Response Source", "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" }, "PaymentSurcharge": { "properties": { "amount": { "description": "Surcharge amount.", "format": "double", "type": "number" }, "rule": { "description": "Specifies the rule of the surcharge to be applied.", "type": "string" } }, "title": "Payment Surcharge", "type": "object" }, "PaymentType": { "properties": { "config": { "additionalProperties": true, "description": "Payment type configuration. Shape varies by payment type.", "nullable": true, "type": "object" }, "created_at": { "description": "The creation timestamp.", "format": "date-time", "nullable": true, "type": "string" }, "deleted_at": { "description": "The deletion timestamp.", "format": "date-time", "nullable": true, "type": "string" }, "disabled": { "description": "Indicates if the payment type is disabled.", "type": "boolean" }, "gateway": { "description": "Indicates if the payment type is a gateway type.", "type": "boolean" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "internal": { "description": "Indicates if the payment type is for internal use only.", "type": "boolean" }, "is_editable": { "description": "Indicates if the payment type can be edited. Omitted when not applicable.", "nullable": true, "type": "boolean" }, "name": { "description": "The name of the payment type.", "type": "string" }, "name_changed_by_user": { "description": "Indicates if the name was customised by the retailer.", "type": "boolean" }, "outlet_ids": { "description": "The list of outlet IDs this payment type is associated with.", "items": { "type": "string" }, "nullable": true, "type": "array" }, "payment_type": { "$ref": "#/components/schemas/GlobalPaymentType" }, "type_id": { "description": "The ID of the global payment type. It shouldn't be used to identify the payment type - there may be multiple payment types with the same `type_id`.", "type": "integer" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "id", "name", "type_id", "version", "disabled", "internal" ], "type": "object" }, "PaymentTypeCollection": { "properties": { "data": { "description": "An array of payment types.", "items": { "$ref": "#/components/schemas/PaymentType" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "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" }, "PaymentTypeDetails": { "properties": { "config_id": { "description": "Payment type id to be used for the payment.", "format": "uuid", "type": "string" }, "id": { "description": "**internal** Global payment type ID. Irrelevant for external use.", "type": "string" }, "name": { "description": "The name of the payment type.", "type": "string" } }, "title": "Payment Type Details", "type": "object" }, "PickLineItemRequest": { "properties": { "quantity": { "description": "The quantity to be picked", "example": 1, "format": "double", "type": "number" }, "sale_line_item_id": { "description": "The unique identifier of the sale line item to be picked.", "example": "f3a8d2c1-9b7e-4f56-8a12-3e4d5c6b7a89", "format": "uuid", "type": "string" } }, "required": [ "sale_line_item_id", "quantity" ], "type": "object" }, "PickLineItemsRequest": { "properties": { "line_items": { "description": "The line items to be picked", "items": { "$ref": "#/components/schemas/PickLineItemRequest" }, "type": "array" }, "version": { "description": "The current version number of the fulfillment.", "example": 5, "format": "int32", "type": "integer" } }, "required": [ "version", "line_items" ], "type": "object" }, "PickLineItemsResponse": { "properties": { "data": { "properties": { "id": { "description": "The unique identifier of the fulfillment.", "example": "7428951063847291856", "type": "string" }, "version": { "description": "The new version number of the fulfillment after the update.", "example": 3, "format": "int32", "type": "integer" } }, "type": "object" } }, "type": "object" }, "PickList": { "properties": { "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "line_items": { "description": "The line items that are awaiting fulfillment.", "items": { "$ref": "#/components/schemas/PickListLineItem" }, "type": "array" }, "note": { "description": "The fulfillment note associated with the pick list.", "type": "string" }, "outlet_id": { "description": "The ID of the outlet that the sale originates from.", "format": "uuid", "type": "string" }, "sale_id": { "description": "The ID of the sale that is awaiting fulfillment.", "format": "uuid", "type": "string" }, "status": { "description": "Status of the pick list.", "type": "string" }, "type": { "description": "Fulfillment Type of the pick list.", "enum": [ "SHIPPED", "PICKED_UP" ], "nullable": true, "type": "string" }, "user_id": { "description": "The ID of the user who started the sale.", "format": "uuid", "type": "string" } }, "title": "PickList", "type": "object" }, "PickListLineItem": { "properties": { "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "note": { "description": "Line item note.", "nullable": true, "type": "string" }, "picked_quantity": { "description": "Number of units that are picked so far for this line item in the pick list.", "format": "double", "type": "number" }, "product_id": { "description": "The ID of a product in the pick list.", "format": "uuid", "type": "string" }, "quantity": { "description": "Number of units that need to be picked for this line item before satisfying the pick list.", "format": "double", "type": "number" }, "sale_line_item_id": { "description": "The ID of the line item associated to the sale", "format": "uuid", "type": "string" } }, "title": "Pick List Line Item", "type": "object" }, "PickListsResponse": { "properties": { "data": { "items": { "$ref": "#/components/schemas/PickList" }, "type": "array" } }, "title": "Pick Lists Response", "type": "object" }, "PriceBook": { "properties": { "created_at": { "description": "Created timestamp in UTC.", "type": "string" }, "customer_group_ids": { "description": "The IDs of the customer groups associated with this price book.", "items": { "format": "uuid", "type": "string" }, "nullable": true, "type": "array" }, "customer_groups": { "items": { "$ref": "#/components/schemas/CustomerGroup" }, "nullable": true, "type": "array" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "name": { "description": "Price Book name.", "type": "string" }, "outlets": { "items": { "$ref": "#/components/schemas/Outlet" }, "nullable": true, "type": "array" }, "restrict_to_platform_key": { "description": "`\"0\"` - all platforms, `\"1\"` - in store, `\"2\"` - ecommerce.", "nullable": true, "type": "string" }, "restrict_to_platform_label": { "description": "One of `In Store`, `Ecommerce`, `All Platforms`.", "nullable": true, "type": "string" }, "type": { "description": "Type of price book", "type": "string" }, "updated_at": { "description": "Updated timestamp in UTC.", "type": "string" }, "valid_from": { "description": "The date when the Price Book becomes valid (active).", "nullable": true, "type": "string" }, "valid_to": { "description": "The date when the Price Book becomes invalid (inactive).", "nullable": true, "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "name" ], "title": "Price Book", "type": "object" }, "PriceBookCollection": { "properties": { "data": { "description": "An array of Price Book objects wrapped in a top level `data` object.", "items": { "$ref": "#/components/schemas/PriceBook" }, "type": "array" } }, "title": "Price Book Collection", "type": "object" }, "PriceBookCreateRequest": { "properties": { "customer_group_ids": { "items": { "description": "The ID of the customer group.", "type": "string" }, "type": "array" }, "name": { "description": "Price Book name.", "type": "string" }, "outlet_ids": { "items": { "description": "The ID of an outlet for which the Price Book should be used.", "type": "string" }, "type": "array" }, "restrict_to_platform": { "description": "`\"0\"` - all platforms, `\"1\"` - in store, `\"2\"` - ecommerce.", "nullable": true, "type": "string" }, "valid_from": { "description": "The date when the Price Book becomes valid (active).", "nullable": true, "type": "string" }, "valid_to": { "description": "The date when the Price Book becomes invalid (inactive).", "nullable": true, "type": "string" } }, "required": [ "customer_group_ids", "outlet_ids", "name" ], "title": "Price Book Create Request", "type": "object" }, "PriceBookCreateResponse": { "properties": { "data": { "$ref": "#/components/schemas/PriceBookCreateResponseData" } }, "title": "Price Book Create Response", "type": "object" }, "PriceBookCreateResponseData": { "properties": { "customer_groups": { "items": { "$ref": "#/components/schemas/CustomerGroup" }, "type": "array" }, "id": { "type": "string" }, "name": { "type": "string" }, "outlets": { "items": { "$ref": "#/components/schemas/Outlet" }, "nullable": true, "type": "array" }, "restrict_to_platform": { "type": "string" }, "retailer_id": { "type": "string" }, "type": { "type": "string" }, "valid_from": { "nullable": true, "type": "string" }, "valid_to": { "nullable": true, "type": "string" } }, "title": "Price Book Create Response Data" }, "PriceBookProduct": { "properties": { "adjustment": { "description": "The adjustment amount", "format": "double", "nullable": true, "type": "number" }, "adjustment_type": { "description": "The adjustment type", "type": "string" }, "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "default_display_price": { "description": "The default display price", "format": "double", "type": "number" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "discount": { "description": "The discount amount", "format": "double", "nullable": true, "type": "number" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "loyalty_value": { "description": "Price Book defined loyalty value.", "format": "double", "nullable": true, "type": "number" }, "max_units": { "description": "The maximum number of items for which this price will be used.", "format": "double", "nullable": true, "type": "number" }, "min_units": { "description": "The minimum number of items for which this price will be used.", "format": "double", "nullable": true, "type": "number" }, "price": { "description": "The Retail price of the product.", "format": "double", "type": "number" }, "price_book_id": { "description": "The ID of the Price Book this product belongs to.", "type": "string" }, "product_id": { "description": "The ID of the associated product.", "type": "string" }, "retail_tax": { "description": "The retail tax", "format": "double", "type": "number" }, "rounding": { "description": "The format for the rounding", "type": "string" }, "tax_id": { "description": "The id for the tax rate", "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "version": { "format": "int64", "type": "integer" } }, "required": [ "price", "product_id", "tax_id" ], "title": "Price Book Product", "type": "object", "x-examples": { "example-1": { "adjustment": -1.7976931348623157e+308, "adjustment_type": "string", "created_at": "string", "default_display_price": -1.7976931348623157e+308, "deleted_at": "string", "discount": -1.7976931348623157e+308, "id": "string", "loyalty_value": -1.7976931348623157e+308, "max_units": -1.7976931348623157e+308, "min_units": -1.7976931348623157e+308, "price": -1.7976931348623157e+308, "price_book_id": "string", "product_id": "string", "retail_tax": -1.7976931348623157e+308, "rounding": "string", "tax_id": "string", "updated_at": "string", "version": 123 } } }, "PriceBookProductCollection": { "properties": { "data": { "description": "An array of Price Book objects wrapped in a top level `data` object.", "items": { "$ref": "#/components/schemas/PriceBookProduct" }, "type": "array" } }, "required": [ "data" ], "title": "Price Book Product Collection", "type": "object" }, "PriceBookProductIdCollection": { "properties": { "data": { "description": "An array of Price Book ids", "properties": { "price_book_product_ids": { "description": "An array of price book product ids to be deleted from the given Price Book.", "items": { "type": "string" }, "type": "array" } }, "required": [ "price_book_product_ids" ], "type": "object" } }, "title": "Price Book Product ID Collection", "type": "object" }, "PriceBookProductsUpdateResponse": { "properties": { "data": { "properties": { "message": { "description": "Confirmation message that the request to add/update/delete PriceBookProducts was successful.", "type": "string" } }, "type": "object" } }, "title": "Price Book Products Update Response", "type": "object" }, "PriceBookResponse": { "properties": { "data": { "$ref": "#/components/schemas/PriceBook" } }, "title": "Price Book Response", "type": "object" }, "PriceBookUpdateRequest": { "properties": { "customer_group_ids": { "items": { "description": "The ID of the customer group.", "type": "string" }, "type": "array" }, "name": { "description": "Price Book name.", "type": "string" }, "outlet_ids": { "items": { "description": "The ID of an outlet for which the Price Book should be used.", "type": "string" }, "type": "array" }, "restrict_to_platform": { "description": "`\"0\"` - all platforms, `\"1\"` - in store, `\"2\"` - ecommerce.", "nullable": true, "type": "string" }, "valid_from": { "description": "The date when the Price Book becomes valid (active).", "nullable": true, "type": "string" }, "valid_to": { "description": "The date when the Price Book becomes invalid (inactive).", "nullable": true, "type": "string" } }, "required": [ "customer_group_ids", "name", "outlet_ids" ], "title": "Price Book Update Request", "type": "object" }, "Product": { "properties": { "account_code": { "description": "???", "nullable": true, "type": "string" }, "account_code_purchase": { "description": "???", "nullable": true, "type": "string" }, "active": { "description": "Indicated whether the Product is active.", "type": "boolean" }, "attributes": { "description": "A list of attributes", "items": { "$ref": "#/components/schemas/ProductAttribute" }, "type": "array" }, "brand": { "$ref": "#/components/schemas/BrandSample" }, "brand_id": { "description": "The brand ID.", "format": "UUID", "nullable": true, "type": "string" }, "button_order": { "description": "???", "type": "integer" }, "categories": { "description": "A list of tag objects.", "items": { "$ref": "#/components/schemas/Tag" }, "type": "array" }, "composite_bom": { "description": "A bill of materials object. This field is only relevant for composite products. It is a map of product ids to the quantity of each product that is needed to make up the composite product.", "type": "object" }, "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "customizations": { "description": "A list of product family customization input fields.", "items": { "type": "object" }, "type": "array" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "description": { "description": "A detailed description of the Product. **Note** Can contain HTML.", "nullable": true, "type": "string" }, "dimensions_unit": { "description": "Unit of measurement for product dimensions. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "enum": [ "IN", "CM", "MM", "YD" ], "nullable": true, "type": "string" }, "family_id": { "description": "This is a family identifier. All members of a product family will have the same identifier. In the future, this will replace the variant_parent_id as the family group identifier. This field is currently read-only.", "format": "UUID", "type": "string" }, "handle": { "description": "Product handle. **Note:** Variants share the same handle.", "type": "string" }, "has_inventory": { "description": "Indicates whether inventory is being tracked for the Product.", "type": "boolean" }, "has_variants": { "description": "Indicated whether product has variants.", "type": "boolean" }, "height": { "description": "Product height. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "nullable": true, "type": "number" }, "id": { "description": "Auto-generated object ID.", "format": "UUID", "type": "string" }, "image_thumbnail_url": { "type": "string" }, "image_url": { "type": "string" }, "images": { "description": "A list of image objects.", "items": { "$ref": "#/components/schemas/ImageSample" }, "type": "array" }, "is_composite": { "description": "Indicates whether the Product is a composite one.", "type": "boolean" }, "length": { "description": "Product length. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "nullable": true, "type": "number" }, "loyalty_amount": { "description": "The amount of loyalty the customer receives buying this item.", "nullable": true, "type": "number" }, "name": { "description": "Product name.", "type": "string" }, "outlet_taxes": { "description": "A list of outlet-specific tax overrides. Only present when non-empty.", "items": { "type": "object" }, "type": "array" }, "packaging": { "description": "Packaging relationships for this product.", "properties": { "breaks_into": { "description": "Packages this product can be broken into.", "items": { "$ref": "#/components/schemas/ProductPackage" }, "type": "array" }, "made_from": { "description": "Packages this product can be made from.", "items": { "$ref": "#/components/schemas/ProductPackage" }, "type": "array" } }, "type": "object" }, "price_excluding_tax": { "description": "The price before tax is added.", "type": "number" }, "price_including_tax": { "description": "The price including all the relevant taxes.", "nullable": true, "type": "number" }, "product_category": { "allOf": [ { "$ref": "#/components/schemas/ProductCategory" } ], "description": "The product category this product belongs to.", "nullable": true, "type": "object" }, "product_codes": { "description": "A list of product code objects.", "items": { "$ref": "#/components/schemas/ProductCode" }, "type": "array" }, "product_suppliers": { "description": "A list of product supplier objects.", "items": { "$ref": "#/components/schemas/ProductSupplier" }, "type": "array" }, "product_type_id": { "description": "The product type.", "format": "UUID", "nullable": true, "type": "string" }, "sku": { "description": "Product sku. **Note:** Should be unique.", "type": "string" }, "skuImages": { "description": "A list of variant-level image objects.", "items": { "$ref": "#/components/schemas/ImageSample" }, "type": "array" }, "source": { "description": "Indicates the origin of the product. Can be USER, SHOPIFY.", "type": "string" }, "source_id": { "description": "External reference ID.", "nullable": true, "type": "string" }, "source_variant_id": { "description": "Secondary external reference ID.", "nullable": true, "type": "string" }, "supplier": { "$ref": "#/components/schemas/SupplierSample" }, "supplier_code": { "description": "Supplier code.", "nullable": true, "type": "string" }, "supplier_id": { "description": "The supplier ID.", "format": "UUID", "nullable": true, "type": "string" }, "supply_price": { "description": "Default supply price,", "format": "double", "type": "number" }, "tag_ids": { "description": "An array of tag IDs associated with this product.", "items": { "description": "A tag ID.", "format": "UUID", "type": "string" }, "type": "array" }, "tax_category": { "description": "Tax category identifier for the product.", "nullable": true, "type": "string" }, "type": { "$ref": "#/components/schemas/ProductTypeSample" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "variant_count": { "description": "The number of variants for this product.", "nullable": true, "type": "integer" }, "variant_name": { "description": "The name of the variant product.", "nullable": true, "type": "string" }, "variant_options": { "description": "A list of variant option objects.", "items": { "$ref": "#/components/schemas/VariantOption" }, "type": "array" }, "variant_parent_id": { "description": "This value is set if a Product is a variant of another Product.", "format": "UUID", "nullable": true, "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" }, "weight": { "description": "Product weight. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "nullable": true, "type": "number" }, "weight_unit": { "description": "Unit of measurement for product weight. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "enum": [ "CT", "G", "OZ", "LB", "KG" ], "nullable": true, "type": "string" }, "width": { "description": "Product width. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "nullable": true, "type": "number" } }, "required": [ "id", "handle", "name", "sku", "active", "is_composite", "has_inventory", "has_variants", "version", "variant_options", "categories", "tag_ids", "images", "skuImages", "attributes", "product_codes", "product_suppliers", "packaging", "customizations", "price_including_tax", "price_excluding_tax" ], "title": "Product", "type": "object", "x-examples": { "Example": { "data": [ { "active": true, "attributes": [], "button_order": 0, "categories": [ { "id": "0242ac11-0002-11ea-e346-ec1fed46e828", "name": "Tag1", "version": 150517 } ], "created_at": "2020-09-01T06:54:03+00:00", "description": "Variant Product", "dimensions_unit": "CM", "handle": "Variant8", "has_inventory": true, "has_variants": false, "height": 4, "id": "0242ac12-0002-11e9-e8c4-659494e33101", "image_thumbnail_url": "https://local-demo.dev.vendhq.works/images/placeholder/product/no-image-white-thumb.png", "image_url": "https://local-demo.dev.vendhq.works/images/placeholder/product/no-image-white-standard.png", "images": [], "is_active": true, "is_composite": false, "length": 2, "name": "Variant + Tag", "price_excluding_tax": 34.78261, "price_including_tax": 40, "sku": "1000033", "source": "USER", "supply_price": 10, "tag_ids": [ "0242ac11-0002-11ea-e346-ec1fed46e828" ], "updated_at": "2020-09-01T06:54:23+00:00", "variant_name": "Variant + Tag / L / Green / Silk", "variant_options": [ { "id": "0242ac11-0002-11ea-e346-ec1feb758875", "name": "Size", "value": "L" }, { "id": "0242ac11-0002-11ea-e346-ec1feb761422", "name": "Colour", "value": "Green" }, { "id": "0242ac11-0002-11ea-e346-ec1feb7696a4", "name": "Fabric", "value": "Silk" } ], "variant_parent_id": "0242ac12-0002-11e9-e8c4-659494e33138", "version": 150578, "weight": 1, "weight_unit": "KG", "width": 3 } ] } } }, "ProductAddImage": { "properties": { "index": { "description": "The position of the image in the list of images.", "format": "int64", "type": "integer" }, "location": { "description": "The location of the given file. Depending on the image provider type. s3 - The s3 key for s3 transfers. url - A full URL for url based images. product-image - the image id from an existing product image. sku-image - the image id from an existing variant image.\n", "type": "string" }, "type": { "description": "The image provider type.", "enum": [ "s3", "url", "product-image", "sku-image" ], "type": "string" } }, "required": [ "type", "location" ], "title": "Add Image", "type": "object" }, "ProductAddInventoryPayload": { "properties": { "current_amount": { "description": "Current inventory at a given outlet.", "format": "double", "type": "number" }, "outlet_id": { "description": "The outlet the inventory is for.", "format": "UUID", "type": "string" }, "reorder_amount": { "description": "The default of the quantity for auto-filled inventory orders.", "type": "number" }, "reorder_point": { "description": "Quantity below which the product should be included in the auto-filled inventory orders. use -1 to clear the reorder point.", "type": "number" } }, "required": [ "outlet_id", "current_amount" ], "title": "Product Add Inventory Payload", "type": "object" }, "ProductAddOutletTax": { "properties": { "outlet_id": { "description": "The outlet the tax is for.", "format": "UUID", "type": "string" }, "tax_id": { "description": "The tax id associated with this outlet.", "format": "UUID", "type": "string" } }, "required": [ "outlet_id", "tax_id" ], "title": "Product Add Outlet Tax", "type": "object" }, "ProductAddVariantPayload": { "properties": { "all_outlets_tax": { "description": "Only used for tax inclusive stores.", "properties": { "is_default": { "description": "Is this the default tax.", "type": "boolean" }, "tax_id": { "description": "The tax id associated with this product.", "format": "UUID", "type": "string" } }, "type": "object" }, "dimensions_unit": { "description": "Unit of measurement for product dimensions. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "enum": [ "IN", "CM", "MM", "YD" ], "type": "string" }, "height": { "description": "Product height. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "type": "number" }, "images": { "description": "A list of image objects.", "items": { "$ref": "#/components/schemas/ProductAddImage" }, "type": "array" }, "inventory": { "items": { "$ref": "#/components/schemas/ProductAddInventoryPayload" }, "type": "array" }, "length": { "description": "Product length. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "type": "number" }, "outlet_taxes": { "description": "Only used for tax exclusive stores.", "items": { "$ref": "#/components/schemas/ProductAddOutletTax" }, "type": "array" }, "price_excluding_tax": { "description": "The price before tax is added.", "type": "number" }, "price_including_tax": { "description": "The price including all the relevant taxes.", "type": "number" }, "product_codes": { "items": { "$ref": "#/components/schemas/ProductCode" }, "type": "array" }, "product_suppliers": { "items": { "$ref": "#/components/schemas/ProductSupplier" }, "type": "array" }, "sku": { "description": "Product sku. This value should be included in the `product_codes` array. If it's not, it will be added automatically.", "type": "string" }, "supplier_code": { "description": "Supplier code.", "type": "string" }, "supply_price": { "description": "Default supply price.", "format": "double", "type": "number" }, "variant_definitions": { "description": "The attributes associated with this variant. e.g. Size.", "items": { "$ref": "#/components/schemas/VariantAttribute" }, "type": "array" }, "weight": { "description": "Product weight. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "type": "number" }, "weight_unit": { "description": "Unit of measurement for product weight. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "enum": [ "CT", "G", "OZ", "LB", "KG" ], "type": "string" }, "width": { "description": "Product width. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "type": "number" } }, "title": "Add Product Variant Payload", "type": "object" }, "ProductAttribute": { "properties": { "name": { "description": "The key for the attribute.", "type": "string" }, "value": { "description": "The value for the attribute.", "type": "string" } }, "required": [ "name", "value" ], "title": "Attribute", "type": "object" }, "ProductCategory": { "properties": { "category_path": { "items": { "$ref": "#/components/schemas/ProductCategoryPath" }, "type": "array" }, "id": { "description": "The category id", "format": "uuid", "type": "string" }, "leaf_category": { "description": "True if the category does not have any more children (i.e. leaf).", "type": "boolean" }, "name": { "description": "The name of the category", "type": "string" }, "parent_category_id": { "description": "The parent category id, or null if its root category.", "format": "uuid", "type": "string" }, "root_category_id": { "description": "The category id of the root of the category tree. If category is a root, this will be itself.", "format": "uuid", "type": "string" } }, "type": "object" }, "ProductCategoryPath": { "properties": { "id": { "description": "Object id of the Product Type in the path.", "type": "string" }, "name": { "description": "The Product Type name.", "type": "string" } }, "required": [ "id", "name" ], "title": "Product Category Path", "type": "object" }, "ProductCode": { "properties": { "code": { "description": "The sku code being added.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "type": { "description": "The type of code being added.", "enum": [ "CUSTOM", "EAN", "ISBN", "ITF", "JAN", "UPC" ], "type": "string" } }, "required": [ "code", "id" ], "title": "ProductCode", "type": "object" }, "ProductCollection": { "properties": { "data": { "description": "An array of Product objects wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/Product" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "Product Collection", "type": "object" }, "ProductCreateBody": { "properties": { "account_code_purchase": { "description": "The code used to attribute the purchase of the product to a specific account for the Xero integration.", "type": "string" }, "account_code_sale": { "description": "The code used to attribute the sales of the product to a specific account for the Xero integration.", "type": "string" }, "all_outlets_tax": { "description": "Only used for tax inclusive stores.", "properties": { "is_default": { "description": "Is this the default tax.", "type": "boolean" }, "tax_id": { "description": "The tax id associated with this product.", "format": "UUID", "type": "string" } }, "type": "object" }, "attributes": { "$ref": "#/components/schemas/Attribute" }, "brand_id": { "description": "The brand ID.", "format": "UUID", "type": "string" }, "composite": { "description": "A list of composite components.", "items": { "$ref": "#/components/schemas/Composite" }, "type": "array" }, "description": { "description": "A detailed description of the Product. **Note** Can contain HTML.", "type": "string" }, "dimensions_unit": { "description": "Unit of measurement for product dimensions. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "enum": [ "IN", "CM", "MM", "YD" ], "type": "string" }, "handle": { "description": "Product handle.", "type": "string" }, "height": { "description": "Product height. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "type": "number" }, "images": { "description": "A list of image objects.", "items": { "$ref": "#/components/schemas/ProductAddImage" }, "type": "array" }, "inventory": { "items": { "$ref": "#/components/schemas/ProductAddInventoryPayload" }, "type": "array" }, "is_active": { "description": "Indicated whether the Product is active.", "type": "boolean" }, "length": { "description": "Product length. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "type": "number" }, "loyalty_amount": { "description": "The amount of loyalty the customer receives buying this item.", "type": "number" }, "name": { "description": "Product name. **Note:** Variants share the same name.", "type": "string" }, "outlet_taxes": { "description": "Only used for tax exclusive stores.", "items": { "$ref": "#/components/schemas/ProductAddOutletTax" }, "type": "array" }, "price_excluding_tax": { "description": "The price before tax is added.", "type": "number" }, "price_including_tax": { "description": "The price including all the relevant taxes.", "type": "number" }, "product_category_id": { "description": "The product category.", "format": "UUID", "type": "string" }, "product_codes": { "items": { "$ref": "#/components/schemas/ProductCode" }, "type": "array" }, "product_suppliers": { "items": { "$ref": "#/components/schemas/ProductSupplier" }, "type": "array" }, "product_type_id": { "description": "The product category. **Note** Product types are now product categories.", "format": "UUID", "type": "string" }, "sku": { "description": "Product sku. **Note:** Should be unique.", "type": "string" }, "source": { "description": "Indicates the origin of the product. Can be USER, SHOPIFY.", "type": "string" }, "source_id": { "description": "External reference ID.", "type": "string" }, "source_variant_id": { "description": "Secondary external reference ID.", "type": "string" }, "supplier_code": { "description": "Supplier code.", "type": "string" }, "supplier_id": { "description": "The supplier ID.", "format": "UUID", "type": "string" }, "supply_price": { "description": "Default supply price.", "format": "double", "type": "number" }, "tag_ids": { "description": "An array of tag IDs associated with this product.", "items": { "description": "A tag ID.", "format": "UUID", "type": "string" }, "type": "array" }, "variants": { "items": { "$ref": "#/components/schemas/ProductAddVariantPayload" }, "type": "array" }, "weight": { "description": "Product weight. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "type": "number" }, "weight_unit": { "description": "Unit of measurement for product weight. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "enum": [ "CT", "G", "OZ", "LB", "KG" ], "type": "string" }, "width": { "description": "Product width. These are used to calculate variable shipping rates for stores using Lightspeed eCom.", "type": "number" } }, "required": [ "name" ], "title": "Product", "type": "object" }, "ProductInfoComponent": { "properties": { "charge_interval_unit": { "example": "month", "type": "string" }, "component_name": { "example": "Additional Register(s) Support", "type": "string" }, "quantity": { "example": 2, "format": "int64", "type": "integer" }, "unit_price": { "example": 20, "format": "double", "type": "number" } }, "title": "ProductInfoComponent contain partner product component info.", "type": "object" }, "ProductPackage": { "properties": { "amount": { "description": "The quantity involved in the packaging relationship.", "type": "number" }, "destination_product_id": { "description": "The ID of the destination product (present in breaks_into entries).", "format": "UUID", "type": "string" }, "package_id": { "description": "Auto-generated package ID.", "format": "UUID", "type": "string" }, "source_product_id": { "description": "The ID of the source product (present in made_from entries).", "format": "UUID", "type": "string" } }, "required": [ "package_id", "amount" ], "type": "object" }, "ProductResponse": { "properties": { "data": { "$ref": "#/components/schemas/Product" } }, "required": [ "data" ], "title": "Product Response", "type": "object" }, "ProductSupplier": { "properties": { "code": { "description": "The code associated with this supplier.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "format": "UUID", "type": "string" }, "price": { "description": "The price associated with this supplier.", "format": "double", "nullable": true, "type": "number" }, "product_id": { "description": "The ID of the product.", "format": "UUID", "type": "string" }, "supplier_id": { "description": "The ID of the supplier.", "format": "UUID", "nullable": true, "type": "string" }, "supplier_name": { "description": "The name of the supplier.", "nullable": true, "type": "string" } }, "required": [ "id", "product_id", "supplier_id", "supplier_name" ], "title": "Product Supplier", "type": "object" }, "ProductType": { "properties": { "category_path": { "description": "The path of this product type (now product category) in the hierarchy.", "items": { "$ref": "#/components/schemas/ProductCategoryPath" }, "type": "array" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "leaf_category": { "description": "Is this product type (now product category) at the bottom of the hierarchy.", "type": "boolean" }, "name": { "description": "The Product Type name.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "name", "id", "leaf_category" ], "title": "Product Type", "type": "object" }, "ProductTypeCollection": { "properties": { "data": { "description": "An array of Product Type objects wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/ProductType" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "Product Type Collection", "type": "object" }, "ProductTypeResponse": { "properties": { "data": { "$ref": "#/components/schemas/ProductType" } }, "title": "Product Type Response", "type": "object" }, "ProductTypeSample": { "nullable": true, "properties": { "category_path": { "description": "The path of this product type (now product category) in the hierarchy.", "items": { "$ref": "#/components/schemas/ProductCategoryPath" }, "type": "array" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "leaf_category": { "description": "Is this product type (now product category) at the bottom of the hierarchy.", "type": "boolean" }, "name": { "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "title": "Product Type Sample", "type": "object" }, "ProductUpdate21Request": { "properties": { "common": { "description": "Information to update to the product family. For variants, this will update the fields to all variants in the family.", "properties": { "account_code_purchase": { "description": "The code used to attribute the purchase (cost) of the product to a specific account for the Xero integration.", "type": "string" }, "account_code_sale": { "description": "The code used to attribute the sales of the product to a specific account for the Xero integration.", "type": "string" }, "brand_id": { "description": "The brand ID that the product is associated to. To remove the brand from the product, please provide empty value \"\".", "type": "string" }, "description": { "description": "Product description.", "type": "string" }, "name": { "description": "Product name", "type": "string" }, "product_category_id": { "description": "The product category ID tha the product is associated to. A product can only be associated to the last level (leaf) category.\nTo remove the product category from the product, please provide empty value \"\".\nProduct category was previously known as product types.\n", "type": "string" }, "product_suppliers": { "description": "A full list of suppliers and its details that are associated to the product family.\nThe order of the supplier listed in this list will reflect the supplier's order in the product.\nThe first supplier is the default supplier.\nIf do not wish to override the code and price that may be custom per variant, just provide the id.\n", "items": { "$ref": "#/components/schemas/ProductUpdate21Supplier" }, "type": "array" }, "tag_ids": { "description": "The full list of tag ids that the product is associated to. To remove all tags, please provide empty list.", "items": { "type": "string" }, "type": "array" }, "track_inventory": { "description": "True to enable inventory tracking for product. This will updating of inventory details such as manual adjustments and reorder details.", "type": "boolean" }, "variant_attributes": { "description": "A full list of the variant attributes for the product family.\nThe order of the variant attributes in this list will reflect the order of the attribute on the variant. Maximum three attributes.\n", "items": { "properties": { "attribute_id": { "description": "The ID of attribute represented at the specified position in the list.", "type": "string" } }, "type": "object" }, "type": "array" } }, "type": "object" }, "details": { "description": "Information to update to the product. For variants, this will update the fields for the individual variant product of this request only.", "properties": { "all_outlets_tax": { "description": "Set the tax on a product for tax inclusive store.", "properties": { "tax_id": { "description": "The selected custom tax ID. Leave blank (\"\") to use the default tax.", "type": "string" } }, "type": "object" }, "composite_components": { "description": "A full list of composite components.", "items": { "properties": { "product_id": { "description": "The ID of the component product.", "format": "uuid", "type": "string" }, "quantity": { "description": "The quantity of the component product.", "type": "number" } }, "required": [ "product_id", "quantity" ], "type": "object" }, "type": "array" }, "dimensions_unit": { "description": "The unit for any height, width, or length provided.", "enum": [ "IN", "CM", "MM", "YD" ], "type": "string" }, "height": { "description": "The height of the product. If provided, dimensions_unit for this value must also be provided.", "type": "number" }, "inventory": { "description": "A list of inventory outlet information to update.", "items": { "properties": { "current_amount": { "description": "Current inventory quantity of the product at the given outlet.", "type": "number" }, "outlet_id": { "description": "The outlet ID.", "type": "string" }, "reorder_amount": { "description": "The default of the quantity for auto-filled inventory orders.", "type": "number" }, "reorder_point": { "description": "Quantity below which the product should be included in the auto-filled inventory orders. use -1 to clear the reorder point.", "type": "number" } }, "required": [ "outlet_id" ], "type": "object" }, "type": "array" }, "is_active": { "description": "True to enable Sell on POS, false to disable.", "type": "boolean" }, "length": { "description": "The length of the product. If provided, dimensions_unit for this value must also be provided.", "type": "number" }, "loyalty_amount": { "description": "The custom loyalty amount. -1 to use the default loyalty amount.", "type": "number" }, "outlet_taxes": { "description": "A list of outlet taxes to update on a product for tax exclusive store.", "items": { "properties": { "outlet_id": { "description": "The outlet ID to apply the tax.", "type": "string" }, "tax_id": { "description": "The selected custom tax ID. Leave blank (\"\") to use the default tax.", "type": "string" } }, "type": "object" }, "type": "array" }, "packaging": { "description": "Packaging this product belongs to.", "items": { "properties": { "amount": { "type": "number" }, "destination_product_id": { "format": "uuid", "type": "string" }, "source_product_id": { "format": "uuid", "type": "string" } }, "type": "object" }, "type": "array" }, "price_excluding_tax": { "description": "Price exclusive of tax. For tax exclusive store.", "type": "number" }, "price_including_tax": { "description": "Price inclusive of tax. For tax inclusive store.", "type": "number" }, "product_codes": { "description": "A full list of product codes for the product. The first product code is used as the default product code.", "items": { "properties": { "code": { "description": "The product code value.", "type": "string" }, "type": { "enum": [ "CUSTOM", "EAN", "ISBN", "ITF", "JAN", "UPC" ], "type": "string" } }, "required": [ "code" ], "type": "object" }, "type": "array" }, "product_suppliers": { "description": "A list of suppliers and its details if the supplier needs updating. The supplier referenced by this subset must be a supplier associated to the product family.\n", "items": { "$ref": "#/components/schemas/ProductUpdate21Supplier" }, "type": "array" }, "variant_attribute_values": { "description": "A list of values for the variant attributes defined for the product. The attributes used here must match the product family.", "items": { "properties": { "attribute_id": { "description": "The variant attribute id. This variant attribute must be an attribute on the product family.", "type": "string" }, "attribute_value": { "description": "The value for the variant attribute.", "type": "string" } }, "required": [ "attribute_id", "attribute_value" ], "type": "object" }, "type": "array" }, "weight": { "description": "The weight of the product. If provided, weight_unit for this value must also be provided.", "type": "number" }, "weight_unit": { "description": "The unit for the weight provided.", "enum": [ "CT", "G", "OZ", "LB", "KG" ], "type": "string" }, "width": { "description": "The width of the product. If provided, dimensions_unit for this value must also be provided.", "type": "number" } }, "type": "object" } }, "title": "Product Update 2.1 Request", "type": "object" }, "ProductUpdate21Supplier": { "properties": { "code": { "description": "The supplier's code or reference for the product. To remove the code, please provide empty value \"\".", "type": "string" }, "price": { "description": "The cost of supply for the product. -1 price will delete the price.", "type": "number" }, "supplier_id": { "description": "The supplier ID.", "type": "string" } }, "title": "Product Update 2.1 Product Supplier Request", "type": "object" }, "PromoCode": { "properties": { "code": { "description": "Code for use in the promotion.", "type": "string" }, "created_at": { "description": "Time the code was created.", "type": "string" }, "created_user": { "$ref": "#/components/schemas/User" }, "created_user_id": { "description": "Created User ID.", "type": "string" }, "group_name": { "description": "Name of the group.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "limit": { "description": "Redemption limit for this promotion.", "type": "integer" }, "promotion_id": { "description": "Promotion ID.", "type": "string" }, "redeemed": { "description": "Number of times this code has been redeemed.", "type": "integer" } }, "required": [ "code" ], "title": "Promotion Code", "type": "object", "x-examples": { "example-1": { "code": "string", "created_at": "string", "created_user": { "account_type": "cashier", "created_at": "string", "deleted_at": "string", "display_name": "string", "email": "user@example.com", "email_verified_at": "string", "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "image_source": "string", "images": { "original": "string", "sl": "string", "sm": "string", "ss": "string", "st": "string", "standard": "string", "thumb": "string" }, "is_primary_user": true, "permissions": [ "string" ], "restricted_outlet_id": "string", "restricted_outlet_ids": [ "497f6eca-6276-4993-bfeb-53cbbbba6f08" ], "seen_at": "string", "target_daily": 0, "target_monthly": 0, "target_weekly": 0, "updated_at": "string", "username": "string", "version": 0 }, "created_user_id": "string", "group_name": "string", "id": "string", "limit": 0, "promotion_id": "string", "redeemed": 0 } } }, "PromoCodeValidation": { "properties": { "promo_code": { "description": "The promo code itself.", "type": "string" }, "promo_code_id": { "description": "ID for the promo code.", "nullable": true, "type": "string" }, "promotion_id": { "description": "ID for the promotion.", "nullable": true, "type": "string" }, "status": { "description": "Status field for the promo code.", "type": "string" } }, "required": [ "promo_code", "status" ], "title": "Promo Code validation result", "type": "object" }, "PromoCodesMap": { "additionalProperties": { "description": "A map of promo codes to booleans.", "type": "boolean" }, "title": "Map of Promo Codes to booleans", "type": "object" }, "Promotion": { "description": "A Promotion defines rules and actions for discounting products as part of a sales promotion.", "properties": { "action": { "$ref": "#/components/schemas/Action" }, "add_promo_code": { "description": "A list of promo codes to associate with this promotion.", "items": { "$ref": "#/components/schemas/PromoCode" }, "type": "array" }, "channels": { "description": "A list of channels for the promotion. Can be `Register`, `Ecommerce`.", "items": { "type": "string" }, "type": "array" }, "condition": { "$ref": "#/components/schemas/Condition" }, "customer_group_ids": { "description": "A list of customer group IDs for the promotion.", "items": { "type": "string" }, "type": "array" }, "description": { "description": "A short description for the promotion.", "type": "string" }, "end_time": { "description": "The time the promotion ends, in UTC, e.g. `2006-01-02T15:04:05` (no timezone suffix).", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "loyalty_multiplier": { "description": "The loyalty multiplier for the promotion.", "format": "double", "type": "number" }, "name": { "description": "The name of the promotion.", "type": "string" }, "outlet_ids": { "description": "A list of outlet IDs for the promotion.", "items": { "type": "string" }, "type": "array" }, "promo_code_summary": { "$ref": "#/components/schemas/PromotionPromoCodeSummary" }, "start_time": { "description": "The time the promotion begins, in UTC, e.g. `2006-01-02T15:04:05` (no timezone suffix).", "type": "string" }, "status": { "description": "The status of the promotion.", "type": "string" }, "use_promo_code": { "description": "Whether or not this promotion uses promo codes.", "type": "boolean" } }, "required": [ "action", "condition", "name", "start_time", "use_promo_code" ], "title": "Promotion", "type": "object" }, "PromotionActivePromoCodesResponse": { "properties": { "data": { "$ref": "#/components/schemas/PromoCodesMap" } }, "title": "Promotion Promo Codes response", "type": "object" }, "PromotionCollection": { "properties": { "data": { "items": { "$ref": "#/components/schemas/PromotionResponse" }, "type": "array" } }, "title": "Promotion Collection", "type": "object" }, "PromotionDeletePromoCodesResponse": { "description": "An array of codes which were not deleted.", "items": { "type": "string" }, "title": "Promotion Promo Codes response", "type": "array" }, "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" }, "PromotionProductsResponse": { "properties": { "data": { "properties": { "action_products": { "description": "A list of product IDs that are required to fulfill the promotion action.", "items": { "$ref": "#/components/schemas/Product" }, "type": "array" }, "condition_products": { "description": "A list of product IDs that meet the promotion condition.", "items": { "$ref": "#/components/schemas/Product" }, "type": "array" } }, "type": "object" } }, "title": "Promotion Products response", "type": "object" }, "PromotionPromoCodeSummary": { "nullable": true, "properties": { "redeemed_amount": { "description": "The redeemed amount", "type": "integer" }, "total_promo_code": { "description": "The total for the promo code", "type": "integer" } }, "title": "Promotion Promo Code Summary", "type": "object" }, "PromotionPromoCodesResponse": { "properties": { "data": { "description": "An array of promotion promo codes.", "items": { "properties": { "code": { "type": "string" }, "created_at": { "format": "date-time", "type": "string" }, "created_user_id": { "type": "string" }, "group_name": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "limit": { "type": "integer" }, "promotion_id": { "type": "string" }, "redeemed": { "type": "integer" } }, "type": "object" }, "type": "array" } }, "title": "Promotion Promo Codes response" }, "PromotionResponse": { "description": "A Promotion defines rules and actions for discounting products as part of a sales promotion.", "properties": { "action": { "$ref": "#/components/schemas/Action" }, "add_promo_code": { "description": "A list of promo codes to associate with this promotion.", "items": { "$ref": "#/components/schemas/PromoCode" }, "type": "array" }, "channels": { "description": "A list of channels for the promotion. Can be `Register`, `Ecommerce`.", "items": { "type": "string" }, "type": "array" }, "combinable_with_coupon": { "description": "Whether this promotion can be combined with an online coupon.", "nullable": true, "type": "boolean" }, "condition": { "$ref": "#/components/schemas/Condition" }, "customer_group_ids": { "description": "A list of customer group IDs for the promotion.", "items": { "type": "string" }, "type": "array" }, "description": { "description": "A short description for the promotion.", "type": "string" }, "end_time": { "description": "The time the promotion ends, in UTC, e.g. `2006-01-02T15:04:05` (no timezone suffix).", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "loyalty_multiplier": { "description": "The loyalty multiplier for the promotion.", "format": "double", "nullable": true, "type": "number" }, "name": { "description": "The name of the promotion.", "type": "string" }, "online_channel_ids": { "description": "A list of online channel IDs for the promotion.", "items": { "type": "integer" }, "type": "array" }, "outlet_ids": { "description": "A list of outlet IDs for the promotion.", "items": { "type": "string" }, "nullable": true, "type": "array" }, "promo_code_summary": { "$ref": "#/components/schemas/PromotionPromoCodeSummary" }, "recurring_promotion": { "allOf": [ { "$ref": "#/components/schemas/RecurringPromotion" } ], "nullable": true, "type": "object" }, "show_potential": { "description": "Whether this promotion is shown as part of potential promotions.", "type": "boolean" }, "start_time": { "description": "The time the promotion begins, in UTC, e.g. `2006-01-02T15:04:05` (no timezone suffix).", "type": "string" }, "status": { "description": "The status of the promotion.", "type": "string" }, "use_promo_code": { "description": "Whether or not this promotion uses promo codes.", "type": "boolean" } }, "title": "Promotion response", "type": "object" }, "PurchaseOrder": { "properties": { "allocation_outlet_ids": { "items": { "type": "string" }, "type": "array" }, "cost_price_total": { "description": "Total cost represented as a decimal string.", "nullable": true, "type": "string" }, "costs": { "items": { "$ref": "#/components/schemas/PurchaseOrderCost" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "delivery_outlet_id": { "type": "string" }, "discounts": { "items": { "$ref": "#/components/schemas/PurchaseOrderDiscount" }, "type": "array" }, "due_at": { "format": "date-time", "nullable": true, "type": "string" }, "id": { "type": "string" }, "notes": { "nullable": true, "type": "string" }, "order_number": { "nullable": true, "type": "string" }, "quantity_total": { "description": "Total quantity represented as a decimal string.", "type": "string" }, "status": { "type": "string" }, "supplier_id": { "nullable": true, "type": "string" }, "supplier_invoice": { "nullable": true, "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "user_id": { "nullable": true, "type": "string" }, "version": { "format": "int64", "type": "integer" } }, "required": [ "id", "version", "user_id", "order_number", "notes", "delivery_outlet_id", "allocation_outlet_ids", "supplier_id", "supplier_invoice", "status", "due_at", "cost_price_total", "quantity_total", "created_at", "updated_at" ], "title": "Purchase Order", "type": "object" }, "PurchaseOrderCollectionResponse": { "example": { "data": [ { "allocation_outlet_ids": [], "cost_price_total": null, "created_at": "2026-04-01T12:00:00Z", "delivery_outlet_id": "6ba7b810-9dad-41d1-80b4-00c04fd430c8", "due_at": null, "id": "550e8400-e29b-41d4-a716-446655440000", "notes": null, "order_number": "PO-1001", "quantity_total": "10", "status": "OPEN", "supplier_id": "6ba7b811-9dad-41d1-80b4-00c04fd430c8", "supplier_invoice": null, "updated_at": "2026-04-01T12:00:00Z", "user_id": null, "version": 42 } ], "version": { "max": 42, "min": 42 } }, "properties": { "data": { "items": { "$ref": "#/components/schemas/PurchaseOrder" }, "type": "array" }, "version": { "$ref": "#/components/schemas/PurchaseOrderVersion" } }, "required": [ "data", "version" ], "title": "Purchase Order Collection Response", "type": "object" }, "PurchaseOrderCost": { "properties": { "amount": { "description": "Cost amount represented as a decimal string.", "type": "string" }, "created_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "purchase_order_delivery_id": { "nullable": true, "type": "string" }, "type": { "type": "string" }, "updated_at": { "format": "date-time", "type": "string" } }, "required": [ "id", "purchase_order_delivery_id", "type", "amount", "created_at", "updated_at" ], "title": "Purchase Order Cost", "type": "object" }, "PurchaseOrderDelivery": { "properties": { "cost_price_total": { "nullable": true, "type": "string" }, "costs": { "items": { "$ref": "#/components/schemas/PurchaseOrderCost" }, "type": "array" }, "created_at": { "format": "date-time", "type": "string" }, "discounts": { "items": { "$ref": "#/components/schemas/PurchaseOrderDiscount" }, "type": "array" }, "due_at": { "format": "date-time", "nullable": true, "type": "string" }, "id": { "type": "string" }, "invoice_date": { "format": "date-time", "nullable": true, "type": "string" }, "notes": { "nullable": true, "type": "string" }, "outlet_id": { "type": "string" }, "purchase_order_id": { "type": "string" }, "received_at": { "format": "date-time", "nullable": true, "type": "string" }, "received_quantity_total": { "type": "string" }, "status": { "type": "string" }, "supplier_invoice": { "nullable": true, "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "user_id": { "nullable": true, "type": "string" }, "version": { "format": "int64", "type": "integer" } }, "required": [ "id", "version", "purchase_order_id", "outlet_id", "user_id", "notes", "status", "due_at", "received_at", "invoice_date", "supplier_invoice", "cost_price_total", "received_quantity_total", "created_at", "updated_at" ], "title": "Purchase Order Delivery", "type": "object" }, "PurchaseOrderDeliveryCollectionResponse": { "example": { "data": [ { "cost_price_total": "25.00", "created_at": "2026-04-01T12:00:00Z", "due_at": null, "id": "550e8403-e29b-41d4-a716-446655440000", "invoice_date": null, "notes": null, "outlet_id": "6ba7b810-9dad-41d1-80b4-00c04fd430c8", "purchase_order_id": "550e8400-e29b-41d4-a716-446655440000", "received_at": null, "received_quantity_total": "0", "status": "DRAFT", "supplier_invoice": null, "updated_at": "2026-04-01T12:00:00Z", "user_id": null, "version": 3 } ], "version": { "max": 3, "min": 3 } }, "properties": { "data": { "items": { "$ref": "#/components/schemas/PurchaseOrderDelivery" }, "type": "array" }, "version": { "$ref": "#/components/schemas/PurchaseOrderVersion" } }, "required": [ "data", "version" ], "title": "Purchase Order Delivery Collection Response", "type": "object" }, "PurchaseOrderDeliveryLineItem": { "properties": { "allocations": { "items": { "$ref": "#/components/schemas/PurchaseOrderDeliveryLineItemAllocation" }, "type": "array" }, "components": { "items": { "$ref": "#/components/schemas/PurchaseOrderDeliveryLineItemComponent" }, "type": "array" }, "cost_price": { "nullable": true, "type": "string" }, "created_at": { "format": "date-time", "type": "string" }, "expected_quantity": { "type": "string" }, "id": { "type": "string" }, "product_id": { "type": "string" }, "purchase_order_delivery_id": { "type": "string" }, "purchase_order_line_item_id": { "type": "string" }, "received_quantity": { "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "version": { "format": "int64", "type": "integer" } }, "required": [ "id", "version", "purchase_order_delivery_id", "purchase_order_line_item_id", "product_id", "expected_quantity", "received_quantity", "cost_price", "allocations", "created_at", "updated_at" ], "title": "Purchase Order Delivery Line Item", "type": "object" }, "PurchaseOrderDeliveryLineItemAllocation": { "properties": { "expected_quantity": { "type": "string" }, "outlet_id": { "type": "string" }, "received_quantity": { "type": "string" } }, "required": [ "outlet_id", "expected_quantity", "received_quantity" ], "title": "Purchase Order Delivery Line Item Allocation", "type": "object" }, "PurchaseOrderDeliveryLineItemCollectionResponse": { "example": { "data": [ { "allocations": [ { "expected_quantity": "10", "outlet_id": "6ba7b810-9dad-41d1-80b4-00c04fd430c8", "received_quantity": "0" } ], "cost_price": "2.50", "created_at": "2026-04-01T12:00:00Z", "expected_quantity": "10", "id": "550e8404-e29b-41d4-a716-446655440000", "product_id": "550e8402-e29b-41d4-a716-446655440000", "purchase_order_delivery_id": "550e8403-e29b-41d4-a716-446655440000", "purchase_order_line_item_id": "550e8401-e29b-41d4-a716-446655440000", "received_quantity": "0", "updated_at": "2026-04-01T12:00:00Z", "version": 4 } ], "version": { "max": 4, "min": 4 } }, "properties": { "data": { "items": { "$ref": "#/components/schemas/PurchaseOrderDeliveryLineItem" }, "type": "array" }, "version": { "$ref": "#/components/schemas/PurchaseOrderVersion" } }, "required": [ "data", "version" ], "title": "Purchase Order Delivery Line Item Collection Response", "type": "object" }, "PurchaseOrderDeliveryLineItemComponent": { "properties": { "bom_quantity": { "type": "string" }, "component_product_id": { "type": "string" }, "cost_price": { "nullable": true, "type": "string" } }, "required": [ "component_product_id", "bom_quantity", "cost_price" ], "title": "Purchase Order Delivery Line Item Component", "type": "object" }, "PurchaseOrderDiscount": { "properties": { "amount": { "description": "Discount amount represented as a decimal string.", "type": "string" }, "created_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "purchase_order_delivery_id": { "nullable": true, "type": "string" }, "type": { "type": "string" }, "updated_at": { "format": "date-time", "type": "string" } }, "required": [ "id", "purchase_order_delivery_id", "type", "amount", "created_at", "updated_at" ], "title": "Purchase Order Discount", "type": "object" }, "PurchaseOrderLineItem": { "properties": { "allocations": { "items": { "$ref": "#/components/schemas/PurchaseOrderLineItemAllocation" }, "type": "array" }, "components": { "items": { "$ref": "#/components/schemas/PurchaseOrderLineItemComponent" }, "type": "array" }, "cost_price": { "nullable": true, "type": "string" }, "created_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "product_id": { "type": "string" }, "purchase_order_id": { "type": "string" }, "quantity": { "type": "string" }, "updated_at": { "format": "date-time", "type": "string" }, "version": { "format": "int64", "type": "integer" } }, "required": [ "id", "version", "purchase_order_id", "product_id", "quantity", "cost_price", "allocations", "created_at", "updated_at" ], "title": "Purchase Order Line Item", "type": "object" }, "PurchaseOrderLineItemAllocation": { "properties": { "outlet_id": { "type": "string" }, "quantity": { "type": "string" } }, "required": [ "outlet_id", "quantity" ], "title": "Purchase Order Line Item Allocation", "type": "object" }, "PurchaseOrderLineItemCollectionResponse": { "example": { "data": [ { "allocations": [ { "outlet_id": "6ba7b810-9dad-41d1-80b4-00c04fd430c8", "quantity": "10" } ], "cost_price": "2.50", "created_at": "2026-04-01T12:00:00Z", "id": "550e8401-e29b-41d4-a716-446655440000", "product_id": "550e8402-e29b-41d4-a716-446655440000", "purchase_order_id": "550e8400-e29b-41d4-a716-446655440000", "quantity": "10", "updated_at": "2026-04-01T12:00:00Z", "version": 7 } ], "version": { "max": 7, "min": 7 } }, "properties": { "data": { "items": { "$ref": "#/components/schemas/PurchaseOrderLineItem" }, "type": "array" }, "version": { "$ref": "#/components/schemas/PurchaseOrderVersion" } }, "required": [ "data", "version" ], "title": "Purchase Order Line Item Collection Response", "type": "object" }, "PurchaseOrderLineItemComponent": { "properties": { "bom_quantity": { "type": "string" }, "component_product_id": { "type": "string" }, "cost_price": { "nullable": true, "type": "string" } }, "required": [ "component_product_id", "bom_quantity", "cost_price" ], "title": "Purchase Order Line Item Component", "type": "object" }, "PurchaseOrderResponse": { "example": { "data": { "allocation_outlet_ids": [ "6ba7b810-9dad-41d1-80b4-00c04fd430c8" ], "cost_price_total": "25.00", "created_at": "2026-04-01T12:00:00Z", "delivery_outlet_id": "6ba7b810-9dad-41d1-80b4-00c04fd430c8", "due_at": "2026-04-15T10:00:00Z", "id": "550e8400-e29b-41d4-a716-446655440000", "notes": "Restock front outlet", "order_number": "PO-1001", "quantity_total": "10", "status": "OPEN", "supplier_id": "6ba7b811-9dad-41d1-80b4-00c04fd430c8", "supplier_invoice": null, "updated_at": "2026-04-01T12:00:00Z", "user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "version": 42 } }, "properties": { "data": { "$ref": "#/components/schemas/PurchaseOrder" } }, "required": [ "data" ], "title": "Purchase Order Response", "type": "object" }, "PurchaseOrderVersion": { "properties": { "max": { "description": "Highest version number in the payload.", "format": "int64", "nullable": true, "type": "integer" }, "min": { "description": "Lowest version number in the payload.", "format": "int64", "nullable": true, "type": "integer" } }, "required": [ "min", "max" ], "title": "Purchase Order Version", "type": "object" }, "Quote": { "properties": { "created_at": { "type": "string" }, "customer_id": { "type": "string" }, "deleted_at": { "nullable": true, "type": "string" }, "expired_at": { "type": "string" }, "grand_total": { "type": "number" }, "id": { "type": "string" }, "loyalty": { "nullable": true, "type": "number" }, "note": { "nullable": true, "type": "string" }, "outlet_id": { "type": "string" }, "products": { "items": { "$ref": "#/components/schemas/QuoteProduct" }, "type": "array" }, "register_id": { "type": "string" }, "retailer_id": { "type": "string" }, "sales_ids": { "items": { "nullable": true, "type": "string" }, "nullable": true, "type": "array" }, "short_code": { "type": "string" }, "status": { "type": "string" }, "total_price": { "type": "number" }, "total_tax": { "type": "number" }, "updated_at": { "type": "string" }, "user_id": { "type": "string" } }, "type": "object", "x-examples": { "example-1": { "created_at": "2022-10-18T10:50:32.11075Z", "customer_id": "0242ac11-0002-11ea-eb21-8ab06c5364f5", "deleted_at": null, "expired_at": "2022-11-17T10:50:32.110752Z", "grand_total": 40, "id": "1582323235375263744", "loyalty": 0.1, "note": "", "outlet_id": "0242ac12-0002-11e9-e8c4-659494e196e3", "products": [], "register_id": "0242ac12-0002-11e9-e8c4-659494e17cee", "retailer_id": "00000000-0001-0001-0001-000000000001", "sales_ids": [ "3bb73da7-100e-b22d-11ed-3e4f2ef71242", "3bb73da7-100e-b9fb-11ed-3e524bc97ad5" ], "short_code": "1", "status": "CREATED", "total_price": 34.78261, "total_tax": 5.21739, "updated_at": "2022-10-18T10:50:32.255336Z", "user_id": "08002782-0c90-11e6-e3ed-117ec127b1ca" } } }, "QuoteProduct": { "properties": { "discount": { "type": "number" }, "id": { "type": "string" }, "note": { "type": "string" }, "price": { "type": "number" }, "product_id": { "type": "string" }, "product_tax_components": { "items": { "$ref": "#/components/schemas/QuotesProductsTaxComponents" }, "type": "array" }, "quantity": { "type": "integer" }, "quote_id": { "type": "string" }, "salesperson_id": { "type": "string" }, "sequence": { "type": "integer" }, "tax": { "type": "number" }, "tax_id": { "type": "string" } }, "type": "object", "x-examples": { "example-1": { "discount": 20, "id": "1582323235375263747", "note": "", "price": 17.3913, "product_id": "0242ac12-0002-11e9-e8c4-659494e33153", "product_tax_components": [ { "id": "1582323235375263748", "quote_product_id": "1582323235375263747", "rate_id": "06b96260-3efa-11ed-a218-0242ac110002", "total_tax": 2.6087 } ], "quantity": 1, "quote_id": "1582323235375263744", "salesperson_id": "08002782-0c90-11e6-e3ed-117ec127b1ca", "sequence": 1, "tax": 2.6087, "tax_id": "00000000-0002-0002-0002-000000000003" } } }, "QuotesCollection": { "properties": { "HasNext": { "type": "boolean" }, "Quotes": { "items": { "$ref": "#/components/schemas/Quote" }, "nullable": true, "type": "array" }, "TotalCount": { "type": "integer" } }, "type": "object", "x-examples": { "example-1": { "HasNext": false, "Quotes": [ { "created_at": "2022-10-18T10:50:32.11075Z", "customer_id": "0242ac11-0002-11ea-eb21-8ab06c5364f5", "deleted_at": null, "expired_at": "2022-11-17T10:50:32.110752Z", "grand_total": 20, "id": "1582323235375263744", "loyalty": 0.1, "note": "", "outlet_id": "0242ac12-0002-11e9-e8c4-659494e196e3", "products": [ { "discount": 20, "id": "1582323235375263745", "note": "", "price": 17.3913, "product_id": "0242ac12-0002-11e9-e8c4-659494e33153", "product_tax_components": [ { "id": "1582323235375263748", "quote_product_id": "1582323235375263747", "rate_id": "06b96260-3efa-11ed-a218-0242ac110002", "total_tax": 2.6087 } ], "quantity": 1, "quote_id": "1582323235375263744", "salesperson_id": "08002782-0c90-11e6-e3ed-117ec127b1ca", "sequence": 0, "tax": 2.6087, "tax_id": "00000000-0002-0002-0002-000000000003" } ], "register_id": "0242ac12-0002-11e9-e8c4-659494e17cee", "retailer_id": "00000000-0001-0001-0001-000000000001", "sales_ids": null, "short_code": "1", "status": "CREATED", "total_price": 34.78261, "total_tax": 5.21739, "updated_at": "2022-10-18T10:50:32.255336Z", "user_id": "08002782-0c90-11e6-e3ed-117ec127b1ca" } ], "TotalCount": 1 } } }, "QuotesProductsTaxComponents": { "properties": { "id": { "type": "string" }, "quote_product_id": { "type": "string" }, "rate_id": { "type": "string" }, "total_tax": { "type": "number" } }, "type": "object", "x-examples": { "example-1": { "id": "1582323235375263746", "quote_product_id": "1582323235375263745", "rate_id": "06b96260-3efa-11ed-a218-0242ac110002", "total_tax": 2.6087 } } }, "RateRule": { "description": "Rule that applies to a rate.\nE.g.: Tax rate that applies for clothing and footwear costing $90 or more.", "properties": { "tax_code": { "description": "Label assigned to a product which indicates the tax obligation.", "enum": [ "vend_clothing_footwear" ], "example": "vend_clothing_footwear", "type": "string" }, "type": { "description": "Type of rule to apply.", "enum": [ "threshold" ], "example": "threshold", "type": "string" }, "value": { "description": "An optional value that can be used for the rule.", "example": 90, "type": "number" } }, "required": [ "tax_code", "type" ], "title": "Rate Rule", "type": "object" }, "ReceiptSettings": { "properties": { "created_at": { "format": "date-time", "type": "string" }, "default_type": { "description": "Derived from the internal type field. \"Standard Invoice\" maps to \"a4\"; all other types (80-90mm thermal, Standard Thermal Receipt, etc.) map to \"thermal\".\n", "enum": [ "thermal", "a4" ], "type": "string" }, "deleted_at": { "format": "date-time", "nullable": true, "type": "string" }, "id": { "type": "string" }, "locale": { "description": "BCP 47 language tag (e.g. \"en-NZ\")", "type": "string" }, "name": { "type": "string" }, "settings": { "$ref": "#/components/schemas/ReceiptSettingsData" }, "style_id": { "type": "integer" }, "updated_at": { "format": "date-time", "type": "string" }, "version": { "format": "int64", "type": "integer" } }, "required": [ "id", "name", "default_type", "version", "created_at", "updated_at" ], "type": "object" }, "ReceiptSettingsCollection": { "properties": { "data": { "items": { "$ref": "#/components/schemas/ReceiptSettings" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "type": "object" }, "ReceiptSettingsData": { "additionalProperties": true, "description": "Additional boolean display attributes (e.g. DisplayCustomerCode, DisplayProductName, DisplayCustomerDetails, etc.) may appear as extra fields sourced from the displayAttributes map stored per receipt template.\n", "properties": { "DisplayLineDiscount": { "default": true, "type": "boolean" }, "DisplayLoyaltyEarned": { "default": true, "description": "Only present when loyalty is enabled", "type": "boolean" }, "DisplayLoyaltyLink": { "default": true, "description": "Only present when loyalty is enabled", "type": "boolean" }, "DisplayServedBy": { "default": true, "type": "boolean" }, "DisplayTax": { "default": true, "type": "boolean" }, "EmailSubject": { "type": "string" }, "Footer": { "type": "string" }, "Header": { "type": "string" }, "LabelChange": { "default": "Change", "type": "string" }, "LabelInvoiceTitle": { "default": "Receipt / Tax Invoice", "type": "string" }, "LabelLineDiscount": { "default": "Less discount ", "type": "string" }, "LabelLoyalty": { "description": "Only present when loyalty is enabled", "type": "string" }, "LabelLoyaltyEarned": { "default": "Loyalty earned", "description": "Only present when loyalty is enabled", "type": "string" }, "LabelLoyaltyLink": { "description": "Only present when loyalty is enabled. Value includes retailer name.", "type": "string" }, "LabelLoyaltyTotal": { "default": "Loyalty", "description": "Only present when loyalty is enabled", "type": "string" }, "LabelServedBy": { "default": "Served by:", "type": "string" }, "LabelSubTotal": { "default": "Subtotal", "type": "string" }, "LabelTax": { "default": "Total Tax", "type": "string" }, "LabelTipAmount": { "default": "Tip", "type": "string" }, "LabelToPay": { "default": "TO PAY", "type": "string" }, "LabelTotal": { "default": "TOTAL", "type": "string" }, "LogoURL": { "type": "string" } }, "type": "object" }, "RecurringPromotion": { "nullable": true, "properties": { "end_time": { "description": "The time the recurring promotion ends.", "type": "string" }, "id": { "description": "Recurring Promotion ID.", "type": "string" }, "occurrence_type": { "description": "The occurrence type of the recurring promotion.", "type": "string" }, "recurring_promotion_occurrences": { "description": "A list of the promotion occurrences.", "items": { "$ref": "#/components/schemas/RecurringPromotionOccurrence" }, "type": "array" }, "start_time": { "description": "The time the recurring promotion begins.", "type": "string" } }, "title": "Recurring Promotion", "type": "object" }, "RecurringPromotionOccurrence": { "properties": { "day_of_week": { "description": "The day of week of the recurring promotion.", "type": "string" }, "id": { "description": "Recurring Promotion occurrence ID.", "type": "string" } }, "title": "Recurring Promotion occurrence", "type": "object" }, "Register": { "properties": { "ask_for_note_on_save": { "description": "`0` for **Never**, `1` for **On Save/Layby/Account/Return**, `2` for **Always**.", "format": "double", "type": "number" }, "ask_for_user_on_sale": { "type": "boolean" }, "button_layout_id": { "description": "Register ID.", "nullable": true, "type": "string" }, "cash_managed_payment_type_id": { "description": "**internal** The ID of the payment type used for cash management transactions in this regsiter.", "nullable": true, "type": "string" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "email_receipt": { "description": "Indicates whether a receipt should be emailed after a sale.", "type": "boolean" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "invoice_prefix": { "description": "Invoice number prefix.", "type": "string" }, "invoice_sequence": { "description": "The numeric part of the last issued invoice.", "format": "double", "type": "number" }, "invoice_suffix": { "description": "Invoice number suffix.", "type": "string" }, "is_open": { "description": "Indicates if the Register is currently open.", "type": "boolean" }, "name": { "description": "The Register name.", "type": "string" }, "outlet_id": { "description": "A valid ID of an Outlet that this register is associated with.", "type": "string" }, "print_note_on_receipt": { "type": "boolean" }, "print_receipt": { "description": "Indicates whether a receipt should be printed after a sale.", "type": "boolean" }, "receipt_template_id": { "description": "Default receipt template ID used for this register.", "type": "string" }, "register_close_time": { "description": "Date/time when the register was closed. Null if currently open.", "nullable": true, "type": "string" }, "register_open_sequence_id": { "description": "**internal** The ID of the current register closure object.", "nullable": true, "type": "string" }, "register_open_time": { "description": "Date/time when the register was open. Always in UTC.", "nullable": true, "type": "string" }, "show_discounts_on_receipts": { "type": "boolean" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "title": "Register", "type": "object" }, "RegisterClosePaymentType": { "properties": { "payment_type_id": { "description": "The ID of the Payment Type.", "type": "string" }, "total": { "description": "The Total amount for this Payment Type.", "type": "string" } }, "title": "Register Close Payment Type", "type": "object" }, "RegisterCloseRequest": { "properties": { "payments": { "description": "An array Register objects wrapped in a top level `data` object.", "items": { "$ref": "#/components/schemas/RegisterClosePaymentType" }, "type": "array" } }, "title": "Register Close Request", "type": "object" }, "RegisterCollection": { "properties": { "data": { "description": "An array Register objects wrapped in a top level `data` object.", "items": { "$ref": "#/components/schemas/Register" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "title": "Register Collection", "type": "object" }, "RegisterOpenRequest": { "properties": { "register_open_time": { "description": "Date/time when the register was open. Always in UTC.", "type": "string" } }, "title": "Register Open Request", "type": "object" }, "RegisterPaymentSummaryPaymentType": { "properties": { "payment_type_id": { "description": "The ID of the Payment Type.", "format": "uuid", "type": "string" }, "payment_type_name": { "description": "The name of the Payment Type.", "type": "string" }, "total": { "description": "The Total amount for this Payment Type.", "type": "string" } }, "title": "Register Payments Summary Payment Type", "type": "object" }, "RegisterPaymentsSummary": { "properties": { "payments": { "items": { "$ref": "#/components/schemas/RegisterPaymentSummaryPaymentType" }, "type": "array" } }, "title": "Register Payments Summary", "type": "object" }, "RegisterPaymentsSummaryResponse": { "properties": { "data": { "$ref": "#/components/schemas/RegisterPaymentsSummary" } }, "title": "Register Payments Summary Response", "type": "object" }, "RegisterResponse": { "properties": { "data": { "$ref": "#/components/schemas/Register" } }, "title": "Register Response", "type": "object" }, "RemoteBusinessRule": { "description": "The configuration of a remote business rule.", "properties": { "created_at": { "description": "The creation timestamp in UTC.", "format": "date-time", "readOnly": true, "type": "string" }, "id": { "example": "1239349157873029120", "readOnly": true, "type": "string" }, "oauth_application_id": { "description": "The ID of the application the created the remote business rule.", "example": "043eec148ae192a2d88b1d658e8084a3", "readOnly": true, "type": "string" }, "url": { "example": "https://retailer.com/vend-business-rule", "format": "uri", "type": "string" } }, "required": [ "url" ], "title": "Remote Business Rules", "type": "object" }, "RemoteBusinessRuleParams": { "description": "The parameters that can be passed to the create remote rule API.", "properties": { "url": { "example": "https://retailer.com/vend-business-rule", "format": "uri", "type": "string" } }, "required": [ "url" ], "title": "Remote Rule Parameters", "type": "object" }, "ReorderPointEntry": { "description": "A reorder point entry returned by the upsert endpoint.", "properties": { "method": { "description": "The reorder strategy in use for this product/outlet pair.", "enum": [ "FIXED", "MIN_MAX" ], "type": "string" }, "outlet_id": { "description": "The ID of the outlet the reorder point applies to.", "format": "uuid", "type": "string" }, "product_id": { "description": "The ID of the product the reorder point applies to.", "format": "uuid", "type": "string" }, "reorder_amount": { "description": "The static quantity to order. Present only when `method` is `FIXED`.", "type": "number" }, "reorder_point": { "description": "The minimum inventory level below which a product is automatically suggested for reordering.", "type": "number" }, "reorder_target": { "description": "The desired stock level to restore to when reordering. Present only when `method` is `MIN_MAX`.", "type": "number" } }, "required": [ "product_id", "outlet_id", "method", "reorder_point" ], "title": "Reorder Point Entry", "type": "object" }, "ReorderPointFixedRequestItem": { "additionalProperties": false, "description": "A reorder point entry using the `FIXED` method.", "properties": { "method": { "description": "The reorder method. Must be `FIXED`.", "enum": [ "FIXED" ], "type": "string" }, "outlet_id": { "description": "The ID of the outlet the reorder point applies to.", "format": "uuid", "maxLength": 36, "type": "string" }, "product_id": { "description": "The ID of the product the reorder point applies to.", "format": "uuid", "maxLength": 36, "type": "string" }, "reorder_amount": { "description": "The static quantity to order each time the reorder point is triggered.", "type": "number" }, "reorder_point": { "description": "The minimum inventory level below which a product is automatically suggested for reordering.", "type": "number" } }, "required": [ "product_id", "outlet_id", "method", "reorder_point", "reorder_amount" ], "title": "Reorder Point Fixed Request Item", "type": "object" }, "ReorderPointMinMaxRequestItem": { "additionalProperties": false, "description": "A reorder point entry using the `MIN_MAX` method.", "properties": { "method": { "description": "The reorder method. Must be `MIN_MAX`.", "enum": [ "MIN_MAX" ], "type": "string" }, "outlet_id": { "description": "The ID of the outlet the reorder point applies to.", "format": "uuid", "maxLength": 36, "type": "string" }, "product_id": { "description": "The ID of the product the reorder point applies to.", "format": "uuid", "maxLength": 36, "type": "string" }, "reorder_point": { "description": "The minimum inventory level below which a product is automatically suggested for reordering.", "type": "number" }, "reorder_target": { "description": "The desired stock level to restore to when reordering.", "type": "number" } }, "required": [ "product_id", "outlet_id", "method", "reorder_point", "reorder_target" ], "title": "Reorder Point Min/Max Request Item", "type": "object" }, "ReorderPointsCollection": { "description": "The response wrapper for the reorder points upsert endpoint.", "properties": { "data": { "description": "An array of upserted reorder point entries, in the same order as the request.", "items": { "$ref": "#/components/schemas/ReorderPointEntry" }, "type": "array" } }, "required": [ "data" ], "title": "Reorder Points Collection", "type": "object" }, "RequestCollectionResponse": { "description": "A collection of request log records wrapped in the top-level data object.", "properties": { "data": { "items": { "$ref": "#/components/schemas/RequestLog" }, "type": "array" } }, "title": "Request Logs response", "type": "object" }, "RequestLog": { "description": "An object representing a single request and response made to a channel.", "properties": { "error": { "description": "f an error occurred with the request, such as an inability to resolve a hostname, connect or TLS errors, this will be recorded here. Only errors with the ability to make the request are logged here, rather than errors when interpreting a response.", "nullable": true, "type": "string" }, "grouping_id": { "description": "An identifier used to group together requests that occurred together as part of the same job or Lightspeed Retail (X-Series) API request.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "occurred_at": { "description": "An RFC3339 representation of the time at which the request was logged.", "format": "date-time", "type": "string" }, "request": { "description": "A dump of the full request information in HTTP format, including headers and any request body.", "type": "string" }, "request_method": { "description": "The HTTP method used to make the request.", "enum": [ "GET", "POST", "PUT", "DELETE" ], "type": "string" }, "response": { "description": "A dump of the full response information in HTTP format, including headers and any response body.", "type": "string" }, "status_code": { "description": "The HTTP status code received in the response.", "type": "number" } }, "required": [ "grouping_id", "id", "occurred_at", "request", "request_method", "response" ], "title": "Request Log", "type": "object" }, "RequestSingleResponse": { "description": "A single request log record wrapped in the top-level data object.", "properties": { "data": { "$ref": "#/components/schemas/RequestLog" } }, "title": "Request Log response", "type": "object" }, "Retailer": { "description": "A Retailer record.", "properties": { "account_status": { "description": "Status of this account.", "type": "string" }, "account_type": { "description": "Type of this account.", "type": "string" }, "activated_at": { "description": "Activation timestamp, e.g. '2019-08-15T23:05:28Z'. This field can be null, e.g. for 'demo' retailers.", "nullable": true, "type": "string" }, "country": { "description": "2-letter country code for this Retailer.", "type": "string" }, "created_at": { "description": "Creation timestamp, e.g. '2019-08-15T23:05:28Z'", "type": "string" }, "culture": { "description": "Culture (language name) for this Retailer.", "type": "string" }, "currency": { "$ref": "#/components/schemas/RetailerCurrency" }, "discount_product_id": { "description": "A reference to the default discount product used for sale-level discounts.", "format": "uuid", "type": "string" }, "domain_prefix": { "description": "The subdomain of vendhq.com for this retailer.", "type": "string" }, "embedded_barcode_option": { "description": "Which value, if any, is embedded in scanned barcodes for this Retailer.", "enum": [ "none", "price", "weight" ], "type": "string" }, "enable_line_item_consolidation": { "description": "Whether the Retailer has enabled consolidation of duplicate line items on a sale.", "type": "boolean" }, "gift_cards": { "properties": { "enabled": { "description": "Whether the Retailer has enabled Gift Cards.", "type": "boolean" }, "never_enabled": { "description": "Whether the Retailer has _never_ had Gift Cards enabled. Can be used to indicate whether historical Gift Card data exists.", "type": "boolean" } }, "type": "object" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "loyalty": { "properties": { "claim_url": { "description": "URL for this Retailer's Loyalty plan.", "type": "string" }, "enabled": { "description": "Whether Loyalty has been enabled.", "type": "boolean" }, "ratio": { "description": "Ratio of Loyalty Points.", "type": "number" }, "send_welcome_email": { "description": "Denotes Whether the Retailer's Loyalty plan is configured to send Welcome emails.", "type": "boolean" } }, "type": "object" }, "name": { "description": "Unique name for this Retailer.", "type": "string" }, "no_tax_group_id": { "description": "A reference to the default 0% rate tax used for tax-free line items.", "format": "uuid", "type": "string" }, "on_account": { "description": "On Account payment settings for this Retailer.", "properties": { "default_limit": { "description": "Default On Account credit limit applied to customers, or null if no default is set.", "nullable": true, "type": "number" } }, "type": "object" }, "sku_sequence": { "properties": { "enabled": { "description": "Whether the Retailer has enabled auto-generation of SKUs, in a numeric sequence.", "type": "boolean" }, "value": { "description": "The current value of the auto-generated SKU.", "type": "integer" } }, "type": "object" }, "sso_enabled": { "description": "Whether Single Sign-On has been enabled for this Retailer.", "type": "boolean" }, "store_credit": { "description": "Whether the Retailer has enabled Store Credit.", "type": "boolean" }, "store_url": { "description": "URL for the store itself.", "type": "string" }, "tax_exclusive": { "description": "Whether Prices should be interpreted as Tax-Exclusive.", "type": "boolean" }, "timezone": { "description": "Default Timezone for retailer - e.g. Pacific/Auckland. NOTE: timezones can vary between Outlets.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "type": "string" } }, "title": "Retailer", "type": "object" }, "RetailerCurrency": { "properties": { "code": { "description": "3-letter Currency Code for this Retailer.", "type": "string" }, "symbol": { "description": "Currency Symbol for this Retailer.", "type": "string" } }, "title": "Retailer Currency", "type": "object" }, "RetailerResponse": { "description": "A Retailer record wrapped in the top-level data object.", "properties": { "data": { "$ref": "#/components/schemas/Retailer" } }, "title": "Retailer response", "type": "object" }, "Role": { "properties": { "id": { "description": "Auto-generated object ID.", "type": "string" }, "name": { "description": "The Role name.", "type": "string" }, "system_role_id": { "description": "A system role id of the Role. Will be either '100', '200', or '300'.", "type": "string" } }, "title": "Role", "type": "object" }, "Sale": { "description": "Sale object", "properties": { "_metadata": { "$ref": "#/components/schemas/SaleResponseMetadata" }, "adjustments": { "description": "Collection of aggregated adjustments.", "items": { "$ref": "#/components/schemas/SaleResponseAdjustment" }, "type": "array" }, "attributes": { "description": "Attributes for this sale.", "items": { "type": "string" }, "type": "array" }, "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "customer_id": { "description": "The ID of the customer associated with this sale.", "format": "uuid", "type": "string" }, "date": { "description": "Sale timestamp in UTC.", "type": "string" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "type": "string" }, "ecom_custom_charges": { "description": "Collection of eCom custom charges associated with the sale.", "items": { "$ref": "#/components/schemas/EcomCustomCharge" }, "type": "array" }, "external_applications": { "description": "External applications associated with the sale.", "items": { "$ref": "#/components/schemas/SaleExternalApplication" }, "type": "array" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "invoice_number": { "description": "Invoice number which if provided, should use the prefix and suffix defined for the register.", "type": "string" }, "line_items": { "description": "Collection of line items.", "items": { "$ref": "#/components/schemas/SaleResponseLineItem" }, "type": "array" }, "note": { "description": "Sale Note.", "type": "string" }, "payments": { "description": "Collection of payments.", "items": { "$ref": "#/components/schemas/SaleResponsePayment" }, "type": "array" }, "receipt_number": { "description": "The receipt number for the sale.", "type": "string" }, "return": { "$ref": "#/components/schemas/SaleReturn" }, "short_code": { "description": "Short, unique code used for loyalty tracking purposes.", "type": "string" }, "source": { "$ref": "#/components/schemas/SaleResponseSource" }, "state": { "description": "State of the sale.", "enum": [ "parked", "pending", "voided", "closed" ], "type": "string" }, "taxes": { "description": "Collection of taxes.", "items": { "$ref": "#/components/schemas/SaleResponseTax" }, "type": "array" }, "totals": { "$ref": "#/components/schemas/SaleTotals" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" } }, "title": "Sale", "type": "object" }, "SaleAdjustment": { "properties": { "amount": { "$ref": "#/components/schemas/AdjustmentAmount" }, "name": { "description": "The name of the adjustment.", "type": "string" }, "source": { "$ref": "#/components/schemas/AdjustmentSource" }, "type": { "description": "The type of the adjustment.", "enum": [ "NON_CASH_FEE", "DISCOUNT", "TIP" ], "type": "string" } }, "required": [ "type" ], "title": "Sale Adjustment", "type": "object" }, "SaleAuthor": { "properties": { "id": { "description": "The ID of the user (cashier) who created the sale.", "format": "uuid", "type": "string" } }, "title": "Sale Author", "type": "object" }, "SaleCollection": { "properties": { "data": { "description": "An array of Sales wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/Sale" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "title": "Sale Collection", "type": "object" }, "SaleCreateResponse": { "properties": { "data": { "$ref": "#/components/schemas/Sale" } }, "title": "Sale Create Response", "type": "object" }, "SaleExternalApplication": { "properties": { "application_id": { "description": "ID of the external application.", "type": "string" }, "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "external_id": { "description": "ID from the external application.", "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "version": { "description": "Version of the external application record.", "type": "string" } }, "title": "Sale External Application", "type": "object" }, "SaleLineItem": { "properties": { "_metadata": { "$ref": "#/components/schemas/LineItemMetadata" }, "attributes": { "description": "Additional line item attributes.", "items": { "$ref": "#/components/schemas/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": "#/components/schemas/LineItemPricing" }, "product": { "$ref": "#/components/schemas/LineItemProduct" }, "quantity": { "description": "Quantity of products for the line item.", "format": "double", "type": "number" }, "source": { "$ref": "#/components/schemas/LineItemSource" }, "status": { "description": "If defined as `CONFIRMED` for pending sales, the line item will be added as **read-only**.", "type": "string" }, "tax": { "$ref": "#/components/schemas/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.", "nullable": true, "type": "string" }, "billing_address_token": { "description": "The token of the billing address to use for this payment. Required when billing_address_id is provided.", "nullable": true, "type": "string" }, "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": "#/components/schemas/PaymentSource" }, "type": { "$ref": "#/components/schemas/PaymentTypeConfig" } }, "required": [ "amount", "type" ], "title": "Sale Payment", "type": "object" }, "SalePricing": { "properties": { "adjustments": { "description": "Adjustments.", "items": { "$ref": "#/components/schemas/SaleAdjustment" }, "type": "array" } }, "title": "Sale Pricing", "type": "object" }, "SaleRequest": { "allOf": [ { "$ref": "#/components/schemas/SaleRequestBase" }, { "properties": { "id": { "description": "User-provided sale ID. If not included, one will be generated.", "format": "uuid", "type": "string" } }, "type": "object" } ], "description": "Editable attributes of the sale.", "title": "Sale Request" }, "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", "example": [ "onaccount" ], "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.", "example": "2009-11-10T23:00:00Z", "type": "string" }, "fulfillment_details": { "description": "Fulfillment details for DISPATCH or PICKUP fulfillments.", "items": { "$ref": "#/components/schemas/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": "#/components/schemas/SaleLineItem" }, "type": "array" }, "note": { "description": "A note on the sale entered by the cashier.", "type": "string" }, "payments": { "description": "Payments.", "items": { "$ref": "#/components/schemas/SalePayment" }, "type": "array" }, "pricing": { "$ref": "#/components/schemas/SalePricing" }, "service_fields": { "properties": { "service_action": { "type": "string" }, "service_agenda": { "$ref": "#/components/schemas/DailyAgenda" }, "service_items": { "$ref": "#/components/schemas/ServiceItems" }, "service_line_items": { "description": "An array of service line items.", "items": { "$ref": "#/components/schemas/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": "#/components/schemas/SaleRequestSource" }, "state": { "description": "State of the sale.", "enum": [ "parked", "pending", "voided", "closed" ], "example": "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" }, "SaleResponse": { "properties": { "data": { "$ref": "#/components/schemas/Sale" } }, "title": "Sale Response", "type": "object" }, "SaleResponseAdjustment": { "description": "Sale-level adjustment totals compounded by adjustment type. E-commerce custom charge adjustments are returned separately in `ecom_custom_charges`.", "properties": { "adjustment_type": { "description": "The adjustment type, such as `NON_CASH_FEE` or `SURCHARGE`.", "type": "string" }, "name": { "description": "Display name from the first adjustment in the compounded adjustment group.", "type": "string" }, "tax_components": { "description": "Tax component totals for this adjustment group.", "items": { "$ref": "#/components/schemas/LineItemTaxComponentResponse" }, "type": "array" }, "total": { "description": "Sum of fixed, non-each adjustment values for this credit or debit adjustment group.", "format": "double", "type": "number" } }, "title": "Sale Response Adjustment", "type": "object" }, "SaleResponseLineItem": { "properties": { "_metadata": { "$ref": "#/components/schemas/LineItemResponseMetadata" }, "customizations": { "description": "Product customizations for this line item.", "items": { "$ref": "#/components/schemas/LineItemCustomization" }, "type": "array" }, "gift_card_number": { "description": "Gift card number if this line item is a gift card.", "type": "string" }, "id": { "description": "The ID of this line item.", "format": "uuid", "type": "string" }, "note": { "description": "Line item note.", "type": "string" }, "pricing": { "$ref": "#/components/schemas/LineItemResponsePricing" }, "product": { "$ref": "#/components/schemas/LineItemProductDetails" }, "promotions": { "description": "Promotions applied to this line item.", "items": { "$ref": "#/components/schemas/LineItemPromotion" }, "type": "array" }, "quantity": { "description": "Quantity of products for the line item.", "format": "double", "type": "number" }, "return": { "$ref": "#/components/schemas/LineItemReturn" }, "salesperson_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" }, "source": { "$ref": "#/components/schemas/LineItemResponseSource" }, "status": { "description": "If defined as `CONFIRMED` for pending sales, the line item will be added as **read-only**.", "type": "string" }, "surcharges": { "description": "Collection of surcharges associated with the line item.", "items": { "$ref": "#/components/schemas/LineItemSurcharge" }, "type": "array" }, "tax": { "$ref": "#/components/schemas/LineItemResponseTax" } }, "title": "Sale Response Line Item", "type": "object" }, "SaleResponseMetadata": { "properties": { "complete_open_sequence_id": { "description": "The sequence ID of the register open at the time the sale was completed.", "type": "string" }, "has_unsynced_on_account_payments": { "description": "Whether the sale has unsynced on-account payments.", "type": "boolean" }, "version": { "description": "Monotonically increasing version number of the sale.", "type": "integer" }, "xero_reference": { "description": "Xero invoice reference ID. Only editable for `ONACCOUNT` sales.", "type": "string" } }, "title": "Sale Response Metadata", "type": "object" }, "SaleResponsePayment": { "properties": { "_metadata": { "$ref": "#/components/schemas/PaymentResponseMetadata" }, "amount": { "description": "Payment amount.", "format": "double", "type": "number" }, "billing_address_id": { "description": "The ID of the billing address associated with this payment.", "format": "uuid", "type": "string" }, "date": { "description": "Payment date in UTC.", "type": "string" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "type": "string" }, "external_applications": { "description": "External applications associated with the payment.", "items": { "$ref": "#/components/schemas/PaymentExternalApplication" }, "type": "array" }, "external_attributes": { "description": "External attributes for the payment.", "items": { "$ref": "#/components/schemas/PaymentExternalAttribute" }, "type": "array" }, "id": { "description": "Auto-generated payment ID.", "format": "uuid", "type": "string" }, "source": { "$ref": "#/components/schemas/PaymentResponseSource" }, "surcharge": { "$ref": "#/components/schemas/PaymentSurcharge" }, "type": { "$ref": "#/components/schemas/PaymentTypeDetails" } }, "title": "Sale Response Payment", "type": "object" }, "SaleResponseSource": { "properties": { "author": { "$ref": "#/components/schemas/SaleAuthor" }, "id": { "description": "The ID of the sale on the client side or another system where the sale was originally created.", "type": "string" }, "outlet_id": { "description": "The ID of the outlet where the sale was created.", "format": "uuid", "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" } }, "title": "Sale Response Source", "type": "object" }, "SaleResponseTax": { "properties": { "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "tax": { "description": "The total tax value for this tax.", "format": "double", "type": "number" } }, "title": "Sale Response Tax", "type": "object" }, "SaleReturn": { "properties": { "is_return": { "description": "Indicates whether this sale is a return.", "type": "boolean" }, "original_sale_id": { "description": "Reference ID to a different sale if this sale was created as a return.", "type": "string" }, "return_sale_ids": { "description": "IDs of return sales created from this sale.", "items": { "type": "string" }, "type": "array" } }, "title": "Sale Return", "type": "object" }, "SaleSurcharge": { "properties": { "amount": { "description": "Surcharge amount.", "format": "double", "type": "number" }, "rule": { "description": "Specifies the rule of the surcharge to be applied. Multiple rules will be consolidated under \"n rates\".", "type": "string" } }, "title": "Sale Surcharge", "type": "object" }, "SaleTotals": { "properties": { "loyalty": { "description": "Total loyalty value for this sale.", "format": "double", "type": "number" }, "price": { "description": "Total price for this sale, tax exclusive.", "format": "double", "type": "number" }, "price_incl_tax": { "description": "Total price for this sale, tax inclusive.", "format": "double", "type": "number" }, "surcharge": { "description": "Total surcharge value for this sale.", "format": "double", "type": "number" }, "tax": { "description": "Total tax value for this sale.", "format": "double", "type": "number" } }, "title": "Sale Totals", "type": "object" }, "SaleUpdateRequest": { "allOf": [ { "$ref": "#/components/schemas/SaleRequestBase" } ], "description": "Editable attributes of the sale for an update operation. The sale ID is provided in the URL.", "title": "Sale Update Request" }, "SearchResponse": { "properties": { "data": { "description": "A collection of objects of one of the supported types: sales, products or customers.", "items": { "type": "object" }, "type": "array" } }, "title": "Search Response", "type": "object" }, "SerialNumber": { "properties": { "code": { "description": "The actual serial number value.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "line_item_id": { "description": "The ID of the sale line item where this serial number was sold, or null.", "format": "uuid", "nullable": true, "type": "string" }, "outlet_id": { "description": "The ID of the outlet where the serial number is located.", "format": "uuid", "type": "string" }, "product_id": { "description": "The ID of the product associated with the serial number.", "format": "uuid", "type": "string" }, "sale_id": { "description": "The ID of the sale where this serial number was sold, or null.", "format": "uuid", "nullable": true, "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "title": "SerialNumber", "type": "object" }, "SerialNumberCollection": { "properties": { "data": { "description": "An array of Serial Numbers wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/SerialNumber" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "title": "Serial Number Collection", "type": "object" }, "SerialNumberRequest": { "properties": { "code": { "description": "The actual serial number value.", "type": "string" }, "outlet_id": { "description": "The ID of the outlet where the serial number is located.", "format": "uuid", "type": "string" }, "product_id": { "description": "The ID of the product associated with the serial number.", "format": "uuid", "type": "string" } }, "required": [ "code", "outlet_id", "product_id" ], "title": "Request to create a sale", "type": "object" }, "SerialNumberResponse": { "properties": { "data": { "$ref": "#/components/schemas/SerialNumber" } }, "title": "Serial Number Response", "type": "object" }, "ServiceItems": { "properties": { "item_details": { "$ref": "#/components/schemas/ItemDetails" }, "location": { "type": "string" } }, "title": "ServiceItems", "type": "object" }, "ServiceNote": { "properties": { "body": { "type": "string" }, "createdAt": { "type": "string" }, "id": { "type": "string" }, "is_visible_to_customer": { "description": "Whether the note should be printed in the service receipt or not", "type": "boolean" }, "location": { "deprecated": true, "description": "Deprecated: Use top-level location field on ServiceOrder instead. Location where the service will be performed", "type": "string" }, "serviceId": { "type": "string" }, "serviceStatus": { "deprecated": true, "type": "number" }, "user": { "$ref": "#/components/schemas/User" }, "userId": { "type": "string" } }, "title": "ServiceNote", "type": "object", "x-stoplight": { "id": "2fu3rgyr0q1gp" } }, "ServiceOrder": { "nullable": true, "properties": { "agenda": { "$ref": "#/components/schemas/DailyAgenda" }, "assigned_user_id": { "type": "string" }, "created_at": { "type": "string" }, "id": { "type": "string" }, "line_items": { "description": "Collection of line items associated with this service order.", "items": { "properties": { "fulfillment_type": { "description": "Type of fulfillment for this line item.", "type": "string" }, "gift_card": { "description": "Gift card information if applicable.", "nullable": true, "type": "object" }, "id": { "description": "The ID of this line item.", "type": "string" }, "is_picklist_pickable": { "description": "Indicates if this line item can be picked from a picklist.", "type": "boolean" }, "note": { "description": "Line item note.", "type": "string" }, "price_set": { "description": "Indicates whether the price was set manually.", "type": "boolean" }, "product_id": { "description": "The ID of the product associated with this line item.", "type": "string" }, "promotions": { "description": "Array of promotions applied to this line item.", "items": { "$ref": "#/components/schemas/PromotionDescription" }, "type": "array" }, "quantity": { "description": "Quantity of products for the line item.", "type": "string" }, "register_id": { "description": "The register ID associated with this line item.", "type": "string" }, "register_sequence_id": { "description": "The register sequence ID for this line item.", "type": "string" }, "sales_person_id": { "description": "The ID of the salesperson associated with this line item.", "type": "string" }, "sequence": { "description": "Order of the line item in the service order.", "type": "integer" }, "sku": { "description": "The SKU of the product.", "type": "string" }, "state": { "description": "State of the line item.", "type": "string" }, "tax_components": { "description": "Collection of tax components associated with the line item.", "items": { "$ref": "#/components/schemas/LineItemTaxComponent" }, "type": "array" }, "unit_discount": { "description": "Unit discount value for the line item.", "type": "string" }, "unit_loyalty": { "description": "Unit loyalty value for the line item.", "type": "string" }, "unit_price": { "description": "Unit price of the line item.", "type": "string" } }, "type": "object" }, "type": "array" }, "location": { "type": "string" }, "retailer_id": { "type": "string" }, "sale_id": { "type": "string" }, "status": { "type": "string" }, "status_details": { "$ref": "#/components/schemas/ServiceStatusDetails" }, "totals": { "description": "Financial totals for the service order.", "properties": { "is_sale_level_discount_percentage": { "description": "Indicates if the sale level discount is a percentage.", "type": "boolean" }, "sale_level_discount_value": { "description": "Total discount value applied at the sale level.", "type": "string" }, "sub_total": { "description": "Subtotal amount before taxes and discounts.", "type": "string" }, "total_amount": { "description": "Final total amount including all taxes and discounts.", "type": "string" }, "total_promotion": { "description": "Total promotion value applied.", "type": "string" }, "total_tax": { "description": "Total tax amount.", "type": "string" } }, "type": "object" }, "updated_at": { "nullable": true, "type": "string" }, "updated_by": { "type": "string" } }, "type": "object", "x-examples": { "agenda": { "date": "2025-08-27T04:00:00Z", "minutes_scheduled": 120 }, "assigned_user_id": "b1ed6158-f019-11e3-a0f5-b8ca3a64f8f4", "created_at": "2025-08-25T16:26:29.56854Z", "id": "1960015938019700736", "line_items": [ { "fulfillment_type": "UNSPECIFIED", "id": "dc8fcea9-e4eb-47b1-9994-fa7fa8d10f53", "is_picklist_pickable": false, "note": "", "price_set": false, "product_id": "ced180dd-1234-47ae-b16e-149897b26681", "quantity": 1, "register_id": "06e94082-ed4f-11ed-fd41-fef5ad8737fa", "register_sequence_id": "0698ab21-5f72-11f0-f6d9-785ab008ba49", "sequence": 0, "sku": "10026", "state": "CONFIRMED", "tax_components": [], "unit_discount": 0, "unit_loyalty": 0, "unit_price": 15 } ], "location": "Service Bay 2", "retailer_id": "06e94082-ed4f-11ed-fd41-fef5ad4ffc39", "sale_id": "6872a358-0089-89ae-11f0-81cfbf9b0ca1", "status": "NEW", "status_details": { "created_at": "2025-08-25T16:26:29.56854Z", "display_name": "New", "display_order": 1, "id": "2038696150067306496", "retailer_id": "06e94082-ed4f-11ed-fd41-fef5ad4ffc39", "status_key": "NEW", "system_default": true, "updated_at": "2025-08-25T16:26:29.56854Z" }, "totals": { "is_sale_level_discount_percentage": false, "sale_level_discount_value": "0", "sub_total": "15", "total_amount": "16.95", "total_promotion": "0", "total_tax": "1.95" }, "updated_at": "2025-08-25T16:26:29.732308Z", "updated_by": "06e94082-ed4f-11ed-fd41-fef5ad8054af" } }, "ServiceOrderLineItem": { "allOf": [ { "$ref": "#/components/schemas/SaleLineItem" }, { "properties": { "promotions": { "items": { "$ref": "#/components/schemas/PromotionDescription" }, "type": "array" }, "tax_component": { "items": { "$ref": "#/components/schemas/LineItemTaxComponent" }, "type": "array" } }, "type": "object" } ], "title": "Service Order Line Item" }, "ServiceOrderRequest": { "description": "Request payload for creating a service order", "example": { "assigned_user_id": "b1ed6158-f019-11e3-a0f5-b8ca3a64f8f4", "customer_id": "06e35f89-3783-11e6-ec7e-13193f7bd2ed", "item": { "description": "Red mountain bike requiring brake service", "initial_condition": "Brakes not functioning properly", "item_id": "06e35f89-3783-11e6-ec7e-13193f7bd2ed", "item_name": "Mountain Bike", "serial_number": "MB2025-001" }, "location": "Service Bay 2", "notes": [ { "body": "Customer requested bike before the weekend", "created_at": "2026-01-27T10:00:00Z", "is_visible_to_customer": true }, { "body": "Internal note: Check brake fluid levels" } ], "outlet_id": "348fff91-8c43-4599-812b-13636760895a", "register_id": "b1e198a9-f019-11e3-a0f5-b8ca3a64f8f4", "status": "NEW" }, "properties": { "assigned_user_id": { "description": "The user assigned to work on the service order", "format": "uuid", "type": "string" }, "customer_id": { "description": "The customer associated with the service", "format": "uuid", "type": "string" }, "extra_fields": { "deprecated": true, "description": "Deprecated. Additional custom fields for the service order", "properties": { "location": { "deprecated": true, "description": "Deprecated: Use top-level location field instead. Location where the service will be performed", "type": "string" }, "note": { "deprecated": true, "description": "Deprecated: Use top-level Notes field instead. Additional note for the service order", "type": "string" } }, "type": "object" }, "item": { "description": "Service item and its details", "properties": { "description": { "description": "Item description", "type": "string" }, "initial_condition": { "description": "Item's initial condition", "type": "string" }, "item_id": { "description": "ID of an already existing item", "format": "uuid", "type": "string" }, "item_name": { "description": "Item name", "type": "string" }, "serial_number": { "description": "Item serial number", "type": "string" } }, "type": "object" }, "job_status_id": { "description": "The ID of a custom service status to assign to this order. When provided, overrides the `status` field.", "nullable": true, "type": "string" }, "location": { "description": "Location where the service will be performed", "type": "string" }, "notes": { "description": "Notes associated with the service order", "items": { "properties": { "body": { "description": "The body of the note", "type": "string" }, "created_at": { "description": "The date and time when the note was created (possible to pre-date the note)", "format": "date-time", "type": "string" }, "is_visible_to_customer": { "default": false, "description": "Whether the note is visible to customer (printed on the service receipt or not)", "type": "boolean" } }, "type": "object" }, "type": "array" }, "outlet_id": { "description": "The outlet of the service order", "format": "uuid", "type": "string" }, "register_id": { "description": "The register of the service order", "format": "uuid", "type": "string" }, "status": { "default": "NEW", "description": "The status of the service order", "type": "string" } }, "required": [ "outlet_id", "register_id", "customer_id" ], "type": "object" }, "ServiceStatusDetails": { "description": "Details of a custom service status assigned to a service order.", "nullable": true, "properties": { "created_at": { "description": "The date and time the status was created.", "format": "date-time", "type": "string" }, "display_name": { "description": "Human-readable name of the status.", "type": "string" }, "display_order": { "description": "The order in which this status appears in the UI. Null if not set.", "nullable": true, "type": "integer" }, "id": { "description": "The unique ID of the status.", "type": "string" }, "retailer_id": { "description": "The retailer this status belongs to.", "type": "string" }, "status_key": { "description": "The underlying key mapping this status to a system status (e.g. NEW, IN_PROGRESS).", "type": "string" }, "system_default": { "description": "Whether this is a system-managed default status.", "type": "boolean" }, "updated_at": { "description": "The date and time the status was last updated.", "format": "date-time", "type": "string" } }, "type": "object" }, "SetReorderPointsRequest": { "description": "An array of reorder point entries to upsert.", "items": { "discriminator": { "mapping": { "FIXED": "#/components/schemas/ReorderPointFixedRequestItem", "MIN_MAX": "#/components/schemas/ReorderPointMinMaxRequestItem" }, "propertyName": "method" }, "oneOf": [ { "$ref": "#/components/schemas/ReorderPointFixedRequestItem" }, { "$ref": "#/components/schemas/ReorderPointMinMaxRequestItem" } ] }, "maxItems": 1000, "minItems": 1, "title": "Set Reorder Points Request", "type": "array" }, "Shift": { "properties": { "created_at": { "description": "Creation timestamp in UTC.", "format": "date-time", "type": "string" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "retailer_id": { "description": "The ID of the retailer where the shift was started.", "format": "uuid", "type": "string" }, "time_in": { "description": "The time the shift started.", "format": "date-time", "type": "string" }, "time_out": { "description": "The time the shift ended.", "format": "date-time", "type": "string" }, "updated_at": { "description": "Updated at timestamp in UTC.", "format": "date-time", "type": "string" }, "updated_by": { "description": "The ID of the user that updated the shift.", "format": "uuid", "type": "string" }, "user_id": { "description": "The ID of the user who started the shift.", "format": "uuid", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "type": "object" }, "ShiftCollection": { "properties": { "data": { "description": "An array of Shifts wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/Shift" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "title": "Shift Collection", "type": "object" }, "StockAdjustment": { "description": "A recorded stock adjustment.", "properties": { "created_at": { "description": "The creation timestamp in RFC 3339 format.", "format": "date-time", "type": "string" }, "custom_inventory_adjustment_reason_id": { "description": "The ID of the custom reason. Present only when `reason` is `CUSTOM`; omitted otherwise.", "format": "uuid", "type": "string" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "outlet_id": { "description": "The ID of the outlet where the adjustment was recorded.", "format": "uuid", "type": "string" }, "product_id": { "description": "The ID of the product that was adjusted.", "format": "uuid", "type": "string" }, "quantity": { "description": "Quantity to adjust.", "type": "string" }, "reason": { "$ref": "#/components/schemas/StockAdjustmentReason" }, "updated_at": { "description": "The last update timestamp in RFC 3339 format.", "format": "date-time", "type": "string" }, "user_id": { "description": "The ID of the user who created the adjustment.", "format": "uuid", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "id", "user_id", "product_id", "outlet_id", "quantity", "reason", "created_at", "updated_at", "version" ], "title": "Stock Adjustment", "type": "object" }, "StockAdjustmentBatchResponse": { "description": "The response wrapper for a batch stock adjustment create.", "properties": { "data": { "description": "The stock adjustments that were created, in the same order as the request.", "items": { "$ref": "#/components/schemas/StockAdjustment" }, "type": "array" } }, "required": [ "data" ], "title": "Stock Adjustment Batch Response", "type": "object" }, "StockAdjustmentCollection": { "description": "A paginated list of stock adjustments.", "properties": { "data": { "description": "An array of stock adjustments.", "items": { "$ref": "#/components/schemas/StockAdjustment" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "Stock Adjustment Collection", "type": "object" }, "StockAdjustmentReason": { "description": "The reason for a stock adjustment.\n\nNegative reasons (require `quantity` < 0): `DAMAGE`, `EXPIRY`, `INTERNAL_USE`, `THEFT`, `DONATION`.\nPositive reasons (require `quantity` > 0): `STOCK_FOUND`, `SAMPLE_FOR_SALE`.\nFor `CUSTOM`, the sign must match the referenced custom reason's `type`.", "enum": [ "DAMAGE", "EXPIRY", "INTERNAL_USE", "THEFT", "DONATION", "STOCK_FOUND", "SAMPLE_FOR_SALE", "CUSTOM" ], "title": "Stock Adjustment Reason", "type": "string" }, "StoreCreditBalancesBulkResponse": { "description": "The fields returned by the store_credit /store_credits/balances-bulk", "properties": { "data": { "description": "An array of Store Credit Customer balances", "items": { "$ref": "#/components/schemas/StoreCreditCustomerBalance" }, "type": "array" } }, "required": [ "data" ], "title": "Store Credit Bulk Response", "type": "object" }, "StoreCreditBulkResponse": { "description": "Store credit customer list with balance and transactions", "properties": { "data": { "description": "An array of Store Credit Customers", "items": { "$ref": "#/components/schemas/StoreCreditCustomer" }, "type": "array" } }, "required": [ "data" ], "title": "Store Credit Bulk Response", "type": "object", "x-examples": { "example-1": { "data": [ { "balance": 10, "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e", "store_credit_transactions": [ { "amount": 10, "client_id": "string", "created_at": "string", "notes": "string", "sale_id": "7e9bee0e-09d3-495f-848b-5926aa2ded33", "type": "ISSUE", "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5" } ], "total_credit_issued": 10, "total_credit_redeemed": 10 } ] } } }, "StoreCreditCreateHoldParams": { "properties": { "amount": { "description": "The amount of the transaction.", "format": "double", "type": "number" }, "client_id": { "description": "The client id is a unique transaction identifier. See StoreCreditTransactionParams\n", "type": "string" } }, "required": [ "amount" ], "title": "Store Credit Transaction Parameters to create a HOLD transaction", "type": "object" }, "StoreCreditCustomer": { "description": "The store credit information for a customer.", "properties": { "balance": { "description": "The customers store credit balance.", "format": "double", "type": "number" }, "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "customer_id": { "description": "The customer id.", "format": "uuid", "type": "string" }, "id": { "description": "Store Credit Customer's internal ID.", "format": "string", "type": "string" }, "store_credit_transactions": { "description": "The transactions associated with this customer.", "items": { "$ref": "#/components/schemas/StoreCreditTransaction" }, "type": "array" }, "total_credit_issued": { "description": "Total amount of store credit issued to this customer.", "format": "double", "type": "number" }, "total_credit_redeemed": { "description": "Total amount of store credit spent by this customer.", "format": "double", "type": "number" } }, "required": [ "customer_id", "balance", "total_credit_issued", "total_credit_redeemed" ], "title": "Store Credit Customer", "type": "object", "x-examples": { "example-1": { "balance": 10, "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e", "store_credit_transactions": [ { "amount": 10, "client_id": "string", "created_at": "string", "notes": "string", "sale_id": "7e9bee0e-09d3-495f-848b-5926aa2ded33", "type": "ISSUE", "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5" } ], "total_credit_issued": 10, "total_credit_redeemed": 0 } } }, "StoreCreditCustomerBalance": { "description": "The store credit balance and statistics for the customer", "properties": { "balance": { "description": "The customers store credit balance.", "format": "double", "type": "number" }, "customer_id": { "description": "The customers public id.", "type": "string" }, "total_credit_issued": { "description": "Total amount of store credit issued to this customer.", "format": "double", "type": "number" }, "total_credit_redeemed": { "description": "Total amount of store credit spent by this customer.", "format": "double", "type": "number" } }, "title": "Store Credit Customer Balance", "type": "object" }, "StoreCreditReport": { "description": "The store credit report for a retailer.", "properties": { "outstanding_balance": { "description": "The outstanding balance.", "format": "double", "type": "number" }, "total_value_issued": { "description": "The total credit issued.", "format": "double", "type": "number" }, "total_value_redeemed": { "description": "The total value redeemed.", "format": "double", "type": "number" } }, "title": "Store Credit Report", "type": "object" }, "StoreCreditTransaction": { "description": "A store credit operation", "properties": { "amount": { "description": "The amount of the transaction", "format": "double", "type": "number" }, "client_id": { "description": "An operation idempotency identifier.\nThe client must provide this and normally it should be the transaction id from the client system.\nAn operation and it's reverse operation must have the same client_id\n", "type": "string" }, "created_at": { "description": "The date time the transaction was created.", "example": "2026-01-02T15:04:05Z", "format": "date-time", "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})$", "type": "string" }, "id": { "description": "transaction unique identifier (base64 encoded)", "type": "string" }, "notes": { "description": "The notes associated with the transaction.", "type": "string" }, "sale_id": { "description": "The sale id the transaction is associated with. This should be null for transactions initiated outside of Lightspeed Retail. If it is a sale id, it will be in UUID format.", "format": "uuid", "type": "string" }, "type": { "description": "The type of the transaction", "enum": [ "ISSUE", "REDEMPTION", "REVERSE" ], "type": "string" }, "user_id": { "description": "The user id of the person who performed the transaction (during a sale or a manual issue)", "format": "uuid", "type": "string" } }, "title": "Store Credit Transaction for Customer", "type": "object" }, "StoreCreditTransactionParams": { "description": "The store credit transaction parameters for a customer transaction.", "properties": { "amount": { "description": "The amount of the transaction.", "format": "double", "type": "number" }, "client_id": { "description": "The client id is a unique transaction identifier. The client must provide this and is normally the transaction id from the client system.\n", "type": "string" }, "notes": { "description": "The notes associated with the transaction.", "type": "string" }, "type": { "description": "The type of the transaction", "enum": [ "ISSUE", "REDEMPTION", "REVERSE" ], "type": "string" }, "user_id": { "description": "The user id of the person who handled the transaction.", "format": "uuid", "type": "string" } }, "required": [ "amount", "client_id", "type" ], "title": "Store Credit Transaction Parameters for Customer", "type": "object" }, "Supplier": { "allOf": [ { "$ref": "#/components/schemas/BaseSupplier" } ], "properties": { "deleted_at": { "nullable": true, "type": "string" }, "id": { "type": "string" }, "source": { "description": "Origin of the supplier record (e.g. USER, SHOPIFY).", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "id", "source", "version" ], "title": "Supplier", "type": "object" }, "SupplierCollection": { "properties": { "data": { "description": "An array of Suppliers wrapped in top level `data` object.", "items": { "$ref": "#/components/schemas/Supplier" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "Supplier Collection", "type": "object" }, "SupplierResponse": { "properties": { "data": { "$ref": "#/components/schemas/Supplier" } }, "title": "Supplier Response", "type": "object" }, "SupplierSample": { "nullable": true, "properties": { "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "name": { "type": "string" } }, "title": "Supplier Sample", "type": "object" }, "Tag": { "properties": { "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "id": { "description": "Auto-generated object ID.", "type": "string" }, "name": { "description": "The Tag name.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "title": "Tag", "type": "object" }, "TagCollection": { "properties": { "data": { "description": "An array of Tag objects.", "items": { "$ref": "#/components/schemas/Tag" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "Tag Collection", "type": "object" }, "TagResponse": { "properties": { "data": { "$ref": "#/components/schemas/Tag" } }, "title": "Tag Response", "type": "object" }, "Tax": { "properties": { "deleted_at": { "description": "The deletion timestamp.", "nullable": true, "type": "string" }, "display_name": { "description": "The name of the tax used for display.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "is_default": { "description": "Indicates whether the tax is used as the default one.", "type": "boolean" }, "name": { "description": "The name of the tax.", "type": "string" }, "rates": { "items": { "$ref": "#/components/schemas/TaxRate" }, "type": "array" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "deleted_at", "display_name", "id", "is_default", "version" ], "title": "Tax", "type": "object" }, "TaxCollection": { "properties": { "data": { "description": "An array of tax objects.", "items": { "$ref": "#/components/schemas/Tax" }, "type": "array" } }, "required": [ "data" ], "title": "Tax Collection", "type": "object" }, "TaxRate": { "properties": { "display_name": { "description": "The name of the tax rate used for display.", "type": "string" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "name": { "description": "The name of the tax rate.", "type": "string" }, "rate": { "description": "Tax rate value. `0.1 = 10%`.", "format": "double", "type": "number" }, "rules": { "description": "Rules that apply to the rate for tax exclusive outlets.", "items": { "$ref": "#/components/schemas/RateRule" }, "type": "array" } }, "required": [ "display_name", "id", "name", "rate" ], "title": "Tax rate", "type": "object" }, "TaxResponse": { "description": "A response for a single tax GET request.", "properties": { "data": { "$ref": "#/components/schemas/Tax" } }, "title": "Tax Response", "type": "object" }, "Tender": { "properties": { "amount": { "format": "double", "type": "number" }, "card_details": { "$ref": "#/components/schemas/CardDetails" }, "created_at": { "format": "date-time", "type": "string" }, "currency": { "type": "string" }, "emv": { "$ref": "#/components/schemas/EMV" }, "external_transaction_id": { "type": "string" }, "id": { "type": "string" }, "provider_fields": { "additionalProperties": true, "type": "object" }, "status": { "enum": [ "APPROVED", "APPROVED_PIN", "APPROVED_SIGNATURE", "CANCELLED", "DECLINED", "REFUNDED", "REVERSED", "UNKNOWN" ], "type": "string" }, "transaction_id": { "type": "string" }, "type": { "enum": [ "SALE", "REFUND", "REVERSAL", "TIP", "SURCHARGE" ], "type": "string" } }, "required": [ "id", "transaction_id", "created_at", "currency", "amount", "type", "status", "provider_fields" ], "type": "object" }, "Transaction": { "properties": { "created_at": { "format": "date-time", "type": "string" }, "id": { "type": "string" }, "payment_type_id": { "type": "string" }, "provider_fields": { "additionalProperties": true, "type": "object" }, "register_id": { "type": "string" }, "register_sale_payment_id": { "type": "string" }, "retailer_id": { "type": "string" }, "retailer_payment_type_id": { "type": "string" }, "status": { "enum": [ "CANCELLED", "CANCELLED_BAD_CARD", "CANCELLED_BUSY", "COMPLETED", "DECLINED", "REFUNDED", "REVERSED", "TIMEOUT", "UNKNOWN", "PROCESSING" ], "type": "string" }, "tenders": { "items": { "$ref": "#/components/schemas/Tender" }, "type": "array" }, "updated_at": { "format": "date-time", "type": "string" } }, "required": [ "id", "register_sale_payment_id", "retailer_id", "created_at", "updated_at", "register_id", "retailer_payment_type_id", "status", "tenders", "provider_fields" ], "type": "object" }, "TransactionRequest": { "properties": { "amount": { "description": "Payment amount. Must be non-zero. Negative values are only valid for refund requests\n", "format": "double", "type": "number" }, "currency": { "description": "ISO 4217 currency code. Uppercased internally.", "example": "NZD", "type": "string" }, "discount": { "description": "Discount details. Klarna only.", "properties": { "price": { "format": "double", "type": "number" }, "tax": { "format": "double", "type": "number" } }, "type": "object" }, "idempotency_key": { "description": "Idempotency key. Square only.", "type": "string" }, "lspay_intent_id": { "description": "LSPay Stripe payment intent ID. When set on a non-refund request, triggers the LSPay-specific payment path.\n", "type": "string" }, "lspay_payment_id": { "description": "LSPay payment ID. LSPay only.", "type": "string" }, "lspay_payment_method": { "description": "Payment method used. LSPay only.", "type": "string" }, "lspay_refund_method": { "description": "Refund method. LSPay refunds only.", "type": "string" }, "lspay_unreferenced_payment_method_id": { "description": "Unreferenced payment method ID for LSPay.", "type": "string" }, "original_register_sale_payment_id": { "description": "For refunds \u2014 the register sale payment ID of the original sale.", "type": "string" }, "outlet_id": { "description": "Outlet ID. LSPay only.", "type": "string" }, "pre_approval_code": { "description": "Pre-approval code. Afterpay only (deprecated).", "type": "string" }, "product_version": { "description": "POS product version. LSPay only.", "type": "string" }, "products": { "description": "Line items for providers that require product details (e.g. Klarna).", "items": { "properties": { "discount": { "format": "double", "type": "number" }, "image_url": { "type": "string" }, "name": { "type": "string" }, "price": { "format": "double", "type": "number" }, "quantity": { "format": "double", "type": "number" }, "sku": { "type": "string" }, "tax_rate": { "format": "double", "type": "number" }, "unit_tax": { "format": "double", "type": "number" } }, "type": "object" }, "type": "array" }, "register_name": { "description": "Name of the register. LSPay only.", "type": "string" }, "wepay_payment_data": { "additionalProperties": true, "description": "WePay-specific payment data fields.", "type": "object" } }, "required": [ "amount" ], "type": "object" }, "UpdateCustomFieldParams": { "properties": { "editable_in_ui": { "description": "Should this custom field be editable in the UI.", "type": "boolean" }, "print_on_receipt": { "description": "Should this custom field be printed on receipts.", "type": "boolean" }, "title": { "example": "My Custom Field", "type": "string" }, "visible_in_ui": { "description": "Should this custom field be visible in the UI.", "type": "boolean" } }, "title": "Parameters for updating a custom field", "type": "object" }, "UpdateCustomInventoryAdjustmentReasonRequest": { "description": "Parameters for updating a custom inventory adjustment reason.", "properties": { "enabled": { "description": "Whether the reason can be selected when creating stock adjustments.", "type": "boolean" }, "name": { "description": "New display name. Must remain unique within the retailer. Max 30 characters.", "maxLength": 30, "type": "string" } }, "title": "Update Custom Inventory Adjustment Reason Request", "type": "object" }, "User": { "properties": { "account_type": { "description": "User's account type.", "enum": [ "cashier", "manager", "admin" ], "type": "string" }, "created_at": { "description": "Creation timestamp in UTC.", "type": "string" }, "deleted_at": { "description": "Deletion timestamp in UTC.", "nullable": true, "type": "string" }, "display_name": { "description": "Full user's name to be used for display in the UI.", "nullable": true, "type": "string" }, "email": { "description": "User's email address.", "format": "email", "nullable": true, "type": "string" }, "email_verified_at": { "description": "The timestamp of users email verification.", "nullable": true, "type": "string" }, "enabled": { "description": "Indicates whether the user is enabled.", "type": "boolean" }, "enabled_mfa": { "description": "The user's enabled MFA factor, or null if MFA is not enabled.", "nullable": true, "properties": { "created_at": { "description": "Timestamp when the MFA factor was created.", "type": "string" }, "id": { "description": "Auto-generated MFA factor ID.", "type": "string" }, "type": { "description": "The MFA factor type (e.g. \"otp\").", "enum": [ "otp" ], "type": "string" } }, "type": "object" }, "id": { "description": "Auto-generated object ID.", "format": "uuid", "type": "string" }, "image_source": { "description": "URL of the default-sized user's avatar.", "type": "string" }, "images": { "$ref": "#/components/schemas/UserImages" }, "is_primary_user": { "description": "Indicated whether this user is the primary user for the account.", "type": "boolean" }, "permissions": { "description": "The permissions assigned to the user.", "items": { "type": "string" }, "nullable": true, "type": "array" }, "require_password_change": { "description": "Indicates whether the user is required to change their password.", "type": "boolean" }, "restricted_outlet_id": { "deprecated": true, "description": "**deprecated** Use the `restricted_outlet_ids` instead.", "nullable": true, "type": "string" }, "restricted_outlet_ids": { "description": "A list of outlet IDs the user is associated with", "items": { "format": "uuid", "type": "string" }, "type": "array" }, "roles": { "description": "The roles assigned to the user.", "items": { "$ref": "#/components/schemas/Role" }, "type": "array" }, "rules": { "description": "The rules assigned to the user.", "type": "object" }, "seen_at": { "description": "The timestamp of the user's last activity in the system.", "type": "string" }, "switch_id": { "description": "The switch id for the user.", "type": "string" }, "target_daily": { "description": "Daily sales target for the user.", "nullable": true, "type": "number" }, "target_monthly": { "description": "Monthly sales target for the user.", "nullable": true, "type": "number" }, "target_weekly": { "description": "Weekly sales target for the user.", "nullable": true, "type": "number" }, "time_until_deletion": { "description": "The time until the user is deleted.", "nullable": true, "type": "string" }, "updated_at": { "description": "Last update timestamp in UTC.", "type": "string" }, "username": { "description": "User's username used for login.", "type": "string" }, "version": { "description": "Auto-incrementing object version number.", "format": "int64", "type": "integer" } }, "required": [ "account_type", "created_at", "id", "is_primary_user", "updated_at", "username", "version" ], "title": "User", "type": "object" }, "UserCollection": { "properties": { "data": { "description": "An array of users.", "items": { "$ref": "#/components/schemas/User" }, "type": "array" }, "version": { "$ref": "#/components/schemas/Version" } }, "required": [ "data", "version" ], "title": "User Collection", "type": "object" }, "UserImages": { "description": "On object containing URLs for different sizes of the user\u2019s avatar.", "nullable": true, "properties": { "original": { "type": "string" }, "sl": { "type": "string" }, "sm": { "type": "string" }, "ss": { "type": "string" }, "st": { "type": "string" }, "standard": { "type": "string" }, "thumb": { "type": "string" } }, "title": "User Image", "type": "object" }, "UserResponse": { "description": "A response for a single user GET request.", "properties": { "data": { "$ref": "#/components/schemas/User" } }, "title": "User Response", "type": "object" }, "UserSaleTotalCollection": { "properties": { "cost": { "description": "The cost total of sales for the user.", "format": "double", "type": "number" }, "date_from": { "description": "From timestamp in UTC.", "type": "string" }, "date_to": { "description": "To timestamp in UTC.", "type": "string" }, "discounts": { "description": "The discounts total of sales for the user.", "format": "double", "type": "number" }, "label": { "description": "The label for what the total represents.", "type": "string" }, "loyalty": { "description": "The loyalty total of sales for the user.", "format": "double", "type": "number" }, "revenue": { "description": "The revenue total of sales for the user.", "format": "double", "type": "number" }, "sale_count": { "description": "The total number of sales for the user.", "format": "integer", "type": "number" }, "tax": { "description": "The tax total of sales for the user.", "format": "double", "type": "number" }, "total": { "description": "The total sales for the user.", "format": "double", "type": "number" } }, "title": "User Sale Total Collection", "type": "object" }, "UserSaleTotalResponse": { "properties": { "data": { "items": { "$ref": "#/components/schemas/UserSaleTotalCollection" }, "type": "array" } }, "title": "User Sale Total Response", "type": "object" }, "VariantAttribute": { "properties": { "attribute_id": { "description": "The ID of the variant attribute.", "format": "uuid", "type": "string" }, "value": { "description": "The value associated with the given attribute_id. e.g. Green.", "type": "string" } }, "title": "Variant Attribute", "type": "object" }, "VariantAttributeCreateResponse": { "properties": { "data": { "properties": { "created_at": { "description": "Timestamp in UTC.", "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "updated_at": { "description": "Timestamp in UTC.", "type": "string" } }, "type": "object" } }, "title": "VariantAttributeCreateResponse", "type": "object" }, "VariantAttributeCreateUpdateBody": { "properties": { "name": { "example": "Size", "type": "string" } }, "required": [ "name" ], "title": "VariantAttributeCreateUpdateBody", "type": "object" }, "VariantAttributeDeleteResponse": { "properties": { "data": { "properties": { "id": { "type": "string" } }, "type": "object" } }, "title": "VariantAttributeDeleteResponse", "type": "object" }, "VariantAttributeResponse": { "properties": { "deleted_at": { "description": "Timestamp in UTC.", "format": "date-time", "nullable": true, "type": "string" }, "id": { "example": "06564c2b-6841-11eb-f2da-d2fb9abb0c90", "format": "uuid", "type": "string" }, "name": { "example": "Size", "type": "string" } }, "title": "VariantAttributeResponse", "type": "object" }, "VariantAttributeUpdateResponse": { "properties": { "data": { "properties": { "id": { "type": "string" }, "name": { "type": "string" } }, "type": "object" } }, "title": "VariantAttributeUpdateResponse", "type": "object" }, "VariantAttributesListResponse": { "properties": { "data": { "items": { "$ref": "#/components/schemas/VariantAttributeResponse" }, "type": "array" } }, "title": "VariantAttributesListResponse", "type": "object" }, "VariantOption": { "properties": { "name": { "description": "The Variant Option name.", "type": "string" }, "value": { "description": "The value of a Variant Option.", "type": "string" } }, "title": "Variant Option", "type": "object" }, "Version": { "description": "An object containing the highest and lowest version numbers for all items of the returned collection.", "properties": { "max": { "description": "Highest version number of the payload, or `null` when the result set is empty.", "format": "int64", "nullable": true, "type": "integer" }, "min": { "description": "Lowest version number of the payload, or `null` when the result set is empty.", "format": "int64", "nullable": true, "type": "integer" } }, "required": [ "max", "min" ], "type": "object" }, "VersionsData": { "description": "Map of resource names to their current version numbers.", "properties": { "autotax_settings": { "format": "int64", "type": "integer" }, "brands": { "format": "int64", "type": "integer" }, "button_layouts": { "format": "int64", "type": "integer" }, "channels": { "format": "int64", "type": "integer" }, "consignment_products": { "format": "int64", "type": "integer" }, "consignments": { "format": "int64", "type": "integer" }, "custom_stock_adjustment_reason": { "format": "int64", "type": "integer" }, "customer_groups": { "format": "int64", "type": "integer" }, "customer_taxes": { "format": "int64", "type": "integer" }, "customers": { "format": "int64", "type": "integer" }, "outlet_taxes": { "format": "int64", "type": "integer" }, "outlets": { "format": "int64", "type": "integer" }, "payment_types": { "format": "int64", "type": "integer" }, "price_book_products": { "format": "int64", "type": "integer" }, "price_books": { "format": "int64", "type": "integer" }, "product_images": { "format": "int64", "type": "integer" }, "product_types": { "format": "int64", "type": "integer" }, "products": { "format": "int64", "type": "integer" }, "purchase_order_delivery": { "format": "int64", "type": "integer" }, "purchase_order_delivery_line_item": { "format": "int64", "type": "integer" }, "receipt_settings": { "format": "int64", "type": "integer" }, "receipt_template_types": { "format": "int64", "type": "integer" }, "receipt_templates": { "format": "int64", "type": "integer" }, "registers": { "format": "int64", "type": "integer" }, "retailer": { "format": "int64", "type": "integer" }, "sales": { "format": "int64", "type": "integer" }, "serial_numbers": { "format": "int64", "type": "integer" }, "shifts": { "format": "int64", "type": "integer" }, "stock_adjustment": { "format": "int64", "type": "integer" }, "suppliers": { "format": "int64", "type": "integer" }, "tags": { "format": "int64", "type": "integer" }, "taxes": { "format": "int64", "type": "integer" }, "users": { "format": "int64", "type": "integer" } }, "required": [ "autotax_settings", "brands", "button_layouts", "channels", "consignment_products", "consignments", "custom_stock_adjustment_reason", "customer_groups", "customer_taxes", "customers", "outlet_taxes", "outlets", "payment_types", "price_book_products", "price_books", "product_images", "product_types", "products", "purchase_order_delivery", "purchase_order_delivery_line_item", "receipt_settings", "receipt_template_types", "receipt_templates", "registers", "retailer", "sales", "serial_numbers", "shifts", "stock_adjustment", "suppliers", "tags", "taxes", "users" ], "type": "object" }, "Webhook": { "description": "The configuration for a webhook.", "properties": { "active": { "description": "Whether this webhook is enabled or not", "type": "boolean" }, "id": { "description": "The ID of this webhook", "type": "string" }, "retailer_id": { "description": "The ID of the retailer this webhook belongs to", "type": "string" }, "type": { "$ref": "#/components/schemas/WebhookType" }, "url": { "description": "The URL to send this webhook to", "type": "string" } }, "title": "Webhook", "type": "object", "x-examples": {} }, "WebhookRequest": { "description": "Webhook create/update request data.", "properties": { "active": { "description": "Whether this webhook is enabled or not", "type": "boolean" }, "type": { "$ref": "#/components/schemas/WebhookType" }, "url": { "description": "The URL to send webhooks to", "minLength": 3, "type": "string" } }, "required": [ "active", "type", "url" ], "title": "WebhookRequest", "type": "object", "x-examples": { "example-1": { "active": true, "type": "sale.update", "url": "string" } } }, "WebhookType": { "description": "The webhook type. These can be one of:\n- sale.update\n- product.update\n- customer.update\n- inventory.update\n- register_closure.create\n- consignment.send\n- consignment.receive\n", "enum": [ "sale.update", "product.update", "customer.update", "inventory.update", "register_closure.create", "consignment.send", "consignment.receive" ], "title": "WebhookType", "type": "string", "x-examples": { "example-1": "sale.update" } } }, "securitySchemes": { "bearerAuth": { "description": "Bearer Token for API authentication.", "scheme": "bearer", "type": "http" } } } }