| 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_SUBDOMAIN
VITE_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 serial
condition (string, optional) - Condition assessment
price_cost_cents (integer, optional) - Cost in cents
price_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/estimates
line_item_id (integer) - The line item to attach to
product_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:
const serials = await skill({ name: "repairshopr-product-serial" }, {
product_id: 123,
status: "in_stock"
})
const newSerial = await skill({ name: "repairshopr-product-serial" }, {
serial_number: "C02XYZ123456",
condition: "New",
price_cost_cents: 20000,
price_retail_cents: 39999
}, { product_id: 123, method: 'POST' })
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_serials array, each with id, serial_number, status, condition, instance_price_cost, instance_price_retail, location_id
- Create/Update:
product_serial object
- Attach: status message or errors
Important
- Only products marked as
serialized: true should have serials; but API may still accept them otherwise
- Serial numbers must be unique within the product
status indicates 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_item can fail with errors if serial already attached elsewhere
Related skills
repairshopr-product - To ensure product is serialized and get product info
repairshopr-ticket-line-item - For attaching serials to ticket line items
repairshopr-estimate / repairshopr-invoice - For line items in those contexts