N1Developer docsv1

Quotes · v1

MUTATION

convertQuoteToOrder

Mock

Mock. 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.

Turn a quote into one order, linked both ways

Make one order from a quote, with a QUEUED job card, and link them both ways (Quote.orderId, Order.quoteId). Owner, admin and supervisor. Returns the quote; open the order with order(id: orderId). QUOTE_NOT_FOUND for an unknown id; QUOTE_ALREADY_CONVERTED if it already has an order.

POST/graphqlapp audience

Who can call this. Owner, admin, supervisor.

Headers

  • AuthorizationstringRequired

    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…

  • Content-TypestringRequired

    Always application/json. Only POST is accepted.

    Example: application/json

  • Idempotency-KeystringRequired

    A key you generate once per user action (a UUID). Retrying with the same key never applies the change twice.

    Example: 0192f0c1-9b2a-7d40-8c3e-1f5a6b7c8d9e

  • X-Request-IdstringOptional

    Your 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

  • idID!Required

    The quote id.

    Example: "0192f0c1-0000-7000-8000-000000b00001"

  • inputConvertQuoteInput!Required

    The PO number and due date the order needs.

    Example: {"poNumber":"PO-DEMO-6001","dueDate":"2026-11-20","priority":"HIGH"}

    Show children
    • dueDateString!Required

      Promised delivery date, YYYY-MM-DD.

    • poNumberString!Required

      The customer’s PO number.

    • priorityOrderPriorityOptional

      Default NORMAL.

Returns

  • convertQuoteToOrderQuote!Required

    Make one order from a quote, with a QUEUED job card, and link them both ways (Quote.orderId, Order.quoteId). Owner, admin and supervisor. Returns the quote; open the order with order(id: orderId). QUOTE_NOT_FOUND for an unknown id; QUOTE_ALREADY_CONVERTED if it already has an order.

    Show children
    • createdAtString!Required

      UTC time the quote was made.

    • customerIdID!Required

      The customer (see customer).

    • customerNameString!Required

      The customer’s name, so a list needs no second call.

    • gstRateFloat!Required

      The GST percentage asked for. The rate applied is totals.gstRate.

    • idID!Required

      Stable id (UUIDv7).

      Example: "0192f0c1-0000-7000-8000-000000b00001"

    • lines[BillingLine!]!Required

      The priced operations, in the order given.

      Show children
      • amountFloat!Required

        Integer paise: (quantity × minutesPerPiece + setupMinutes) × ratePerMinute, rounded half up to a whole paisa. Computed by the server.

      • descriptionString!Required

        Free text for the customer; empty when none was given.

      • idID!Required

        Stable id (UUIDv7).

      • minutesPerPieceFloat!Required

        Machine minutes for one piece.

      • operationString!Required

        The operation priced, such as Turning.

      • ratePerMinuteInt!Required

        Paise per machine minute.

      • setupMinutesFloat!Required

        One-off machine minutes to set up, charged once per line.

    • materialStringOptional

      Material to use.

    • numberString!Required

      The quote number, such as QTN/26-27/0001. Assigned by the server.

      Example: "QTN/26-27/0001"

    • orderIdIDOptional

      The order made from this quote; null until converted (see order).

      Example: "0192f0c1-0000-7000-8000-e00000000001"

    • partString!Required

      Part name or number.

    • quantityInt!Required

      Pieces quoted.

    • statusQuoteStatus!Required

      DRAFT or SENT. Whether it became an order is orderId.

      Example: "SENT"

      • DRAFTBeing prepared; it can still be edited.
      • SENTSent to the customer; no longer editable.
    • totalsTotals!Required

      Subtotal, GST and total, all in paise, worked out by the server.

      Show children
      • cgstFloat!Required

        Central GST; 0 unless supply is INTRA.

      • discountFloat!Required

        The discount applied. Never more than the subtotal.

      • gstFloat!Required

        Total GST: cgst + sgst + igst.

      • gstRateFloat!Required

        The GST percentage applied; 0 when supply is NONE.

      • igstFloat!Required

        Integrated GST; 0 unless supply is INTER.

      • sgstFloat!Required

        State GST; 0 unless supply is INTRA.

      • subtotalFloat!Required

        Sum of the line amounts.

      • supplyGstSupply!Required

        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.
      • taxableFloat!Required

        Subtotal less discount.

      • totalFloat!Required

        Taxable plus GST.

    • updatedAtString!Required

      UTC time of the last change.

      Example: "2026-10-12T04:30:00.000Z"

Errors

CodeHTTPWhen
QUOTE_NOT_FOUND404The id is unknown in this shop (another shop's quote answers the same).
QUOTE_ALREADY_CONVERTED409convertQuoteToOrder on a quote that already has an order. A quote makes exactly one order.
FORBIDDEN403Signed 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.

Search documentation

Search operations, types and errors from the generated contract.