{"openapi":"3.0.3","info":{"title":"PreciQA ERP API","version":"1.0","description":"REST API of PreciQA ERP (inventory, sales, purchasing, manufacturing, quality).\n\nAuth: header `Authorization: Bearer pq_…` – create a key in Options → Integrations → API keys. Each key has its own access rights and locations, like a user.\n\nDocuments use these field names: salesOrderId, orderNumber, lines[], pickLines[], quantity.standardQuantity (string), quantity.serialNumbers[].\n\nWrites go through the same logic as the screens: totals, statuses, stock movements, numbering, quality control and the audit log (user = the key name)."},"servers":[{"url":"https://app.preciqa-erp.eu"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"API key pq_…"}}},"security":[{"bearer":[]}],"paths":{"/api/me":{"get":{"summary":"Who am I (the key, its rights and locations)","responses":{"200":{"description":"The key","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/lookups":{"get":{"summary":"Reference data: locations, categories, currencies, pricing/taxing schemes, tax codes, payment terms, operation types, team, settings","responses":{"200":{"description":"Lookups","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/list/{kind}":{"get":{"summary":"List documents (paged)","parameters":[{"name":"kind","in":"path","required":true,"description":"Document type","schema":{"type":"string","enum":["location","category","currency","pricingScheme","taxingScheme","taxCode","paymentTerms","adjustmentReason","operationType","teamMember","customFieldDefinition","lot","product","customer","vendor","salesOrder","purchaseOrder","manufacturingOrder","stockAdjustment","stockTransfer","stockCount","inspection","qcIssue"]}},{"name":"q","in":"query","required":false,"description":"Search text","schema":{"type":"string"}},{"name":"tab","in":"query","required":false,"description":"Orders: open | quote | unpaid | all; manufacture orders: current | all","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Comma separated statuses","schema":{"type":"string"}},{"name":"location","in":"query","required":false,"description":"locationId","schema":{"type":"string"}},{"name":"party","in":"query","required":false,"description":"customerId / vendorId / productId","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Date from (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"Date to","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max 500 (default 100)","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Paging offset","schema":{"type":"integer"}}],"responses":{"200":{"description":"{ rows: [{ id, num, status, date, party_id, location_id, total, balance, doc }], total }","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/doc/{kind}/{id}":{"get":{"summary":"Get one document","parameters":[{"name":"kind","in":"path","required":true,"description":"Document type","schema":{"type":"string","enum":["location","category","currency","pricingScheme","taxingScheme","taxCode","paymentTerms","adjustmentReason","operationType","teamMember","customFieldDefinition","lot","product","customer","vendor","salesOrder","purchaseOrder","manufacturingOrder","stockAdjustment","stockTransfer","stockCount","inspection","qcIssue"]}},{"name":"id","in":"path","required":true,"description":"Document id (GUID)","schema":{"type":"string"}}],"responses":{"200":{"description":"The document","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}},"put":{"summary":"Create (id = new) or update a document","parameters":[{"name":"kind","in":"path","required":true,"description":"Document type","schema":{"type":"string","enum":["location","category","currency","pricingScheme","taxingScheme","taxCode","paymentTerms","adjustmentReason","operationType","teamMember","customFieldDefinition","lot","product","customer","vendor","salesOrder","purchaseOrder","manufacturingOrder","stockAdjustment","stockTransfer","stockCount","inspection","qcIssue"]}},{"name":"id","in":"path","required":true,"description":"Document id, or \"new\"","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"The document as returned by GET (e.g. salesOrder: customerId, locationId, lines[{productId, quantity:{standardQuantity}, unitPrice}])"}}}},"responses":{"200":{"description":"The saved document (with its number and computed fields)","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}},"delete":{"summary":"Cancel an order (stock goes back) or deactivate a product/customer/vendor","parameters":[{"name":"kind","in":"path","required":true,"description":"Document type","schema":{"type":"string","enum":["location","category","currency","pricingScheme","taxingScheme","taxCode","paymentTerms","adjustmentReason","operationType","teamMember","customFieldDefinition","lot","product","customer","vendor","salesOrder","purchaseOrder","manufacturingOrder","stockAdjustment","stockTransfer","stockCount","inspection","qcIssue"]}},{"name":"id","in":"path","required":true,"description":"Document id","schema":{"type":"string"}}],"responses":{"200":{"description":"The document","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/action/{kind}/{id}/{action}":{"post":{"summary":"Quick action on an order","description":"salesOrder: pick, pack, ship, fulfill, unfulfill, restock, invoice, uninvoice, pay {amount, paymentMethod}, cancel, reopen, convert-order, convert-quote.\npurchaseOrder: receive, fulfill, unfulfill, unstock, pay, cancel, reopen.\nmanufacturingOrder: pick-all, unpick, start-op/stop-op/complete-op {operationId}, complete-partial {lines:[{lineId, qty}]}, complete, close-short, undo-completion, cancel {withChildren}, reopen {withChildren}, prioritize.\nOptional body.serials: { productId | lineId: [serial numbers] }.","parameters":[{"name":"kind","in":"path","required":true,"description":"salesOrder | purchaseOrder | manufacturingOrder | stockTransfer | stockAdjustment | stockCount","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"Document id","schema":{"type":"string"}},{"name":"action","in":"path","required":true,"description":"Action name","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"The saved document","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/stock":{"get":{"summary":"Current stock by product / location / sublocation / serial","parameters":[{"name":"location","in":"query","required":false,"description":"locationId","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Search","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"categoryId","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max 500","schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"description":"Offset","schema":{"type":"integer"}}],"responses":{"200":{"description":"{ rows, total }","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/quantities":{"get":{"summary":"On hand, reserved, on order, in manufacturing, available – per product","parameters":[{"name":"ids","in":"query","required":false,"description":"Comma separated productIds (empty = all)","schema":{"type":"string"}},{"name":"location","in":"query","required":false,"description":"locationId","schema":{"type":"string"}}],"responses":{"200":{"description":"{ productId: { onHand, reservedSales, reservedMO, onPO, onMO, available, inQC } }","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/many/{kind}":{"get":{"summary":"Several documents by id","parameters":[{"name":"kind","in":"path","required":true,"description":"Document type","schema":{"type":"string","enum":["location","category","currency","pricingScheme","taxingScheme","taxCode","paymentTerms","adjustmentReason","operationType","teamMember","customFieldDefinition","lot","product","customer","vendor","salesOrder","purchaseOrder","manufacturingOrder","stockAdjustment","stockTransfer","stockCount","inspection","qcIssue"]}},{"name":"ids","in":"query","required":true,"description":"Comma separated ids","schema":{"type":"string"}}],"responses":{"200":{"description":"{ id: document }","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/mo-buildable/{id}":{"get":{"summary":"How many finished products of a manufacture order can be completed now (and the bottleneck)","parameters":[{"name":"id","in":"path","required":true,"description":"manufacturingOrderId","schema":{"type":"string"}}],"responses":{"200":{"description":"{ roots: [{ canComplete, left, limits[] }] }","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/plan/{id}/report":{"get":{"summary":"Live plan report of a planned family (parent order)","parameters":[{"name":"id","in":"path","required":true,"description":"Parent manufacturingOrderId","schema":{"type":"string"}}],"responses":{"200":{"description":"Report","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/serials":{"get":{"summary":"Find a serial number (history across documents)","parameters":[{"name":"q","in":"query","required":true,"description":"At least 3 characters","schema":{"type":"string"}}],"responses":{"200":{"description":"[{ serial, product, inStock, events[] }]","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/qc/for-order":{"get":{"summary":"Inspections of an order","parameters":[{"name":"kind","in":"query","required":true,"description":"purchaseOrder | manufacturingOrder","schema":{"type":"string"}},{"name":"id","in":"query","required":true,"description":"Order id","schema":{"type":"string"}}],"responses":{"200":{"description":"{ inspections, missing }","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}},"/api/reports/{report}":{"get":{"summary":"Reports (add format=csv for CSV)","parameters":[{"name":"report","in":"path","required":true,"description":"Report id – GET /api/reports lists them","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Date from","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"Date to","schema":{"type":"string"}},{"name":"location","in":"query","required":false,"description":"locationId","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"csv","schema":{"type":"string"}}],"responses":{"200":{"description":"{ columns, rows }","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Missing or wrong API key"},"403":{"description":"The key has no right for this (Options → Integrations → API keys → Access rights)"}}}}}}