Invoices
29 real calls against a live Core. Open a call for its headers, request and response.
createInvoice
088JobCardDetails · generate-dispatchsupervisorPOST /graphql403 FORBIDDENAs decided5 ms
D5: a supervisor does not raise invoices or dispatch.
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-088",
"content-type": "application/json"
}Query
mutation AuditDispatchSup($input: InvoiceInput!) { createInvoice(input: $input) { id } }Variables
{
"input": {
"jobCardId": "01a14ba6-e65b-777f-9975-ca8ed40d8792",
"gstRate": 18,
"discount": 0,
"lines": [
{
"operation": "Turning",
"minutesPerPiece": 2,
"setupMinutes": 10,
"ratePerMinute": 1000
}
]
}
}Response · HTTP 403
{
"errors": [
{
"message": "You do not have access to this.",
"locations": [
{
"line": 1,
"column": 52
}
],
"path": [
"createInvoice"
],
"extensions": {
"code": "FORBIDDEN",
"message": "You do not have access to this.",
"requestId": "01a14ba9-9d14-7005-b923-c0163b924919"
}
}
],
"data": null
}147JobCardDetails · generate-dispatchownerPOST /graphql400 VALIDATION_FAILEDAs decided75 ms
D5: only a finished card is invoiced.
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-147",
"content-type": "application/json"
}Query
mutation AuditDispatch($input: InvoiceInput!) { createInvoice(input: $input) { ...INV } }
fragment INV on Invoice { id number customerId customerName jobCardId orderId routeCard part quantity status discount gstRate quoteId poAmount notes issuedAt dueDate lines { id operation description minutesPerPiece setupMinutes ratePerMinute amount } totals { subtotal discount taxable gstRate supply cgst sgst igst gst total } payment { paidOn receivedAmount tdsAmount tdsSection } }Variables
{
"input": {
"jobCardId": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"gstRate": 18,
"discount": 0,
"routeCard": "RC-AUDIT-1",
"lines": [
{
"operation": "Turning",
"minutesPerPiece": 2,
"setupMinutes": 10,
"ratePerMinute": 1000
}
]
}
}Response · HTTP 400
{
"errors": [
{
"message": "The request has invalid fields.",
"locations": [
{
"line": 1,
"column": 49
}
],
"path": [
"createInvoice"
],
"extensions": {
"code": "VALIDATION_FAILED",
"message": "The request has invalid fields.",
"requestId": "01a14ba9-e0cc-72dd-b8ce-34f452aa95f0",
"details": [
{
"path": "jobCardId",
"message": "all steps must be completed before invoicing"
}
]
}
}
],
"data": null
}195JobCardDetails · generate-dispatch-finishedownerPOST /graphql200 OKAs expected25 ms
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-195",
"content-type": "application/json"
}Query
mutation AuditFlowInvoice($input: InvoiceInput!) { createInvoice(input: $input) { id jobId status } }Variables
{
"input": {
"jobCardId": "01a14ba9-fab1-7d0b-863a-b3c7a7857bdf",
"gstRate": 18,
"lines": [
{
"operation": "Turning",
"minutesPerPiece": 2,
"setupMinutes": 10,
"ratePerMinute": 1000
}
]
}
}Response · HTTP 200
{
"data": {
"createInvoice": {
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"jobId": "WO-10",
"status": "NEW"
}
}
}invoice
142InvoiceDetails · loadownerPOST /graphql200 OKAs expected10 ms
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditInvoiceDetails($id: ID!) { invoice(id: $id) { ...INV } organisation { name address { line1 city state pincode } gstin phone email invoiceLogo { ...F } logo { ...F } termsAndConditions invoiceFooter signature { ...F } } }
fragment INV on Invoice { id number customerId customerName jobCardId orderId routeCard part quantity status discount gstRate quoteId poAmount notes issuedAt dueDate lines { id operation description minutesPerPiece setupMinutes ratePerMinute amount } totals { subtotal discount taxable gstRate supply cgst sgst igst gst total } payment { paidOn receivedAmount tdsAmount tdsSection } }
fragment F on AppFileReference { id name kind sizeBytes }Variables
{
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc"
}Response · HTTP 200
{
"data": {
"invoice": {
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"number": "CBE/26-27/0002",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"customerName": "Demo Auto Components",
"jobCardId": "01a14ba6-e649-75ad-bbc9-16d7ecd00878",
"orderId": "01a14ba6-e649-7d5b-9cc7-beaf68d484d7",
"routeCard": "JC-00002",
"part": "Valve spindle",
"quantity": 80,
"status": "NEW",
"discount": 0,
"gstRate": 18,
"quoteId": null,
"poAmount": null,
"notes": null,
"issuedAt": "2026-10-18",
"dueDate": "2026-11-17",
"lines": [
{
"id": "01a14ba6-e834-7522-b8bb-9760c119f49d",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 787500
},
{
"id": "01a14ba6-e834-79d8-b991-0695c09addf2",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 64000
}
],
"totals": {
"subtotal": 851500,
"discount": 0,
"taxable": 851500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 76635,
"sgst": 76635,
"igst": 0,
"gst": 153270,
"total": 1004770
},
"payment": null
},
"organisation": {
"name": "Demo Coimbatore Works",
"address": {
"line1": "10 Synthetic Works Road",
"city": "Coimbatore",
"state": "Tamil Nadu",
"pincode": "641001"
},
"gstin": "33DEMOA0001A1Z5",
"phone": "+919000000100",
"email": "office@example.test",
"invoiceLogo": null,
"logo": null,
"termsAndConditions": "Synthetic terms",
"invoiceFooter": "Thank you",
"signature": null
}
}
}143InvoiceDetails · show-wo-numberownerPOST /graphql200 OKAs expected16 ms
The app shows the work order as jobId (WO number).
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditInvoiceJobId($id: ID!) { invoice(id: $id) { id jobId } }Variables
{
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc"
}Response · HTTP 200
{
"data": {
"invoice": {
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"jobId": "WO-2"
}
}
}197InvoiceDetails · show-wo-number-flowownerPOST /graphql200 OKAs expected13 ms
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditFlowJobId($id: ID!) { invoice(id: $id) { id jobId } }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c"
}Response · HTTP 200
{
"data": {
"invoice": {
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"jobId": "WO-10"
}
}
}211InvoiceDetails · download-pdfownerPOST /graphql200 OKAs expected47 ms
G25: rendered on first ask, stored as a READY file on the invoice.
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query ProofInvoicePdf($id: ID!) { invoice(id: $id) { id number pdfFile { ...F } } }
fragment F on AppFileReference { id name kind sizeBytes }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c"
}Response · HTTP 200
{
"data": {
"invoice": {
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"number": "DCW/26-27/0101",
"pdfFile": {
"id": "01a14bff-9f26-7549-ac95-d7c5aa6a77fd",
"name": "DCW-26-27-0101.pdf",
"kind": "invoice_pdf",
"sizeBytes": 3620
}
}
}
}212InvoiceDetails · download-pdf-againownerPOST /graphql200 OKAs expected26 ms
Same content: the same file id comes back, nothing is rendered.
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query ProofInvoicePdf($id: ID!) { invoice(id: $id) { id number pdfFile { ...F } } }
fragment F on AppFileReference { id name kind sizeBytes }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c"
}Response · HTTP 200
{
"data": {
"invoice": {
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"number": "DCW/26-27/0101",
"pdfFile": {
"id": "01a14bff-9f26-7549-ac95-d7c5aa6a77fd",
"name": "DCW-26-27-0101.pdf",
"kind": "invoice_pdf",
"sizeBytes": 3620
}
}
}
}215InvoiceDetails · download-pdf-after-settingsownerPOST /graphql200 OKAs expected32 ms
Printed content changed: a new file is rendered; the old one stays.
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query ProofInvoicePdf($id: ID!) { invoice(id: $id) { id number pdfFile { ...F } } }
fragment F on AppFileReference { id name kind sizeBytes }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c"
}Response · HTTP 200
{
"data": {
"invoice": {
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"number": "DCW/26-27/0101",
"pdfFile": {
"id": "01a14bff-a40c-7847-b8db-fc4fd7e141b5",
"name": "DCW-26-27-0101.pdf",
"kind": "invoice_pdf",
"sizeBytes": 3997
}
}
}
}225InvoiceDetails · download-pdfoperatorPOST /graphql403 FORBIDDENAs expected15 ms
D7.
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query ProofInvoicePdf($id: ID!) { invoice(id: $id) { id number pdfFile { ...F } } }
fragment F on AppFileReference { id name kind sizeBytes }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c"
}Response · HTTP 403
{
"errors": [
{
"message": "You do not have access to this.",
"locations": [
{
"line": 1,
"column": 35
}
],
"path": [
"invoice"
],
"extensions": {
"code": "FORBIDDEN",
"message": "You do not have access to this.",
"requestId": "01a14c00-02b7-701a-bb31-7e0993e8de46"
}
}
],
"data": null
}231InvoiceDetails · download-pdfqcPOST /graphql403 FORBIDDENAs expected14 ms
D7.
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query ProofInvoicePdf($id: ID!) { invoice(id: $id) { id number pdfFile { ...F } } }
fragment F on AppFileReference { id name kind sizeBytes }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c"
}Response · HTTP 403
{
"errors": [
{
"message": "You do not have access to this.",
"locations": [
{
"line": 1,
"column": 35
}
],
"path": [
"invoice"
],
"extensions": {
"code": "FORBIDDEN",
"message": "You do not have access to this.",
"requestId": "01a14c00-092a-7c47-8e71-0660b343cf23"
}
}
],
"data": null
}invoices
017Discovery · live-idsownerPOST /graphql200 OKAs expected38 ms
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditDiscovery {
customers(first: 10) { edges { node { id name billingAddress { city } } } }
orders(first: 10) { edges { node { id number jobCardId customerId status routeCardNo poNumber } } }
jobCards(first: 10) { edges { node { id orderId code qrValue status billing materialQc designApproval operations { id seq name status operatorId } } } }
machines(first: 10) { edges { node { id code status } } }
quotes(first: 10) { edges { node { id status orderId customerId } } }
invoices(first: 10) { edges { node { id status orderId jobCardId } } }
users(first: 30) { edges { node { id role name status } } } }Variables
{}Response · HTTP 200
{
"data": {
"customers": {
"edges": [
{
"node": {
"id": "01a14ba6-e56a-7478-990d-ceec492d63e7",
"name": "Demo Agro Implements",
"billingAddress": {
"city": "Tiruppur"
}
}
},
{
"node": {
"id": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"name": "Demo Auto Components",
"billingAddress": {
"city": "Tiruppur"
}
}
},
{
"node": {
"id": "01a14ba6-e579-7091-b879-fd026c5ab537",
"name": "Demo Hydraulics",
"billingAddress": {
"city": "Bengaluru"
}
}
},
{
"node": {
"id": "01a14ba6-e533-720d-adca-0c4fb0dedcdd",
"name": "Demo Pumps & Valves",
"billingAddress": {
"city": "Coimbatore"
}
}
},
{
"node": {
"id": "01a14ba6-e55f-7151-850b-de9c5dbe0224",
"name": "Demo Textile Machinery",
"billingAddress": {
"city": "Coimbatore"
}
}
}
]
},
"orders": {
"edges": [
{
"node": {
"id": "01a14ba6-e66c-7460-9ced-7abbb006f491",
"number": "WO-4",
"jobCardId": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7",
"status": "NEW",
"routeCardNo": null,
"poNumber": "DEMO-COI-PO-004"
}
},
{
"node": {
"id": "01a14ba6-e60b-78e2-be46-05dfc8ff1cff",
"number": "WO-1",
"jobCardId": "01a14ba6-e60b-76c9-90a1-2e48ac0af20c",
"customerId": "01a14ba6-e533-720d-adca-0c4fb0dedcdd",
"status": "COMPLETED",
"routeCardNo": null,
"poNumber": "DEMO-COI-PO-001"
}
},
{
"node": {
"id": "01a14ba6-e649-7d5b-9cc7-beaf68d484d7",
"number": "WO-2",
"jobCardId": "01a14ba6-e649-75ad-bbc9-16d7ecd00878",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"status": "PAYMENT_DUE",
"routeCardNo": null,
"poNumber": "DEMO-COI-PO-002"
}
},
{
"node": {
"id": "01a14ba6-e65b-7f56-8b35-19dd1d9b93d2",
"number": "WO-3",
"jobCardId": "01a14ba6-e65b-777f-9975-ca8ed40d8792",
"customerId": "01a14ba6-e55f-7151-850b-de9c5dbe0224",
"status": "IN_PROGRESS",
"routeCardNo": null,
"poNumber": "DEMO-COI-PO-003"
}
},
{
"node": {
"id": "01a14ba6-e67d-7144-a636-1c77ab125e29",
"number": "WO-5",
"jobCardId": "01a14ba6-e67d-7757-8629-269f740c10ba",
"customerId": "01a14ba6-e579-7091-b879-fd026c5ab537",
"status": "NEW",
"routeCardNo": null,
"poNumber": "DEMO-COI-PO-005"
}
},
{
"node": {
"id": "01a14ba6-e695-7d5c-b505-a59fd80251a9",
"number": "WO-6",
"jobCardId": "01a14ba6-e695-7571-8b02-2a50cf0c7c89",
"customerId": "01a14ba6-e533-720d-adca-0c4fb0dedcdd",
"status": "NEW",
"routeCardNo": null,
"poNumber": "DEMO-COI-PO-006"
}
}
]
},
"jobCards": {
"edges": [
{
"node": {
"id": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"orderId": "01a14ba6-e66c-7460-9ced-7abbb006f491",
"code": "JOB4",
"qrValue": "JC-00004",
"status": "NOT_STARTED",
"billing": "NOT_INVOICED",
"materialQc": "ACCEPTED",
"designApproval": "PENDING",
"operations": [
{
"id": "01a14ba6-e670-7383-a269-879726ac44d1",
"seq": 1,
"name": "Turning",
"status": "PENDING",
"operatorId": null
},
{
"id": "01a14ba6-e670-7e54-bd33-df068f305cd2",
"seq": 2,
"name": "Milling",
"status": "PENDING",
"operatorId": null
},
{
"id": "01a14ba6-e670-7507-aae3-49f3c9cf0ef1",
"seq": 3,
"name": "Finishing",
"status": "PENDING",
"operatorId": null
}
]
}
},
{
"node": {
"id": "01a14ba6-e60b-76c9-90a1-2e48ac0af20c",
"orderId": "01a14ba6-e60b-78e2-be46-05dfc8ff1cff",
"code": "JOB1",
"qrValue": "JC-00001",
"status": "COMPLETED",
"billing": "INVOICED",
"materialQc": "ACCEPTED",
"designApproval": "APPROVED",
"operations": [
{
"id": "01a14ba6-e626-76cf-b05f-c274e0674ee7",
"seq": 1,
"name": "Turning",
"status": "COMPLETED",
"operatorId": "01a14ba6-e46a-7f5d-8e34-76cbfb26b5ab"
},
{
"id": "01a14ba6-e627-719c-806b-ac64265762a5",
"seq": 2,
"name": "Milling",
"status": "COMPLETED",
"operatorId": "01a14ba6-e46a-7f5d-8e34-76cbfb26b5ab"
},
{
"id": "01a14ba6-e627-7e03-9a71-6f42bd07e4d2",
"seq": 3,
"name": "Finishing",
"status": "COMPLETED",
"operatorId": "01a14ba6-e46a-7f5d-8e34-76cbfb26b5ab"
}
]
}
},
{
"node": {
"id": "01a14ba6-e649-75ad-bbc9-16d7ecd00878",
"orderId": "01a14ba6-e649-7d5b-9cc7-beaf68d484d7",
"code": "JOB2",
"qrValue": "JC-00002",
"status": "COMPLETED",
"billing": "INVOICED",
"materialQc": "ACCEPTED",
"designApproval": "APPROVED",
"operations": [
{
"id": "01a14ba6-e64d-7037-9764-d88565c28617",
"seq": 1,
"name": "Turning",
"status": "COMPLETED",
"operatorId": "01a14ba6-e46a-7f5d-8e34-76cbfb26b5ab"
},
{
"id": "01a14ba6-e64d-74b2-b6a0-86adb5271663",
"seq": 2,
"name": "Milling",
"status": "COMPLETED",
"operatorId": "01a14ba6-e46a-7f5d-8e34-76cbfb26b5ab"
},
{
"id": "01a14ba6-e64d-7558-9888-cbe24e46077f",
"seq": 3,
"name": "Finishing",
"status": "COMPLETED",
"operatorId": "01a14ba6-e46a-7f5d-8e34-76cbfb26b5ab"
}
]
}
},
{
"node": {
"id": "01a14ba6-e65b-777f-9975-ca8ed40d8792",
"orderId": "01a14ba6-e65b-7f56-8b35-19dd1d9b93d2",
"code": "JOB3",
"qrValue": "JC-00003",
"status": "IN_PROGRESS",
"billing": "NOT_INVOICED",
"materialQc": "ACCEPTED",
"designApproval": "APPROVED",
"operations": [
{
"id": "01a14ba6-e65f-75d4-bf28-cbbe41f127f6",
"seq": 1,
"name": "Turning",
"status": "RUNNING",
"operatorId": "01a14ba6-e46a-7f5d-8e34-76cbfb26b5ab"
},
{
"id": "01a14ba6-e65f-7d50-be77-0daed0461d04",
"seq": 2,
"name": "Milling",
"status": "PENDING",
"operatorId": null
},
{
"id": "01a14ba6-e65f-7f06-96f5-34afdc3af49f",
"seq": 3,
"name": "Finishing",
"status": "PENDING",
"operatorId": null
}
]
}
},
{
"node": {
"id": "01a14ba6-e67d-7757-8629-269f740c10ba",
"orderId": "01a14ba6-e67d-7144-a636-1c77ab125e29",
"code": "JOB5",
"qrValue": "JC-00005",
"status": "NOT_STARTED",
"billing": "NOT_INVOICED",
"materialQc": "REJECTED",
"designApproval": "PENDING",
"operations": [
{
"id": "01a14ba6-e682-7349-b544-8bd33b0c693f",
"seq": 1,
"name": "Turning",
"status": "PENDING",
"operatorId": null
},
{
"id": "01a14ba6-e682-76bb-b257-93119fc4aadd",
"seq": 2,
"name": "Milling",
"status": "PENDING",
"operatorId": null
},
{
"id": "01a14ba6-e682-7879-8c84-2a65306245fb",
"seq": 3,
"name": "Finishing",
"status": "PENDING",
"operatorId": null
}
]
}
},
{
"node": {
"id": "01a14ba6-e695-7571-8b02-2a50cf0c7c89",
"orderId": "01a14ba6-e695-7d5c-b505-a59fd80251a9",
"code": "JOB6",
"qrValue": "JC-00006",
"status": "NOT_STARTED",
"billing": "NOT_INVOICED",
"materialQc": "PENDING",
"designApproval": "PENDING",
"operations": [
{
"id": "01a14ba6-e69b-7919-9161-b21877f4db19",
"seq": 1,
"name": "Turning",
"status": "PENDING",
"operatorId": null
},
{
"id": "01a14ba6-e69b-7a95-ac75-3551e1cd0d72",
"seq": 2,
"name": "Milling",
"status": "PENDING",
"operatorId": null
},
{
"id": "01a14ba6-e69b-777e-8426-b9ebd85d207a",
"seq": 3,
"name": "Finishing",
"status": "PENDING",
"operatorId": null
}
]
}
}
]
},
"machines": {
"edges": [
{
"node": {
"id": "01a14ba6-e589-7248-a7e0-1239851b82aa",
"code": "MC-851B82AA",
"status": "RUNNING"
}
},
{
"node": {
"id": "01a14ba6-e59c-7f83-8eb9-96f1137e4b98",
"code": "MC-137E4B98",
"status": "IDLE"
}
},
{
"node": {
"id": "01a14ba6-e5d7-711c-bcba-22be75d5d8b4",
"code": "MC-75D5D8B4",
"status": "MAINTENANCE"
}
},
{
"node": {
"id": "01a14ba6-e5b5-71f3-aaea-903c4d97acc6",
"code": "MC-4D97ACC6",
"status": "IDLE"
}
}
]
},
"quotes": {
"edges": [
{
"node": {
"id": "01a14ba6-e68b-7186-9275-d44e3591f471",
"status": "SENT",
"orderId": null,
"customerId": "01a14ba6-e55f-7151-850b-de9c5dbe0224"
}
},
{
"node": {
"id": "01a14ba6-e678-7c29-b24d-e8d8f0d4ac48",
"status": "DRAFT",
"orderId": null,
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e"
}
}
]
},
"invoices": {
"edges": [
{
"node": {
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"status": "NEW",
"orderId": "01a14ba6-e649-7d5b-9cc7-beaf68d484d7",
"jobCardId": "01a14ba6-e649-75ad-bbc9-16d7ecd00878"
}
},
{
"node": {
"id": "01a14ba6-e818-7935-ad87-c0e2a7448c5a",
"status": "PAID",
"orderId": "01a14ba6-e60b-78e2-be46-05dfc8ff1cff",
"jobCardId": "01a14ba6-e60b-76c9-90a1-2e48ac0af20c"
}
}
]
},
"users": {
"edges": [
{
"node": {
"id": "01a14ba6-e4e7-7b64-88ac-67a67b46b313",
"role": "ACCOUNTANT",
"name": "Demo Accountant",
"status": "ACTIVE"
}
},
{
"node": {
"id": "01a14ba6-e420-7894-9aa9-5dd131ee9c29",
"role": "ADMIN",
"name": "Demo Admin",
"status": "ACTIVE"
}
},
{
"node": {
"id": "01a14ba6-e48b-766b-8c6b-8862bea47064",
"role": "QC",
"name": "Demo Inspector",
"status": "ACTIVE"
}
},
{
"node": {
"id": "01a14ba6-e46a-7f5d-8e34-76cbfb26b5ab",
"role": "OPERATOR",
"name": "Demo Operator",
"status": "ACTIVE"
}
},
{
"node": {
"id": "01a14ba6-e3c9-75f4-bf79-c35ada7f69bd",
"role": "OWNER",
"name": "Demo Owner",
"status": "ACTIVE"
}
},
{
"node": {
"id": "01a14ba6-e442-7fae-b468-bf9fee75d9ec",
"role": "SUPERVISOR",
"name": "Demo Supervisor",
"status": "ACTIVE"
}
}
]
}
}
}067OrderDetails · loadownerPOST /graphql200 OKAs expected41 ms
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditOrderDetails($id: ID!, $cardId: ID!, $customerId: ID!) { order(id: $id) { ...ORD } customer(id: $customerId) { id name email mobile } jobCard(id: $cardId) { ...J } invoices(first: 2, filter: { orderId: $id }) { totalCount edges { node { id number status } } } }
fragment ORD on Order { id jobCardId customerId customerName customerEmail partName jobName description quantity priority status dueDate poNumber poAmount routeCardNo dcNo dcDate partNumber drawingNumber rmPartNumber shopOrderNumber rawMaterialSize heatNumber projectId rawMaterialGrade materialSource quoteId notes createdAt designFile { ...F } documents { ...F } statusHistory { id label detail at tone } }
fragment F on AppFileReference { id name kind sizeBytes }
fragment J on JobCard { id orderId code qrValue customerId customerName partName jobName material quantity priority dueDate status designApproval materialSource materialQc quotation billing designFile { ...F } operations { ...OP } qcHistory { ...QR } }
fragment OP on JobOperation { id seq name machineId machineName operatorId operatorName status startedAt completedAt }
fragment QR on QcRecord { id kind stage result remark recordedAt jobOperationId inspector rejectedMaterial { grade heatNumber size } report { ...F } }Variables
{
"id": "01a14ba6-e66c-7460-9ced-7abbb006f491",
"cardId": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7"
}Response · HTTP 200
{
"data": {
"order": {
"id": "01a14ba6-e66c-7460-9ced-7abbb006f491",
"jobCardId": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7",
"customerName": "Demo Agro Implements",
"customerEmail": null,
"partName": "Bearing housing",
"jobName": null,
"description": null,
"quantity": 40,
"priority": "HIGH",
"status": "NEW",
"dueDate": "2026-10-23",
"poNumber": "DEMO-COI-PO-004",
"poAmount": null,
"routeCardNo": null,
"dcNo": null,
"dcDate": null,
"partNumber": null,
"drawingNumber": null,
"rmPartNumber": null,
"shopOrderNumber": null,
"rawMaterialSize": "Ø40 x 3000 mm",
"heatNumber": null,
"projectId": null,
"rawMaterialGrade": "EN8",
"materialSource": "BOUGHT_OUT",
"quoteId": null,
"notes": null,
"createdAt": "2026-10-17T20:56:31.594Z",
"designFile": null,
"documents": [],
"statusHistory": [
{
"id": "01a14ba6-e66d-7d11-8ca9-c400735bf62f",
"label": "Order created",
"detail": null,
"at": "2026-10-17T20:56:31.597Z",
"tone": "INFO"
},
{
"id": "01a14ba6-e89b-7df7-bf86-2d5bc146ca88",
"label": "Incoming inspection: accepted",
"detail": "Material and size as per drawing",
"at": "2026-10-17T20:56:32.155Z",
"tone": "SUCCESS"
}
]
},
"customer": {
"id": "01a14ba6-e56a-7478-990d-ceec492d63e7",
"name": "Demo Agro Implements",
"email": null,
"mobile": ""
},
"jobCard": {
"id": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"orderId": "01a14ba6-e66c-7460-9ced-7abbb006f491",
"code": "JOB4",
"qrValue": "JC-00004",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7",
"customerName": "Demo Agro Implements",
"partName": "Bearing housing",
"jobName": null,
"material": "EN8 steel",
"quantity": 40,
"priority": "HIGH",
"dueDate": "2026-10-23",
"status": "NOT_STARTED",
"designApproval": "PENDING",
"materialSource": "BOUGHT_OUT",
"materialQc": "ACCEPTED",
"quotation": "PENDING",
"billing": "NOT_INVOICED",
"designFile": null,
"operations": [
{
"id": "01a14ba6-e670-7383-a269-879726ac44d1",
"seq": 1,
"name": "Turning",
"machineId": null,
"machineName": null,
"operatorId": null,
"operatorName": null,
"status": "PENDING",
"startedAt": null,
"completedAt": null
},
{
"id": "01a14ba6-e670-7e54-bd33-df068f305cd2",
"seq": 2,
"name": "Milling",
"machineId": null,
"machineName": null,
"operatorId": null,
"operatorName": null,
"status": "PENDING",
"startedAt": null,
"completedAt": null
},
{
"id": "01a14ba6-e670-7507-aae3-49f3c9cf0ef1",
"seq": 3,
"name": "Finishing",
"machineId": null,
"machineName": null,
"operatorId": null,
"operatorName": null,
"status": "PENDING",
"startedAt": null,
"completedAt": null
}
],
"qcHistory": [
{
"id": "01a14ba6-e897-79fd-bb0c-5fdfbe1ae7ed",
"kind": "RM",
"stage": "Incoming inspection",
"result": "ACCEPTED",
"remark": "Material and size as per drawing",
"recordedAt": "2026-10-17T20:56:32.134Z",
"jobOperationId": null,
"inspector": "Demo Inspector",
"rejectedMaterial": null,
"report": null
}
]
},
"invoices": {
"totalCount": 0,
"edges": []
}
}
}068OrderDetails · load-without-customer-mobileownerPOST /graphql200 OKAs expected24 ms
Control: same screen with `phone` in place of the app `mobile`.
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditOrderDetailsLive($id: ID!, $cardId: ID!, $customerId: ID!) { order(id: $id) { ...ORD } customer(id: $customerId) { id name email phone } jobCard(id: $cardId) { ...J } invoices(first: 2, filter: { orderId: $id }) { totalCount edges { node { id number status } } } }
fragment ORD on Order { id jobCardId customerId customerName customerEmail partName jobName description quantity priority status dueDate poNumber poAmount routeCardNo dcNo dcDate partNumber drawingNumber rmPartNumber shopOrderNumber rawMaterialSize heatNumber projectId rawMaterialGrade materialSource quoteId notes createdAt designFile { ...F } documents { ...F } statusHistory { id label detail at tone } }
fragment F on AppFileReference { id name kind sizeBytes }
fragment J on JobCard { id orderId code qrValue customerId customerName partName jobName material quantity priority dueDate status designApproval materialSource materialQc quotation billing designFile { ...F } operations { ...OP } qcHistory { ...QR } }
fragment OP on JobOperation { id seq name machineId machineName operatorId operatorName status startedAt completedAt }
fragment QR on QcRecord { id kind stage result remark recordedAt jobOperationId inspector rejectedMaterial { grade heatNumber size } report { ...F } }Variables
{
"id": "01a14ba6-e66c-7460-9ced-7abbb006f491",
"cardId": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7"
}Response · HTTP 200
{
"data": {
"order": {
"id": "01a14ba6-e66c-7460-9ced-7abbb006f491",
"jobCardId": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7",
"customerName": "Demo Agro Implements",
"customerEmail": null,
"partName": "Bearing housing",
"jobName": null,
"description": null,
"quantity": 40,
"priority": "HIGH",
"status": "NEW",
"dueDate": "2026-10-23",
"poNumber": "DEMO-COI-PO-004",
"poAmount": null,
"routeCardNo": null,
"dcNo": null,
"dcDate": null,
"partNumber": null,
"drawingNumber": null,
"rmPartNumber": null,
"shopOrderNumber": null,
"rawMaterialSize": "Ø40 x 3000 mm",
"heatNumber": null,
"projectId": null,
"rawMaterialGrade": "EN8",
"materialSource": "BOUGHT_OUT",
"quoteId": null,
"notes": null,
"createdAt": "2026-10-17T20:56:31.594Z",
"designFile": null,
"documents": [],
"statusHistory": [
{
"id": "01a14ba6-e66d-7d11-8ca9-c400735bf62f",
"label": "Order created",
"detail": null,
"at": "2026-10-17T20:56:31.597Z",
"tone": "INFO"
},
{
"id": "01a14ba6-e89b-7df7-bf86-2d5bc146ca88",
"label": "Incoming inspection: accepted",
"detail": "Material and size as per drawing",
"at": "2026-10-17T20:56:32.155Z",
"tone": "SUCCESS"
}
]
},
"customer": {
"id": "01a14ba6-e56a-7478-990d-ceec492d63e7",
"name": "Demo Agro Implements",
"email": null,
"phone": null
},
"jobCard": {
"id": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1",
"orderId": "01a14ba6-e66c-7460-9ced-7abbb006f491",
"code": "JOB4",
"qrValue": "JC-00004",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7",
"customerName": "Demo Agro Implements",
"partName": "Bearing housing",
"jobName": null,
"material": "EN8 steel",
"quantity": 40,
"priority": "HIGH",
"dueDate": "2026-10-23",
"status": "NOT_STARTED",
"designApproval": "PENDING",
"materialSource": "BOUGHT_OUT",
"materialQc": "ACCEPTED",
"quotation": "PENDING",
"billing": "NOT_INVOICED",
"designFile": null,
"operations": [
{
"id": "01a14ba6-e670-7383-a269-879726ac44d1",
"seq": 1,
"name": "Turning",
"machineId": null,
"machineName": null,
"operatorId": null,
"operatorName": null,
"status": "PENDING",
"startedAt": null,
"completedAt": null
},
{
"id": "01a14ba6-e670-7e54-bd33-df068f305cd2",
"seq": 2,
"name": "Milling",
"machineId": null,
"machineName": null,
"operatorId": null,
"operatorName": null,
"status": "PENDING",
"startedAt": null,
"completedAt": null
},
{
"id": "01a14ba6-e670-7507-aae3-49f3c9cf0ef1",
"seq": 3,
"name": "Finishing",
"machineId": null,
"machineName": null,
"operatorId": null,
"operatorName": null,
"status": "PENDING",
"startedAt": null,
"completedAt": null
}
],
"qcHistory": [
{
"id": "01a14ba6-e897-79fd-bb0c-5fdfbe1ae7ed",
"kind": "RM",
"stage": "Incoming inspection",
"result": "ACCEPTED",
"remark": "Material and size as per drawing",
"recordedAt": "2026-10-17T20:56:32.134Z",
"jobOperationId": null,
"inspector": "Demo Inspector",
"rejectedMaterial": null,
"report": null
}
]
},
"invoices": {
"totalCount": 0,
"edges": []
}
}
}085JobCardDetails · existing-invoicesupervisorPOST /graphql403 FORBIDDENAs decided6 ms
D5: a supervisor does not read invoices.
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditCardInvoices($id: ID!) { invoices(first: 1, filter: { jobCardId: $id }) { totalCount edges { node { id number } } } }Variables
{
"id": "01a14ba6-e66c-79e7-b2cf-2c2dcc9126a1"
}Response · HTTP 403
{
"errors": [
{
"message": "You do not have access to this.",
"locations": [
{
"line": 1,
"column": 37
}
],
"path": [
"invoices"
],
"extensions": {
"code": "FORBIDDEN",
"message": "You do not have access to this.",
"requestId": "01a14ba9-99ad-70cf-ac38-6582c70f7e8a"
}
}
],
"data": null
}130Billing · loadownerPOST /graphql200 OKAs expected60 ms
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditBilling { invoices(first: 5, sort: { field: NUMBER, direction: DESC }) { totalCount edges { node { ...INV } } } invoiceSummary { total new overdue paid billedThisMonth outstanding overdueAmount } quotes(first: 5, sort: { field: NUMBER, direction: DESC }) { totalCount edges { node { ...QT } } } quoteAll: quotes(first: 1) { totalCount } quoteDraft: quotes(first: 1, filter: { status: DRAFT }) { totalCount } quoteSent: quotes(first: 1, filter: { status: SENT }) { totalCount } }
fragment INV on Invoice { id number customerId customerName jobCardId orderId routeCard part quantity status discount gstRate quoteId poAmount notes issuedAt dueDate lines { id operation description minutesPerPiece setupMinutes ratePerMinute amount } totals { subtotal discount taxable gstRate supply cgst sgst igst gst total } payment { paidOn receivedAmount tdsAmount tdsSection } }
fragment QT on Quote { id number customerId customerName part quantity material status gstRate orderId createdAt lines { id operation description minutesPerPiece setupMinutes ratePerMinute amount } totals { subtotal discount taxable gstRate supply cgst sgst igst gst total } }Variables
{}Response · HTTP 200
{
"data": {
"invoices": {
"totalCount": 2,
"edges": [
{
"node": {
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"number": "CBE/26-27/0002",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"customerName": "Demo Auto Components",
"jobCardId": "01a14ba6-e649-75ad-bbc9-16d7ecd00878",
"orderId": "01a14ba6-e649-7d5b-9cc7-beaf68d484d7",
"routeCard": "JC-00002",
"part": "Valve spindle",
"quantity": 80,
"status": "NEW",
"discount": 0,
"gstRate": 18,
"quoteId": null,
"poAmount": null,
"notes": null,
"issuedAt": "2026-10-18",
"dueDate": "2026-11-17",
"lines": [
{
"id": "01a14ba6-e834-7522-b8bb-9760c119f49d",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 787500
},
{
"id": "01a14ba6-e834-79d8-b991-0695c09addf2",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 64000
}
],
"totals": {
"subtotal": 851500,
"discount": 0,
"taxable": 851500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 76635,
"sgst": 76635,
"igst": 0,
"gst": 153270,
"total": 1004770
},
"payment": null
}
},
{
"node": {
"id": "01a14ba6-e818-7935-ad87-c0e2a7448c5a",
"number": "CBE/26-27/0001",
"customerId": "01a14ba6-e533-720d-adca-0c4fb0dedcdd",
"customerName": "Demo Pumps & Valves",
"jobCardId": "01a14ba6-e60b-76c9-90a1-2e48ac0af20c",
"orderId": "01a14ba6-e60b-78e2-be46-05dfc8ff1cff",
"routeCard": "JC-00001",
"part": "Pump shaft",
"quantity": 120,
"status": "PAID",
"discount": 0,
"gstRate": 18,
"quoteId": null,
"poAmount": null,
"notes": null,
"issuedAt": "2026-10-18",
"dueDate": "2026-11-17",
"lines": [
{
"id": "01a14ba6-e817-747b-99d8-4c200a0ecb59",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 1147500
},
{
"id": "01a14ba6-e817-7d7a-87f4-5d54ed3702d6",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 96000
}
],
"totals": {
"subtotal": 1243500,
"discount": 0,
"taxable": 1243500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 111915,
"sgst": 111915,
"igst": 0,
"gst": 223830,
"total": 1467330
},
"payment": {
"paidOn": "2026-10-18",
"receivedAmount": 1442460,
"tdsAmount": 24870,
"tdsSection": "194C"
}
}
}
]
},
"invoiceSummary": {
"total": 2,
"new": 1,
"overdue": 0,
"paid": 1,
"billedThisMonth": 2472100,
"outstanding": 1004770,
"overdueAmount": 0
},
"quotes": {
"totalCount": 2,
"edges": [
{
"node": {
"id": "01a14ba6-e68b-7186-9275-d44e3591f471",
"number": "QTN/26-27/0002",
"customerId": "01a14ba6-e55f-7151-850b-de9c5dbe0224",
"customerName": "Demo Textile Machinery",
"part": "Spline shaft",
"quantity": 100,
"material": "EN19 steel",
"status": "SENT",
"gstRate": 18,
"orderId": null,
"createdAt": "2026-10-17T20:56:31.680Z",
"lines": [
{
"id": "01a14ba6-e68b-70d0-bdb2-cf0c1c5ee97d",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 967500
},
{
"id": "01a14ba6-e68b-74f5-b24b-0d37caf8aa51",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 80000
}
],
"totals": {
"subtotal": 1047500,
"discount": 0,
"taxable": 1047500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 94275,
"sgst": 94275,
"igst": 0,
"gst": 188550,
"total": 1236050
}
}
},
{
"node": {
"id": "01a14ba6-e678-7c29-b24d-e8d8f0d4ac48",
"number": "QTN/26-27/0001",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"customerName": "Demo Auto Components",
"part": "Hydraulic cylinder rod",
"quantity": 50,
"material": "EN19 steel",
"status": "DRAFT",
"gstRate": 18,
"orderId": null,
"createdAt": "2026-10-17T20:56:31.655Z",
"lines": [
{
"id": "01a14ba6-e677-7155-8386-86e3b75f4134",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 517500
},
{
"id": "01a14ba6-e677-7b39-8b3d-1b7247c34946",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 40000
}
],
"totals": {
"subtotal": 557500,
"discount": 0,
"taxable": 557500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 50175,
"sgst": 50175,
"igst": 0,
"gst": 100350,
"total": 657850
}
}
}
]
},
"quoteAll": {
"totalCount": 2
},
"quoteDraft": {
"totalCount": 1
},
"quoteSent": {
"totalCount": 1
}
}
}131Billing · filter-two-statusesownerPOST /graphql200 OKAs expected30 ms
The app status filter is multi-select.
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditInvoicesStatuses { invoices(first: 5, filter: { statuses: [NEW, OVERDUE] }) { totalCount } }Variables
{}Response · HTTP 200
{
"data": {
"invoices": {
"totalCount": 1
}
}
}163Billing · invoice-searchownerPOST /graphql200 OKAs expected17 ms
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditInvoiceSearch { invoices(first: 5, search: "Audit") { totalCount } }Variables
{}Response · HTTP 200
{
"data": {
"invoices": {
"totalCount": 0
}
}
}209Billing · live-idsownerPOST /graphql200 OKAs expected40 ms
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query ProofIds {
invoices(first: 5) { edges { node { id number customerId } } }
quotes(first: 10) { edges { node { id number status orderId customerId } } } }Variables
{}Response · HTTP 200
{
"data": {
"invoices": {
"edges": [
{
"node": {
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"number": "DCW/26-27/0101",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7"
}
},
{
"node": {
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"number": "CBE/26-27/0002",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e"
}
},
{
"node": {
"id": "01a14ba6-e818-7935-ad87-c0e2a7448c5a",
"number": "CBE/26-27/0001",
"customerId": "01a14ba6-e533-720d-adca-0c4fb0dedcdd"
}
}
]
},
"quotes": {
"edges": [
{
"node": {
"id": "01a14ba9-d1fa-71fe-8713-a07475f8dd8a",
"number": "QTN/26-27/0003",
"status": "SENT",
"orderId": "01a14ba9-da4f-79da-8065-a9d7e84cac99",
"customerId": "01a14ba6-e56a-7478-990d-ceec492d63e7"
}
},
{
"node": {
"id": "01a14ba6-e68b-7186-9275-d44e3591f471",
"number": "QTN/26-27/0002",
"status": "SENT",
"orderId": null,
"customerId": "01a14ba6-e55f-7151-850b-de9c5dbe0224"
}
}
]
}
}
}invoiceSummary
130Billing · loadownerPOST /graphql200 OKAs expected60 ms
Headers
{
"authorization": "[REDACTED]",
"content-type": "application/json"
}Query
query AuditBilling { invoices(first: 5, sort: { field: NUMBER, direction: DESC }) { totalCount edges { node { ...INV } } } invoiceSummary { total new overdue paid billedThisMonth outstanding overdueAmount } quotes(first: 5, sort: { field: NUMBER, direction: DESC }) { totalCount edges { node { ...QT } } } quoteAll: quotes(first: 1) { totalCount } quoteDraft: quotes(first: 1, filter: { status: DRAFT }) { totalCount } quoteSent: quotes(first: 1, filter: { status: SENT }) { totalCount } }
fragment INV on Invoice { id number customerId customerName jobCardId orderId routeCard part quantity status discount gstRate quoteId poAmount notes issuedAt dueDate lines { id operation description minutesPerPiece setupMinutes ratePerMinute amount } totals { subtotal discount taxable gstRate supply cgst sgst igst gst total } payment { paidOn receivedAmount tdsAmount tdsSection } }
fragment QT on Quote { id number customerId customerName part quantity material status gstRate orderId createdAt lines { id operation description minutesPerPiece setupMinutes ratePerMinute amount } totals { subtotal discount taxable gstRate supply cgst sgst igst gst total } }Variables
{}Response · HTTP 200
{
"data": {
"invoices": {
"totalCount": 2,
"edges": [
{
"node": {
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"number": "CBE/26-27/0002",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"customerName": "Demo Auto Components",
"jobCardId": "01a14ba6-e649-75ad-bbc9-16d7ecd00878",
"orderId": "01a14ba6-e649-7d5b-9cc7-beaf68d484d7",
"routeCard": "JC-00002",
"part": "Valve spindle",
"quantity": 80,
"status": "NEW",
"discount": 0,
"gstRate": 18,
"quoteId": null,
"poAmount": null,
"notes": null,
"issuedAt": "2026-10-18",
"dueDate": "2026-11-17",
"lines": [
{
"id": "01a14ba6-e834-7522-b8bb-9760c119f49d",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 787500
},
{
"id": "01a14ba6-e834-79d8-b991-0695c09addf2",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 64000
}
],
"totals": {
"subtotal": 851500,
"discount": 0,
"taxable": 851500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 76635,
"sgst": 76635,
"igst": 0,
"gst": 153270,
"total": 1004770
},
"payment": null
}
},
{
"node": {
"id": "01a14ba6-e818-7935-ad87-c0e2a7448c5a",
"number": "CBE/26-27/0001",
"customerId": "01a14ba6-e533-720d-adca-0c4fb0dedcdd",
"customerName": "Demo Pumps & Valves",
"jobCardId": "01a14ba6-e60b-76c9-90a1-2e48ac0af20c",
"orderId": "01a14ba6-e60b-78e2-be46-05dfc8ff1cff",
"routeCard": "JC-00001",
"part": "Pump shaft",
"quantity": 120,
"status": "PAID",
"discount": 0,
"gstRate": 18,
"quoteId": null,
"poAmount": null,
"notes": null,
"issuedAt": "2026-10-18",
"dueDate": "2026-11-17",
"lines": [
{
"id": "01a14ba6-e817-747b-99d8-4c200a0ecb59",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 1147500
},
{
"id": "01a14ba6-e817-7d7a-87f4-5d54ed3702d6",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 96000
}
],
"totals": {
"subtotal": 1243500,
"discount": 0,
"taxable": 1243500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 111915,
"sgst": 111915,
"igst": 0,
"gst": 223830,
"total": 1467330
},
"payment": {
"paidOn": "2026-10-18",
"receivedAmount": 1442460,
"tdsAmount": 24870,
"tdsSection": "194C"
}
}
}
]
},
"invoiceSummary": {
"total": 2,
"new": 1,
"overdue": 0,
"paid": 1,
"billedThisMonth": 2472100,
"outstanding": 1004770,
"overdueAmount": 0
},
"quotes": {
"totalCount": 2,
"edges": [
{
"node": {
"id": "01a14ba6-e68b-7186-9275-d44e3591f471",
"number": "QTN/26-27/0002",
"customerId": "01a14ba6-e55f-7151-850b-de9c5dbe0224",
"customerName": "Demo Textile Machinery",
"part": "Spline shaft",
"quantity": 100,
"material": "EN19 steel",
"status": "SENT",
"gstRate": 18,
"orderId": null,
"createdAt": "2026-10-17T20:56:31.680Z",
"lines": [
{
"id": "01a14ba6-e68b-70d0-bdb2-cf0c1c5ee97d",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 967500
},
{
"id": "01a14ba6-e68b-74f5-b24b-0d37caf8aa51",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 80000
}
],
"totals": {
"subtotal": 1047500,
"discount": 0,
"taxable": 1047500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 94275,
"sgst": 94275,
"igst": 0,
"gst": 188550,
"total": 1236050
}
}
},
{
"node": {
"id": "01a14ba6-e678-7c29-b24d-e8d8f0d4ac48",
"number": "QTN/26-27/0001",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"customerName": "Demo Auto Components",
"part": "Hydraulic cylinder rod",
"quantity": 50,
"material": "EN19 steel",
"status": "DRAFT",
"gstRate": 18,
"orderId": null,
"createdAt": "2026-10-17T20:56:31.655Z",
"lines": [
{
"id": "01a14ba6-e677-7155-8386-86e3b75f4134",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 517500
},
{
"id": "01a14ba6-e677-7b39-8b3d-1b7247c34946",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 40000
}
],
"totals": {
"subtotal": 557500,
"discount": 0,
"taxable": 557500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 50175,
"sgst": 50175,
"igst": 0,
"gst": 100350,
"total": 657850
}
}
}
]
},
"quoteAll": {
"totalCount": 2
},
"quoteDraft": {
"totalCount": 1
},
"quoteSent": {
"totalCount": 1
}
}
}markInvoicePaid
145InvoiceDetails · mark-paidadminPOST /graphql403 FORBIDDENAs decided30 ms
D10: only owner and accountant record payments.
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-145",
"content-type": "application/json"
}Query
mutation AuditMarkPaidAdmin($id: ID!, $input: PaymentInput!) { markInvoicePaid(id: $id, input: $input) { id status } }Variables
{
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"input": {
"paidOn": "2026-10-18"
}
}Response · HTTP 403
{
"errors": [
{
"message": "You do not have access to this.",
"locations": [
{
"line": 1,
"column": 64
}
],
"path": [
"markInvoicePaid"
],
"extensions": {
"code": "FORBIDDEN",
"message": "You do not have access to this.",
"requestId": "01a14ba9-de9a-7aed-8874-f63492806090"
}
}
],
"data": null
}198InvoiceDetails · mark-paid-flowaccountantPOST /graphql200 OKAs expected18 ms
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-198",
"content-type": "application/json"
}Query
mutation AuditFlowPaid($id: ID!, $input: PaymentInput!) { markInvoicePaid(id: $id, input: $input) { id status } }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"input": {
"paidOn": "2026-10-18",
"tds": {
"amount": 100,
"section": "194C"
}
}
}Response · HTTP 200
{
"data": {
"markInvoicePaid": {
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"status": "PAID"
}
}
}sendInvoice
146InvoiceDetails · send-invoiceownerPOST /graphql400 GRAPHQL_INVALIDSuperseded9 ms
G26 was cut from Train C; proven live by calls 217-220 and 223-224 (N1C-129).
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-146",
"content-type": "application/json"
}Query
mutation AuditSendInvoice($id: ID!) { sendInvoice(id: $id) { id } }Variables
{
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc"
}Response · HTTP 400
{
"data": null,
"errors": [
{
"message": "Cannot query field \"sendInvoice\" on type \"Mutation\". Did you mean \"createInvoice\" or \"sendQuote\"?",
"locations": [
{
"line": 1,
"column": 39
}
],
"extensions": {
"code": "GRAPHQL_INVALID",
"message": "The GraphQL document is invalid.",
"requestId": "01a14ba9-dfbe-7e63-9e9f-e83f3619c65c"
}
}
]
}217InvoiceDetails · send-invoice-customer-without-emailownerPOST /graphql422 CUSTOMER_EMAIL_MISSINGAs expected25 ms
G26: to defaults to the customer email; this demo customer has none, so the app asks for an address.
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-217",
"content-type": "application/json"
}Query
mutation ProofSendInvoice($id: ID!, $to: String, $cc: [String!]) { sendInvoice(id: $id, to: $to, cc: $cc) { id number status } }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"cc": [
"accounts@example.test"
]
}Response · HTTP 422
{
"errors": [
{
"message": "This customer has no email address. Enter one to send to.",
"locations": [
{
"line": 1,
"column": 68
}
],
"path": [
"sendInvoice"
],
"extensions": {
"code": "CUSTOMER_EMAIL_MISSING",
"message": "This customer has no email address. Enter one to send to.",
"requestId": "01a14bff-f58a-77f6-97c9-ef9272c6e8b8"
}
}
],
"data": null
}218InvoiceDetails · send-invoiceownerPOST /graphql200 OKAs expected49 ms
G26: the worker renders or reuses the PDF and attaches it.
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-218",
"content-type": "application/json"
}Query
mutation ProofSendInvoice($id: ID!, $to: String, $cc: [String!]) { sendInvoice(id: $id, to: $to, cc: $cc) { id number status } }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"to": "buyer@example.test",
"cc": [
"accounts@example.test"
]
}Response · HTTP 200
{
"data": {
"sendInvoice": {
"id": "01a14baa-188a-7728-99be-72bfc173da7c",
"number": "DCW/26-27/0101",
"status": "PAID"
}
}
}220InvoiceDetails · mailpit-shows-email-with-pdfownerGET /api/v1/search200 OKAs expected1063 ms
Not a Core call: what the worker delivered to Mailpit (http://127.0.0.1:48025).
Response · HTTP 200
{
"Subject": "Invoice DCW/26-27/0101 from Demo Coimbatore Works",
"From": "no-reply@n1.local",
"To": [
"buyer@example.test"
],
"Cc": [
"accounts@example.test"
],
"Text": "Hello,\r\n\r\nPlease find attached invoice DCW/26-27/0101 from Demo Coimbatore Works for Rs. 212.40, due on 2026-11-17.\r\n\r\nThank you,\r\nDemo Coimbatore Works",
"Attachments": [
{
"FileName": "DCW-26-27-0101.pdf",
"ContentType": "application/pdf",
"Size": 3997
}
],
"attachmentHeader": "%PDF-1.4"
}229InvoiceDetails · send-invoiceoperatorPOST /graphql403 FORBIDDENAs expected10 ms
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-229",
"content-type": "application/json"
}Query
mutation ProofSendInvoiceDenied($id: ID!) { sendInvoice(id: $id) { id } }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c"
}Response · HTTP 403
{
"errors": [
{
"message": "You do not have access to this.",
"locations": [
{
"line": 1,
"column": 45
}
],
"path": [
"sendInvoice"
],
"extensions": {
"code": "FORBIDDEN",
"message": "You do not have access to this.",
"requestId": "01a14c00-070c-7a0c-843b-b216e8952213"
}
}
],
"data": null
}235InvoiceDetails · send-invoiceqcPOST /graphql403 FORBIDDENAs expected7 ms
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-235",
"content-type": "application/json"
}Query
mutation ProofSendInvoiceDenied($id: ID!) { sendInvoice(id: $id) { id } }Variables
{
"id": "01a14baa-188a-7728-99be-72bfc173da7c"
}Response · HTTP 403
{
"errors": [
{
"message": "You do not have access to this.",
"locations": [
{
"line": 1,
"column": 45
}
],
"path": [
"sendInvoice"
],
"extensions": {
"code": "FORBIDDEN",
"message": "You do not have access to this.",
"requestId": "01a14c00-0d72-7fac-b9d7-4e75e93ec917"
}
}
],
"data": null
}updateInvoice
144InvoiceEdit · saveaccountantPOST /graphql200 OKAs expected45 ms
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-144",
"content-type": "application/json"
}Query
mutation AuditUpdateInvoice($id: ID!, $input: InvoiceUpdateInput!) { updateInvoice(id: $id, input: $input) { ...INV } }
fragment INV on Invoice { id number customerId customerName jobCardId orderId routeCard part quantity status discount gstRate quoteId poAmount notes issuedAt dueDate lines { id operation description minutesPerPiece setupMinutes ratePerMinute amount } totals { subtotal discount taxable gstRate supply cgst sgst igst gst total } payment { paidOn receivedAmount tdsAmount tdsSection } }Variables
{
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"input": {
"discount": 10000,
"notes": "Synthetic note"
}
}Response · HTTP 200
{
"data": {
"updateInvoice": {
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"number": "CBE/26-27/0002",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"customerName": "Demo Auto Components",
"jobCardId": "01a14ba6-e649-75ad-bbc9-16d7ecd00878",
"orderId": "01a14ba6-e649-7d5b-9cc7-beaf68d484d7",
"routeCard": "JC-00002",
"part": "Valve spindle",
"quantity": 80,
"status": "NEW",
"discount": 10000,
"gstRate": 18,
"quoteId": null,
"poAmount": null,
"notes": "Synthetic note",
"issuedAt": "2026-10-18",
"dueDate": "2026-11-17",
"lines": [
{
"id": "01a14ba9-dd77-7174-b638-332cefced4e0",
"operation": "CNC turning",
"description": "",
"minutesPerPiece": 6,
"setupMinutes": 45,
"ratePerMinute": 1500,
"amount": 787500
},
{
"id": "01a14ba9-dd77-7240-9a7c-842ff4aa8e25",
"operation": "Deburring",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 800,
"amount": 64000
}
],
"totals": {
"subtotal": 851500,
"discount": 10000,
"taxable": 841500,
"gstRate": 18,
"supply": "INTRA",
"cgst": 75735,
"sgst": 75735,
"igst": 0,
"gst": 151470,
"total": 992970
},
"payment": null
}
}
}164InvoiceOperations · save-linesaccountantPOST /graphql200 OKAs expected44 ms
Headers
{
"authorization": "[REDACTED]",
"idempotency-key": "key-164",
"content-type": "application/json"
}Query
mutation AuditInvoiceLines($id: ID!, $input: InvoiceUpdateInput!) { updateInvoice(id: $id, input: $input) { ...INV } }
fragment INV on Invoice { id number customerId customerName jobCardId orderId routeCard part quantity status discount gstRate quoteId poAmount notes issuedAt dueDate lines { id operation description minutesPerPiece setupMinutes ratePerMinute amount } totals { subtotal discount taxable gstRate supply cgst sgst igst gst total } payment { paidOn receivedAmount tdsAmount tdsSection } }Variables
{
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"input": {
"lines": [
{
"operation": "Turning",
"description": "Synthetic",
"minutesPerPiece": 3,
"setupMinutes": 10,
"ratePerMinute": 1200
},
{
"operation": "Drilling",
"minutesPerPiece": 1,
"ratePerMinute": 900
}
]
}
}Response · HTTP 200
{
"data": {
"updateInvoice": {
"id": "01a14ba6-e836-79c7-861a-0c20920fb6fc",
"number": "CBE/26-27/0002",
"customerId": "01a14ba6-e54e-713f-beb0-6e57f2a9a88e",
"customerName": "Demo Auto Components",
"jobCardId": "01a14ba6-e649-75ad-bbc9-16d7ecd00878",
"orderId": "01a14ba6-e649-7d5b-9cc7-beaf68d484d7",
"routeCard": "JC-00002",
"part": "Valve spindle",
"quantity": 80,
"status": "NEW",
"discount": 10000,
"gstRate": 18,
"quoteId": null,
"poAmount": null,
"notes": "Synthetic note",
"issuedAt": "2026-10-18",
"dueDate": "2026-11-17",
"lines": [
{
"id": "01a14ba9-f4d9-781a-b719-17206ea32c3a",
"operation": "Turning",
"description": "Synthetic",
"minutesPerPiece": 3,
"setupMinutes": 10,
"ratePerMinute": 1200,
"amount": 300000
},
{
"id": "01a14ba9-f4d9-72e9-9326-b7065206b094",
"operation": "Drilling",
"description": "",
"minutesPerPiece": 1,
"setupMinutes": 0,
"ratePerMinute": 900,
"amount": 72000
}
],
"totals": {
"subtotal": 372000,
"discount": 10000,
"taxable": 362000,
"gstRate": 18,
"supply": "INTRA",
"cgst": 32580,
"sgst": 32580,
"igst": 0,
"gst": 65160,
"total": 427160
},
"payment": null
}
}
}