N1Developer docsv1

Invoices · v1

MUTATION

sendInvoice

Live

Email the invoice PDF to the customer

Email the invoice PDF to the customer (to defaults to the customer’s email) with cc; any status, again whenever needed. Logged in the customer’s activity. Owner, admin and accountant. At most 5 sends per invoice an hour and 200 recipients (to plus cc) per shop a day (RATE_LIMITED). INVOICE_NOT_FOUND for an unknown id; CUSTOMER_EMAIL_MISSING without to for a customer with no email.

POST/graphqlapp audience

Who can call this. Owner, admin, accountant.

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

  • cc[String!]Optional

    Up to 5 copy recipients.

    Example: ["accounts@demo-customer.example"]

  • idID!Required

    The invoice id.

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

  • toStringOptional

    Recipient email. Default: the customer’s email.

Returns

  • sendInvoiceInvoice!Required

    Email the invoice PDF to the customer (to defaults to the customer’s email) with cc; any status, again whenever needed. Logged in the customer’s activity. Owner, admin and accountant. At most 5 sends per invoice an hour and 200 recipients (to plus cc) per shop a day (RATE_LIMITED). INVOICE_NOT_FOUND for an unknown id; CUSTOMER_EMAIL_MISSING without to for a customer with no email.

    Show children
    • createdAtString!Required

      UTC time the invoice was made.

    • customerIdID!Required

      The customer (see customer).

    • customerNameString!Required

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

    • discountInt!Required

      Paise discount asked for. The amount applied is totals.discount.

    • dueDateString!Required

      Payment due date, YYYY-MM-DD. Defaults to the issue date plus the customer’s payment terms.

    • gstRateFloat!Required

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

    • idID!Required

      Stable id (UUIDv7).

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

    • issuedAtString!Required

      Invoice date, YYYY-MM-DD.

    • jobCardIdIDOptional

      The job card this was raised from (see jobCard); null for a manual invoice.

    • jobIdStringOptional

      The work-order number (WO-<n>, the order’s number) this bills; null for a manual invoice.

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

    • notesStringOptional

      Printed on the invoice.

    • numberString!Required

      The invoice number. Assigned by the server; gaps never happen.

      Example: "DPW/26-27/0012"

    • orderIdIDOptional

      The order this bills (see order).

    • partString!Required

      Part name or number.

    • paymentPaymentOptional

      Set once the invoice is paid; null before that.

      Show children
      • paidOnString!Required

        The day the money arrived, YYYY-MM-DD.

      • receivedAmountInt!Required

        Paise actually received: the invoice total less tdsAmount.

      • tdsAmountInt!Required

        Paise the customer deducted as tax at source; 0 when none.

      • tdsSectionStringOptional

        The income-tax section the deduction was made under, such as 194C.

    • pdfFileAppFileReferenceOptional

      The invoice as a PDF (TAX INVOICE), rendered by the server on first ask and again whenever what it prints changes. Download it with POST /files/{id}/download-url. Ask on one invoice (invoice(id) or a mutation result): on a list it answers VALIDATION_FAILED. NOT_IMPLEMENTED when Core has no files bucket.

      Show children
      • idID!Required

        File id; obtain authorised download URL from files API.

      • kindStringOptional

        Document category.

      • nameString!Required

        Display filename.

      • sizeBytesFloat!Required

        Size in bytes, safe integer.

    • poAmountIntOptional

      Paise: the amount on the customer’s PO, to compare against totals.total.

    • quantityInt!Required

      Pieces billed.

    • quoteIdIDOptional

      The quote this was priced from, if any (see quote).

    • routeCardStringOptional

      The route card number printed on the job card.

    • statusInvoiceStatus!Required

      NEW, OVERDUE or PAID. Derived from payment and dueDate.

      Example: "NEW"

      • NEWIssued, not paid, and not yet past its due date.
      • OVERDUENot paid and past its due date.
      • PAIDA payment has been recorded.
    • 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.

Errors

CodeHTTPWhen
INVOICE_NOT_FOUND404The id is unknown in this shop (another shop's invoice answers the same).
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.