Lightspeed Retail (R-Series) MCP by usefulapi
Read Lightspeed R-Series items, stock, sales, customers and POs; create customers and set stock.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"lightspeed-r-series": {
"url": "https://lightspeed-r-series.usefulapi.io/mcp"
}
}
}Puntos de conexión remotos
https://lightspeed-r-series.usefulapi.io/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (17)
🟢get_account
The connected Lightspeed Retail (R-Series) account: id, name, status, employee count/limit, default and purchasing currencies. Good first call. GET /Account/{accountID}.json.
Esquema de entrada
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_shops(include_contact, limit, sort, next_url)
List the account's shops (store locations): shopID, name, time zone, archived flag. Use shopID to filter sales, inventory and purchase orders. GET /Account/{accountID}/Shop.json.
Esquema de entrada
{
"type": "object",
"properties": {
"include_contact": {
"description": "Also load each shop's Contact (address, phone).",
"type": "boolean"
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: shopID.",
"type": "string",
"enum": [
"shopID",
"-shopID"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_items(description, item_code, system_sku, custom_sku, manufacturer_sku, ...)
Search the product catalog. Each item has itemID, description, SKUs (systemSku, customSku, upc, ean, manufacturerSku), defaultCost, categoryID and its Prices (price levels). Set include_stock to add per-shop quantities (ItemShops; shopID 0 = all shops). Paginate with next_url. GET /Account/{accountID}/Item.json.
Esquema de entrada
{
"type": "object",
"properties": {
"description": {
"description": "Description contains this text (like search).",
"type": "string",
"maxLength": 200
},
"item_code": {
"description": "Exact match on itemID, UPC or EAN.",
"type": "string",
"pattern": "^\\d+$"
},
"system_sku": {
"description": "Exact Lightspeed system SKU (the barcode on labels).",
"type": "string",
"pattern": "^\\d+$"
},
"custom_sku": {
"description": "Exact custom SKU.",
"type": "string",
"maxLength": 100
},
"manufacturer_sku": {
"description": "Exact manufacturer SKU.",
"type": "string",
"maxLength": 100
},
"upc": {
"description": "Exact UPC.",
"type": "string",
"pattern": "^\\d+$"
},
"ean": {
"description": "Exact EAN.",
"type": "string",
"pattern": "^\\d+$"
},
"category_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only items in this category (categoryID)."
},
"vendor_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only items whose default vendor is this vendorID."
},
"modified_since": {
"description": "Only items modified at or after this time (item timeStamp, UTC unless an offset is given).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"min_qoh": {
"description": "Only items with at least one shop record whose quantity on hand is >= this (loads ItemShops).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"archived": {
"description": "false (default) = active records only, true = active and archived, only = archived only.",
"type": "string",
"enum": [
"false",
"true",
"only"
]
},
"include_stock": {
"description": "Include per-shop stock (ItemShops relation).",
"type": "boolean"
},
"include_category": {
"description": "Include the Category record.",
"type": "boolean"
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: itemID, timeStamp, description.",
"type": "string",
"enum": [
"itemID",
"-itemID",
"timeStamp",
"-timeStamp",
"description",
"-description"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_item(item_id, relations)
One item by itemID with its prices, per-shop stock (ItemShops), category and other related records. GET /Account/{accountID}/Item/{itemID}.json.
Esquema de entrada
{
"type": "object",
"properties": {
"item_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The itemID (from list_items)."
},
"relations": {
"description": "Related records to include (each adds a little to the request's rate-limit cost). Default: ItemShops, Category, Manufacturer, ItemVendorNums, Note. Allowed: Category, TaxClass, ItemAttributes, ItemAttributes.ItemAttributeSet, Manufacturer, Note, Images, ItemShops, ItemVendorNums, ItemComponents, ItemECommerce, TagRelations, TagRelations.Tag, CustomFieldValues, CustomFieldValues.value, ItemPrices.",
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"enum": [
"Category",
"TaxClass",
"ItemAttributes",
"ItemAttributes.ItemAttributeSet",
"Manufacturer",
"Note",
"Images",
"ItemShops",
"ItemVendorNums",
"ItemComponents",
"ItemECommerce",
"TagRelations",
"TagRelations.Tag",
"CustomFieldValues",
"CustomFieldValues.value",
"ItemPrices"
]
}
}
},
"required": [
"item_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_inventory(shop_id, item_id, min_qoh, max_qoh, modified_since, ...)
Stock levels per item per shop (ItemShop records): qoh (quantity on hand), sellable, backorder, reorderPoint, reorderLevel, costs and values. shopID 0 is the all-shops summary. Paginate with next_url. GET /Account/{accountID}/ItemShop.json.
Esquema de entrada
{
"type": "object",
"properties": {
"shop_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only this shop (shopID; 0 = the all-shops summary records)."
},
"item_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only this item (itemID)."
},
"min_qoh": {
"description": "Quantity on hand >= this.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"max_qoh": {
"description": "Quantity on hand <= this (e.g. 0 for out of stock).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"modified_since": {
"description": "Only records changed at or after this time (timeStamp).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: itemShopID, timeStamp.",
"type": "string",
"enum": [
"itemShopID",
"-itemShopID",
"timeStamp",
"-timeStamp"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_categories(name, parent_id, limit, sort, next_url)
Item categories (hierarchical): categoryID, name, fullPathName, parentID, nodeDepth. GET /Account/{accountID}/Category.json.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"description": "Name contains this text.",
"type": "string",
"maxLength": 200
},
"parent_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only direct children of this categoryID (0 = top level)."
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: categoryID, timeStamp, leftNode, rightNode.",
"type": "string",
"enum": [
"categoryID",
"-categoryID",
"timeStamp",
"-timeStamp",
"leftNode",
"-leftNode",
"rightNode",
"-rightNode"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_sales(from, to, date_field, shop_id, customer_id, ...)
Sales history: saleID, completed/voided flags, completeTime, totals (calcSubtotal, calcTax1/2, total, balance), customerID, employeeID, shopID, registerID. Filter by a date range on completeTime (default) or timeStamp, shop, customer, employee. Set include_lines for SaleLines (items sold). Paginate with next_url. GET /Account/{accountID}/Sale.json.
Esquema de entrada
{
"type": "object",
"properties": {
"from": {
"description": "Start (inclusive), e.g. 2026-10-01 or 2026-10-01T00:00:00-04:00. Times are UTC unless an offset is given.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"to": {
"description": "End (inclusive), same format.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:?\\d{2})?)?$"
},
"date_field": {
"description": "Which date from/to apply to (default completeTime).",
"type": "string",
"enum": [
"completeTime",
"timeStamp",
"createTime"
]
},
"shop_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only sales in this shop (shopID)."
},
"customer_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only sales for this customer (customerID)."
},
"employee_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only sales processed by this employee (employeeID)."
},
"completed": {
"description": "true = completed sales only, false = open/unfinished only.",
"type": "boolean"
},
"voided": {
"description": "true = voided only, false = exclude voided.",
"type": "boolean"
},
"include_lines": {
"description": "Include the SaleLines relation (line items).",
"type": "boolean"
},
"include_payments": {
"description": "Include the SalePayments relation.",
"type": "boolean"
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: saleID, timeStamp, completeTime, updatetime.",
"type": "string",
"enum": [
"saleID",
"-saleID",
"timeStamp",
"-timeStamp",
"completeTime",
"-completeTime",
"updatetime",
"-updatetime"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_sale(sale_id, relations)
One sale by saleID with its line items (SaleLines with Item), payments (SalePayments with PaymentType) and customer. GET /Account/{accountID}/Sale/{saleID}.json.
Esquema de entrada
{
"type": "object",
"properties": {
"sale_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The saleID (from list_sales)."
},
"relations": {
"description": "Related records to include (each adds a little to the request's rate-limit cost). Default: SaleLines, SaleLines.Item, SalePayments, SalePayments.PaymentType, Customer. Allowed: SaleLines, SaleLines.Discount, SaleLines.TaxClass, SaleLines.Note, SaleLines.Item, SaleLines.InventorySales, SaleNotes, SalePayments, SalePayments.PaymentType, SalePayments.CCCharge, SalePayments.SaleAccounts, SalePayments.Signatures, ShipTo, ShipTo.Contact, Customer, Customer.Contact, Discount, TaxCategory, TaxCategory.TaxCategoryClasses, Quote.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"enum": [
"SaleLines",
"SaleLines.Discount",
"SaleLines.TaxClass",
"SaleLines.Note",
"SaleLines.Item",
"SaleLines.InventorySales",
"SaleNotes",
"SalePayments",
"SalePayments.PaymentType",
"SalePayments.CCCharge",
"SalePayments.SaleAccounts",
"SalePayments.Signatures",
"ShipTo",
"ShipTo.Contact",
"Customer",
"Customer.Contact",
"Discount",
"TaxCategory",
"TaxCategory.TaxCategoryClasses",
"Quote"
]
}
}
},
"required": [
"sale_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_customers(first_name, last_name, company, email, include_contact, ...)
Search customers by name, company or email: customerID, firstName, lastName, company, customerTypeID, createTime. Email search loads the Contact relation (emails, phones, addresses). Paginate with next_url. GET /Account/{accountID}/Customer.json.
Esquema de entrada
{
"type": "object",
"properties": {
"first_name": {
"description": "First name contains this text.",
"type": "string",
"maxLength": 100
},
"last_name": {
"description": "Last name contains this text.",
"type": "string",
"maxLength": 100
},
"company": {
"description": "Company contains this text.",
"type": "string",
"maxLength": 200
},
"email": {
"description": "Email contains this text (searches Contact.email).",
"type": "string",
"maxLength": 254
},
"include_contact": {
"description": "Include the Contact relation (emails, phones, addresses).",
"type": "boolean"
},
"archived": {
"description": "false (default) = active records only, true = active and archived, only = archived only.",
"type": "string",
"enum": [
"false",
"true",
"only"
]
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: customerID, timeStamp, firstName, lastName.",
"type": "string",
"enum": [
"customerID",
"-customerID",
"timeStamp",
"-timeStamp",
"firstName",
"-firstName",
"lastName",
"-lastName"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_customer(customer_id, relations)
One customer by customerID with Contact (emails, phones, addresses), customer type and notes. GET /Account/{accountID}/Customer/{customerID}.json.
Esquema de entrada
{
"type": "object",
"properties": {
"customer_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The customerID (from list_customers)."
},
"relations": {
"description": "Related records to include (each adds a little to the request's rate-limit cost). Default: Contact, CustomerType, Note. Allowed: Contact, CustomerType, Discount, Note, TaxCategory, CreditAccount, Tags, CustomFieldValues, CustomFieldValues.value.",
"maxItems": 9,
"type": "array",
"items": {
"type": "string",
"enum": [
"Contact",
"CustomerType",
"Discount",
"Note",
"TaxCategory",
"CreditAccount",
"Tags",
"CustomFieldValues",
"CustomFieldValues.value"
]
}
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_vendors(name, include_contact, archived, limit, sort, ...)
Suppliers: vendorID, name, accountNumber, archived. GET /Account/{accountID}/Vendor.json.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"description": "Name contains this text.",
"type": "string",
"maxLength": 200
},
"include_contact": {
"description": "Include the Contact relation.",
"type": "boolean"
},
"archived": {
"description": "false (default) = active records only, true = active and archived, only = archived only.",
"type": "string",
"enum": [
"false",
"true",
"only"
]
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: vendorID, timeStamp, name.",
"type": "string",
"enum": [
"vendorID",
"-vendorID",
"timeStamp",
"-timeStamp",
"name",
"-name"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_purchase_orders(shop_id, vendor_id, complete, include_lines, archived, ...)
Purchase orders to vendors: orderID, vendorID, shopID, orderedDate, arrivalDate, receivedDate, complete, totalQuantity, shipCost. GET /Account/{accountID}/Order.json.
Esquema de entrada
{
"type": "object",
"properties": {
"shop_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only orders for this shop (shopID)."
},
"vendor_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Only orders to this vendor (vendorID)."
},
"complete": {
"description": "true = completed orders only, false = open orders only.",
"type": "boolean"
},
"include_lines": {
"description": "Include the OrderLines relation.",
"type": "boolean"
},
"archived": {
"description": "false (default) = active records only, true = active and archived, only = archived only.",
"type": "string",
"enum": [
"false",
"true",
"only"
]
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: orderID, timeStamp.",
"type": "string",
"enum": [
"orderID",
"-orderID",
"timeStamp",
"-timeStamp"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_purchase_order(order_id, relations)
One purchase order by orderID with its lines (OrderLines: itemID, quantity, numReceived, price), vendor and shop. GET /Account/{accountID}/Order/{orderID}.json.
Esquema de entrada
{
"type": "object",
"properties": {
"order_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The orderID (from list_purchase_orders)."
},
"relations": {
"description": "Related records to include (each adds a little to the request's rate-limit cost). Default: OrderLines, Vendor, Shop, Note. Allowed: OrderLines, Note, Vendor, Shop, CustomFieldValues, CustomFieldValues.value.",
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"enum": [
"OrderLines",
"Note",
"Vendor",
"Shop",
"CustomFieldValues",
"CustomFieldValues.value"
]
}
}
},
"required": [
"order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_employees(include_contact, archived, limit, sort, next_url)
Employees: employeeID, firstName, lastName, lockOut, archived, employeeRoleID, limitToShopID. Use employeeID to filter sales. GET /Account/{accountID}/Employee.json.
Esquema de entrada
{
"type": "object",
"properties": {
"include_contact": {
"description": "Include the Contact relation.",
"type": "boolean"
},
"archived": {
"description": "false (default) = active records only, true = active and archived, only = archived only.",
"type": "string",
"enum": [
"false",
"true",
"only"
]
},
"limit": {
"description": "Records per page (1-100, default 100).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"sort": {
"description": "Sort field; prefix \"-\" for descending. Allowed: employeeID, timeStamp.",
"type": "string",
"enum": [
"employeeID",
"-employeeID",
"timeStamp",
"-timeStamp"
]
},
"next_url": {
"description": "To get the next page: the next_url value from a previous call of this same tool, unchanged. Other filters are ignored when it is set.",
"type": "string",
"maxLength": 4000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡create_customer(first_name, last_name, company, title, email, ...)
Create a new customer, optionally with a primary email and one phone number (stored in the customer's Contact). Give at least a first name, last name or company. Returns the new customer with its customerID. POST /Account/{accountID}/Customer.json.
Esquema de entrada
{
"type": "object",
"properties": {
"first_name": {
"description": "First name.",
"type": "string",
"maxLength": 100
},
"last_name": {
"description": "Last name.",
"type": "string",
"maxLength": 100
},
"company": {
"description": "Company name.",
"type": "string",
"maxLength": 200
},
"title": {
"description": "Job title.",
"type": "string",
"maxLength": 100
},
"email": {
"description": "Primary email address.",
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"phone": {
"description": "Phone number.",
"type": "string",
"maxLength": 50
},
"phone_type": {
"description": "Phone type (default Mobile).",
"type": "string",
"enum": [
"Home",
"Work",
"Mobile",
"Pager",
"Fax"
]
},
"customer_type_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "customerTypeID to assign."
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴update_item(item_id, description, default_cost, custom_sku, manufacturer_sku, ...)
Change fields of an existing item: description, default cost, SKUs, category. Only the fields you pass are changed. Prices and stock are not changed here (use update_stock for quantities). PUT /Account/{accountID}/Item/{itemID}.json.
Esquema de entrada
{
"type": "object",
"properties": {
"item_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The itemID to update."
},
"description": {
"description": "New description (shown on receipts and labels).",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"default_cost": {
"description": "New default (reorder) cost.",
"type": "number",
"minimum": 0
},
"custom_sku": {
"description": "New custom SKU.",
"type": "string",
"maxLength": 100
},
"manufacturer_sku": {
"description": "New manufacturer SKU.",
"type": "string",
"maxLength": 100
},
"upc": {
"description": "New UPC (11-14 digits).",
"type": "string",
"pattern": "^\\d{11,14}$"
},
"ean": {
"description": "New EAN (11-14 digits).",
"type": "string",
"pattern": "^\\d{11,14}$"
},
"category_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "New categoryID (0 = no category)."
}
},
"required": [
"item_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴update_stock(item_id, shop_id, item_shop_id, qoh)
CHANGES STOCK COUNTS: sets (does not add to) the quantity on hand of one item in one shop to `qoh`, by updating the item's ItemShop record. Use for correcting a few items; for many items use an inventory count in Lightspeed. Identify the shop by shop_id, or by item_shop_id from get_item's ItemShops. Not for shopID 0 (the all-shops summary). PUT /Account/{accountID}/Item/{itemID}.json with ItemShops.
Esquema de entrada
{
"type": "object",
"properties": {
"item_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The itemID."
},
"shop_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "The shopID whose stock to set (from list_shops)."
},
"item_shop_id": {
"type": "string",
"pattern": "^\\d+$",
"description": "Or the itemShopID of that item/shop record (from get_item ItemShops)."
},
"qoh": {
"type": "integer",
"minimum": 0,
"maximum": 10000000,
"description": "The new quantity on hand."
}
},
"required": [
"item_id",
"qoh"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Comunidad
Evidencia