Quotes · v1
quotes
MockMock. This operation is part of the approved contract but its module is not built yet. Run Core with N1_API_MODE=mock N1_DEV_AUTH=stub to get deterministic demo-shop data from it. The real server answers NOT_IMPLEMENTED until it ships; the schema and examples here will not change when it does.
Page through the shop’s quotes
The shop’s quotes, paged. Search matches quote number, customer name and part. Owner, admin, accountant and supervisor. Quote counts for a header: ask for totalCount once per status.
/graphqlapp audienceWho can call this. Owner, admin, accountant, supervisor.
Headers
Bearer <token>, issued for this endpoint's audience. The token decides the shop and roles; nothing in the request body can change them.Example:
Bearer eyJhbGciOiJFZERTQSJ9…Always
application/json. Only POST is accepted.Example:
application/jsonYour id for this request (8–128 characters of A–Z a–z 0–9 . _ : -). Echoed back in the response header and in every error, so you can quote it when reporting a problem. Core makes one if you send none.
Example:
app-7f3c2a9e-checkout
Arguments
endCursor of the previous page.
startCursor of the next page, when paging backwards.
Narrow by status or customer.
Show children
Only this customer’s quotes.
Only quotes in this state.
Page size, 1–100 (default 20).
Example:
3Page size when paging backwards, 1–100.
Free text, 1–100 characters.
Order (default: newest first).
Show children
Ascending or descending.
What to order by.
Returns
The shop’s quotes, paged. Search matches quote number, customer name and part. Owner, admin, accountant and supervisor. Quote counts for a header: ask for
totalCountonce per status.Show children
The rows on this page, in order.
Example:
[{"cursor":"WyIyMDI2LTA5LTIyVDA0OjMwOjAwLjAwMFoiLCIwMTkyZjBjMS0wMDAwLTcwMDAtODAwMC0wMDAwMDBiMDAwMGEiXQ","node":{"id":"0192f0c1-0000-7000-8000-000000b0000a","number":"QTN/26-27/0010","customerName":"Alpha Fasteners 10","part":"Pulley 90","quantity":40,"status":"DRAFT","orderId":null,"totals":{"total":122640},"createdAt":"2026-09-22T04:30:00.000Z"}},{"cursor":"WyIyMDI2LTA5LTE5VDA0OjMwOjAwLjAwMFoiLCIwMTkyZjBjMS0wMDAwLTcwMDAtODAwMC0wMDAwMDBiMDAwMDkiXQ","node":{"id":"0192f0c1-0000-7000-8000-000000b00009","number":"QTN/26-27/0009","customerName":"Indus Pumps 9","part":"Bush 25x30","quantity":20,"status":"SENT","orderId":null,"totals":{"total":64900},"createdAt":"2026-09-19T04:30:00.000Z"}},{"cursor":"WyIyMDI2LTA5LTE2VDA0OjMwOjAwLjAwMFoiLCIwMTkyZjBjMS0wMDAwLTcwMDAtODAwMC0wMDAwMDBiMDAwMDgiXQ","node":{"id":"0192f0c1-0000-7000-8000-000000b00008","number":"QTN/26-27/0008","customerName":"Horizon Hydraulics 8","part":"Flange 120","quantity":180,"status":"DRAFT","orderId":null,"totals":{"total":346920},"createdAt":"2026-09-16T04:30:00.000Z"}}]Show children
Opaque position of this row in the list.
Example:
"WyIyMDI2LTA5LTIyVDA0OjMwOjAwLjAwMFoiLCIwMTkyZjBjMS0wMDAwLTcwMDAtODAwMC0wMDAwMDBiMDAwMGEiXQ"The Quote.
Example:
{"id":"0192f0c1-0000-7000-8000-000000b0000a","number":"QTN/26-27/0010","customerName":"Alpha Fasteners 10","part":"Pulley 90","quantity":40,"status":"DRAFT","orderId":null,"totals":{"total":122640},"createdAt":"2026-09-22T04:30:00.000Z"}Show children
UTC time the quote was made.
Example:
"2026-09-22T04:30:00.000Z"The customer (see
customer).The customer’s name, so a list needs no second call.
Example:
"Alpha Fasteners 10"The GST percentage asked for. The rate applied is
totals.gstRate.Stable id (UUIDv7).
Example:
"0192f0c1-0000-7000-8000-000000b0000a"The priced operations, in the order given.
Show children
Integer paise: (quantity × minutesPerPiece + setupMinutes) × ratePerMinute, rounded half up to a whole paisa. Computed by the server.
Free text for the customer; empty when none was given.
Stable id (UUIDv7).
Machine minutes for one piece.
The operation priced, such as Turning.
Paise per machine minute.
One-off machine minutes to set up, charged once per line.
Material to use.
The quote number, such as
QTN/26-27/0001. Assigned by the server.Example:
"QTN/26-27/0010"The order made from this quote; null until converted (see
order).Example:
nullPart name or number.
Example:
"Pulley 90"Pieces quoted.
Example:
40DRAFT or SENT. Whether it became an order is
orderId.Example:
"DRAFT"DRAFTBeing prepared; it can still be edited.SENTSent to the customer; no longer editable.
Subtotal, GST and total, all in paise, worked out by the server.
Example:
{"total":122640}Show children
Central GST; 0 unless
supplyis INTRA.The discount applied. Never more than the subtotal.
Total GST: cgst + sgst + igst.
The GST percentage applied; 0 when
supplyis NONE.Integrated GST; 0 unless
supplyis INTER.State GST; 0 unless
supplyis INTRA.Sum of the line amounts.
Whether CGST + SGST or IGST applies.
INTERDifferent states: IGST.INTRAShop and customer are in the same state: CGST + SGST.NONEThe shop has no GSTIN, so no GST is charged.
Subtotal less discount.
Taxable plus GST.
Example:
122640
UTC time of the last change.
Whether more pages exist, and the cursors to reach them.
Example:
{"hasNextPage":true,"endCursor":"WyIyMDI2LTA5LTE2VDA0OjMwOjAwLjAwMFoiLCIwMTkyZjBjMS0wMDAwLTcwMDAtODAwMC0wMDAwMDBiMDAwMDgiXQ"}Show children
Cursor of the last row; pass it as
afterto get the next page. Null when the page is empty.Example:
"WyIyMDI2LTA5LTE2VDA0OjMwOjAwLjAwMFoiLCIwMTkyZjBjMS0wMDAwLTcwMDAtODAwMC0wMDAwMDBiMDAwMDgiXQ"Whether another page follows this one.
Example:
trueWhether another page comes before this one.
Cursor of the first row; pass it as
beforeto page backwards. Null when the page is empty.
All rows matching the filter and search, not just this page.
Example:
10
Errors
| Code | HTTP | When |
|---|---|---|
FORBIDDEN | 403 | Signed in, but the role or tenant does not allow the action. |
Every error has the same body. See Errors.
Rate limit tier
Tier: per user. Over the limit you get RATE_LIMITED (HTTP 429) with a Retry-After header. See Response handling.