name: repairshopr-estimate description: Create and manage estimates in RepairShopr license: MIT compatibility: opencode metadata: audience: technicians, sales, administrators api: GET /estimates, POST /estimates, GET /estimates/{id}, PUT /estimates/{id}, DELETE /estimates/{id}, POST /estimates/{id}/convert_to_invoice, POST /estimates/{id}/line_items, PUT /estimates/{id}/line_items/{line_item_id}, DELETE /estimates/{id}/line_items/{line_item_id}
What I do
I manage repair estimates, which are cost proposals for work. I can list, create, retrieve, update, delete estimates, convert them to invoices, and manage line items (parts/labor) within estimates.
When to use me
Use this when:
- Providing customers with cost estimates before work begins
- Converting approved estimates to invoices
- Adding or modifying line items (parts, labor, services)
- Tracking estimate status (Fresh, Draft, Approved, Declined)
- Managing estimate line items and pricing
How to use
Required API base URL:
VITE_REPAIRSHOPR_SUBDOMAINVITE_REPAIRSHOPR_API_KEY
Permissions:
- "Estimates - List/Search" for listing
- "Estimates - Create" for creating
- "Estimates - View Details" for viewing single and print/email
- "Estimates - Edit" for updating and line item management
- "Estimates - Delete" for deletion
List Estimates (GET /estimates) Optional:
mine(boolean) - Only my estimatesstatus(string) - Filter by status: "approved", "declined"page(integer) - Page number (50 per page)
Create Estimate (POST /estimates) Required:
date(string) - Estimate date (ISO 8601)customer_id(integer) - Customer
Optional:
name(string) - Estimate name/titlenumber(string) - Custom estimate numberstatus(string) - "Fresh", "Draft", "Approved", "Declined" (default Fresh)note(string) - Customer-facing notesticket_id(integer) - Associated ticketlocation_id(integer) - Locationline_items(array) - Array of line item objects withitem,name,cost,price,quantity,taxable
Get Estimate (GET /estimates/{id})
id(integer) - Estimate ID or number
Update Estimate (PUT /estimates/{id})
id(integer) - Estimate ID Optional body similar to create (but typically doesn't includeline_itemsfully; use line item endpoints)
Delete Estimate (DELETE /estimates/{id})
id(integer) - Estimate ID
Add Line Item (POST /estimates/{id}/line_items)
id(integer) - Estimate ID Body includes line item fields (item, name, cost, price, quantity, taxable)
Update Line Item (PUT /estimates/{id}/line_items/{line_item_id})
id,line_item_id- IDs Body includes updatable line item fields
Delete Line Item (DELETE /estimates/{id}/line_items/{line_item_id})
id,line_item_id- IDs
Convert to Invoice (POST /estimates/{id}/convert_to_invoice)
id(integer) - Estimate ID Requires "Estimates - View Details" and "Invoices - Create"
Print/Email:
POST /estimates/{id}/print- Queue print jobPOST /estimates/{id}/email- Email to customer
Example call:
// Create estimate with line items
const estimate = await skill({ name: "repairshopr-estimate" }, {
customer_id: 123,
date: "2024-01-15",
name: "Screen Replacement Estimate",
status: "Draft",
line_items: [
{ item: "LCD Display", name: "13\" Retina Display", cost: 150, price: 299, quantity: 1, taxable: true },
{ item: "Labor", name: "Screen Replacement Service", cost: 0, price: 89, quantity: 1, taxable: false }
]
})
// Add additional line item later
await skill({ name: "repairshopr-estimate" }, {
line_items: [
{ item: "Battery", name: "Replacement Battery", price: 79, quantity: 1 }
]
}, { id: estimate.estimate.id, method: 'POST', pathParams: { line_item_id: undefined } })
Response includes:
- Estimate object with
subtotal,total,tax,line_itemsarray,status, etc. - Convert returns
invoiceobject
Important
dateandcustomer_idare required for creation- Line items require
itemandpriceat minimum;costis optional valid itemerror occurs whenitemis blank- Converting to invoice requires at least one line item
Related skills
repairshopr-invoice- After estimate conversionrepairshopr-line-item- For line item managementrepairshopr-ticket-create- To link estimate to ticket