{"openapi":"3.1.0","info":{"title":"Pinventory Customer API","version":"1.0.0","description":"Read-only access to your Pinventory data: machines, locations, parts, maintenance, and revenue.\n\n## Authentication\nSend your API token as a bearer header: `Authorization: Bearer <token>`.\n**API tokens are generated and revoked by the business owner from [Settings → API Access](https://pinventory.app/settings#api-access) in the Pinventory app.** Tokens are shown once at creation — store them somewhere safe.\n\n## Rate limits\nEach token is limited to 60 requests/minute and 10,000 requests/day. Responses include `X-RateLimit-Minute-Remaining` and `X-RateLimit-Day-Remaining` headers, and a 429 status with `Retry-After` header when exceeded."},"servers":[{"url":"https://api.pinventory.app","description":"Production"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Create a token in [Settings → API Access](https://pinventory.app/settings#api-access) (business owners only). Paste it here without the \"Bearer \" prefix — Swagger adds it automatically."}},"schemas":{"Machine":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"manufacturer":{"type":["string","null"]},"year":{"type":["integer","null"]},"serial_number":{"type":["string","null"]},"status":{"type":"string"},"location_id":{"type":["string","null"],"format":"uuid"},"is_for_sale":{"type":"boolean"},"asking_price":{"type":["number","null"]},"purchase_date":{"type":["string","null"]},"purchase_price":{"type":["number","null"]},"notes":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","manufacturer","year","serial_number","status","location_id","is_for_sale","asking_price","purchase_date","purchase_price","notes","created_at","updated_at"]},"Location":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"address":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"contact_name":{"type":["string","null"]},"contact_email":{"type":["string","null"]},"contact_phone":{"type":["string","null"]},"revenue_model":{"type":"string"},"revenue_split_percent":{"type":"number"},"payout_frequency":{"type":"string"},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"notes":{"type":["string","null"]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","address","city","state","zip","contact_name","contact_email","contact_phone","revenue_model","revenue_split_percent","payout_frequency","latitude","longitude","notes","created_at","updated_at"]},"Part":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"description":{"type":["string","null"]},"sku":{"type":["string","null"]},"manufacturer_part_number":{"type":["string","null"]},"vendor_name":{"type":["string","null"]},"vendor_url":{"type":["string","null"]},"unit_cost":{"type":"number"},"qty_on_hand":{"type":"integer"},"reorder_threshold":{"type":"integer"},"bin_location":{"type":["string","null"]},"catalog_part_id":{"type":["string","null"],"format":"uuid"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","description","sku","manufacturer_part_number","vendor_name","vendor_url","unit_cost","qty_on_hand","reorder_threshold","bin_location","catalog_part_id","created_at","updated_at"]},"MaintenanceLog":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"machine_id":{"type":"string","format":"uuid"},"date":{"type":"string"},"type":{"type":"string"},"description":{"type":["string","null"]},"technician":{"type":["string","null"]},"cost":{"type":"number"},"photo_url":{"type":["string","null"]},"created_at":{"type":"string"}},"required":["id","machine_id","date","type","description","technician","cost","photo_url","created_at"]},"EarningsRecord":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"machine_id":{"type":"string","format":"uuid"},"location_id":{"type":["string","null"],"format":"uuid"},"amount":{"type":"number"},"period_start":{"type":"string"},"period_end":{"type":"string"},"created_at":{"type":"string"}},"required":["id","machine_id","location_id","amount","period_start","period_end","created_at"]},"LocationRevenue":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"location_id":{"type":"string","format":"uuid"},"amount":{"type":"number"},"entry_type":{"type":"string"},"source":{"type":"string"},"note":{"type":["string","null"]},"external_ref":{"type":["string","null"]},"period_start":{"type":"string"},"period_end":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","location_id","amount","entry_type","source","note","external_ref","period_start","period_end","created_at","updated_at"]}},"parameters":{}},"paths":{"/v1/machines":{"get":{"summary":"List machines","tags":["Machines"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string"},"required":false,"name":"status","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"location_id","in":"query"},{"schema":{"type":"string","enum":["true","false"]},"required":false,"name":"is_for_sale","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Machine"}},"count":{"type":"integer"}},"required":["data","count"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/v1/machines/{id}":{"get":{"summary":"Get a machine","tags":["Machines"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Machine"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/v1/locations":{"get":{"summary":"List locations","tags":["Locations"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Location"}},"count":{"type":"integer"}},"required":["data","count"]}}}}}}},"/v1/locations/{id}":{"get":{"summary":"Get a location","tags":["Locations"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Location"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/v1/parts":{"get":{"summary":"List parts inventory","tags":["Parts"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Part"}},"count":{"type":"integer"}},"required":["data","count"]}}}}}}},"/v1/parts/{id}":{"get":{"summary":"Get a part","tags":["Parts"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Part"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}}},"/v1/maintenance-logs":{"get":{"summary":"List maintenance logs","tags":["Maintenance"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"machine_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MaintenanceLog"}},"count":{"type":"integer"}},"required":["data","count"]}}}}}}},"/v1/earnings":{"get":{"summary":"List earnings records","tags":["Revenue"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"machine_id","in":"query"},{"schema":{"type":"string","format":"uuid"},"required":false,"name":"location_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EarningsRecord"}},"count":{"type":"integer"}},"required":["data","count"]}}}}}}},"/v1/location-revenue":{"get":{"summary":"List location revenue records","tags":["Revenue"],"security":[{"bearerAuth":[]}],"parameters":[{"schema":{"type":"string","format":"uuid"},"required":false,"name":"location_id","in":"query"},{"schema":{"type":"string"},"required":false,"name":"from","in":"query"},{"schema":{"type":"string"},"required":false,"name":"to","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":500,"default":100},"required":false,"name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0},"required":false,"name":"offset","in":"query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LocationRevenue"}},"count":{"type":"integer"}},"required":["data","count"]}}}}}}}},"webhooks":{}}