name: repairshopr-product-serial description: Manage individual serialized product instances in RepairShopr license: MIT compatibility: opencode metadata: audience: technicians, parts managers api: GET /products/{product_id}/product_serials, POST /products/{product_id}/product_serials, PUT /products/{product_id}/product_serials/{id}, POST /products/{product_id}/product_serials/attach_to_line_item
What I do
I manage individual serialized product instances. For products marked as serialized: true, each physical unit has a unique serial number. These serials track the lifecycle of each unit: from stock, to assignment to a line item (invoice/estimate/ticket), to being sold/used, returned, etc.
When to use me
Use this when:
- Recording serial numbers for newly received inventory
- Looking up which serials are in stock, reserved, sold, or returned
- Attaching a specific serial number to a repair ticket or invoice line item
- Updating serial details (condition, notes, price adjustments)
- Tracking warranty or repair history by serial
How to use
Required API base URL:
VITE_REPAIRSHOPR_SUBDOMAINVITE_REPAIRSHOPR_API_KEY
Permissions: "Products - List/Search" for reading. "Products - Edit" for create/update/attach operations.
List Product Serials (GET /products/{product_id}/product_serials)
product_id(integer, required) Optional:status(string) - Filter by status: "reserved", "sold", "returned", "in_transfer", "breakage", "used_in_refurb", "in_stock"page(integer) - Page number (100 per page)
Create Serial (POST /products/{product_id}/product_serials)
product_id(integer, required) Body:serial_number(string) - The unique serialcondition(string, optional) - Condition assessmentprice_cost_cents(integer, optional) - Cost in centsprice_retail_cents(integer, optional) - Retail price in cents
Update Serial (PUT /products/{product_id}/product_serials/{id})
product_id(integer)id(integer) - Serial ID Body:serial_number,condition,price_cost_cents,price_retail_cents,notes(optional)
Attach Serial to Line Item (POST /products/{product_id}/product_serials/attach_to_line_item)
product_id(integer, required) Body:record_type(string) - Typically "LineItem" for invoices/estimatesline_item_id(integer) - The line item to attach toproduct_serial_ids(array of integers) - IDs of serials to attach
Get Serial (not separately documented but GET by ID may exist via list; main endpoint is product_serials)
Example call:
// List serials for a product (e.g., to find in-stock ones)
const serials = await skill({ name: "repairshopr-product-serial" }, {
product_id: 123,
status: "in_stock"
})
// Add a new serialized unit to inventory
const newSerial = await skill({ name: "repairshopr-product-serial" }, {
serial_number: "C02XYZ123456",
condition: "New",
price_cost_cents: 20000, // $200.00
price_retail_cents: 39999 // $399.99
}, { product_id: 123, method: 'POST' })
// Attach a serial to a repair ticket's line item (when servicing that exact unit)
await skill({ name: "repairshopr-product-serial" }, {
record_type: "LineItem",
line_item_id: 456,
product_serial_ids: [newSerial.product_serial.id]
}, { product_id: 123, method: 'POST', endpoint: '/attach_to_line_item' })
Response includes:
- List:
product_serialsarray, each withid,serial_number,status,condition,instance_price_cost,instance_price_retail,location_id - Create/Update:
product_serialobject - Attach: status message or errors
Important
- Only products marked as
serialized: trueshould have serials; but API may still accept them otherwise - Serial numbers must be unique within the product
statusindicates where the serial is in its lifecycle; common status: "In Stock"- Attaching to a line item typically happens when you sell or service that specific unit
attach_to_line_itemcan fail with errors if serial already attached elsewhere
Related skills
repairshopr-product- To ensure product is serialized and get product inforepairshopr-ticket-line-item- For attaching serials to ticket line itemsrepairshopr-estimate/repairshopr-invoice- For line items in those contexts