{
  "info": {
    "name": "Ledgerly Partner API",
    "description": "Partner-facing Billing API for creating GST and non-GST invoices. JSON bodies are snake_case; query parameters are camelCase. Set the `baseUrl` and `apiKey` collection variables before use.\n\nAccess is gated by your subscription bundle (Billing Core ₹999/mo or Billing Suite ₹1999/mo) — see the 'Plans & entitlements' folder. Invoice and ping requests are Billing Core; the Suite folders (Customers, Products, Quotations, Statements, Reports) and the Suite invoice sub-requests (List payments, Create payment link) require Billing Suite. See PARTNER_API_GUIDE.md.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.ledgerly.biz/api",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "lgy_live_replace_with_your_key",
      "type": "string"
    },
    {
      "key": "invoiceId",
      "value": "inv_replace_after_create",
      "type": "string"
    },
    {
      "key": "externalReference",
      "value": "ORDER-123",
      "type": "string"
    },
    {
      "key": "customerId",
      "value": "cus_replace_after_create",
      "type": "string"
    },
    {
      "key": "productId",
      "value": "prd_replace_after_create",
      "type": "string"
    },
    {
      "key": "quotationId",
      "value": "qot_replace_after_create",
      "type": "string"
    }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "item": [
    {
      "name": "Plans & entitlements (read me)",
      "description": "Your account is on one of two subscription bundles; every call is gated by the active bundle.\n\n- **Billing Core** — ₹999/mo — invoices, payment recording, webhooks (everything in this collection).\n- **Billing Suite** — ₹1999/mo — everything in Core plus customers, products, quotations, payment links, statements, payments listing, and reports (separate endpoints, released separately).\n\nBilling Suite is a strict superset of Billing Core. A new partner starts a 14-day free trial from the dashboard (Partner → Overview); when the trial ends — or if no paid subscription is active — the API is blocked. Partners integrated before plans existed keep Core automatically.\n\nPlan-gating errors use the standard error shape:\n\n403 PLAN_REQUIRED — no active subscription or trial:\n{\n  \"success\": false,\n  \"error\": { \"code\": \"PLAN_REQUIRED\", \"message\": \"No active subscription. Start a trial or subscribe to a plan to use this API.\", \"field_errors\": [] }\n}\n\n403 PLAN_UPGRADE_REQUIRED — your bundle does not include the requested feature (returned by Suite-only endpoints):\n{\n  \"success\": false,\n  \"error\": { \"code\": \"PLAN_UPGRADE_REQUIRED\", \"message\": \"Your Billing Core plan does not include this feature. Upgrade to Billing Suite to use it.\", \"field_errors\": [] }\n}",
      "item": []
    },
    {
      "name": "Ping (verify auth)",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/v1/partner/ping",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "ping"
          ]
        },
        "description": "Confirms your API key works. Returns your partner_account_id."
      }
    },
    {
      "name": "Create invoice",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "// Save the returned public invoice id for the other requests",
              "if (pm.response.code === 201) {",
              "    var body = pm.response.json();",
              "    if (body.invoice_id) {",
              "        pm.collectionVariables.set('invoiceId', body.invoice_id);",
              "    }",
              "    if (body.external_reference) {",
              "        pm.collectionVariables.set('externalReference', body.external_reference);",
              "    }",
              "}"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "{{externalReference}}-INVOICE",
            "description": "Required. Retries with the same key + payload return the original invoice."
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"external_reference\": \"ORDER-123\",\n  \"invoice_date\": \"2026-07-18\",\n  \"customer\": {\n    \"name\": \"Example Customer\",\n    \"phone\": \"9876543210\",\n    \"email\": \"customer@example.com\",\n    \"gstin\": \"23ABCDE1234F1Z5\",\n    \"billing_address\": {\n      \"line1\": \"Business Address\",\n      \"city\": \"Bhopal\",\n      \"state\": \"Madhya Pradesh\",\n      \"postal_code\": \"462001\"\n    }\n  },\n  \"place_of_supply\": \"Madhya Pradesh\",\n  \"tax_inclusive\": false,\n  \"items\": [\n    {\n      \"name\": \"Sample Product\",\n      \"description\": \"Optional description\",\n      \"hsn_sac\": \"8471\",\n      \"quantity\": 2,\n      \"unit\": \"PCS\",\n      \"unit_price\": 1000,\n      \"gst_rate\": 18,\n      \"discount\": 0\n    }\n  ],\n  \"additional_charges\": 0,\n  \"invoice_discount\": 0,\n  \"payment_status\": \"UNPAID\",\n  \"notes\": \"Thank you for your business.\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices"
          ]
        },
        "description": "Creates and issues an invoice. The Idempotency-Key header is required. Body is snake_case."
      },
      "response": [
        {
          "name": "403 PLAN_REQUIRED (no active subscription or trial)",
          "originalRequest": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Idempotency-Key",
                "value": "{{externalReference}}-INVOICE"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"external_reference\": \"ORDER-123\",\n  \"invoice_date\": \"2026-07-18\",\n  \"customer\": { \"name\": \"Example Customer\" },\n  \"items\": [ { \"name\": \"Sample Product\", \"quantity\": 1, \"unit_price\": 1000 } ]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/v1/partner/invoices",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "invoices"
              ]
            }
          },
          "status": "Forbidden",
          "code": 403,
          "_postman_previewlanguage": "json",
          "header": [
            {
              "key": "Content-Type",
              "value": "application/json"
            }
          ],
          "cookie": [],
          "body": "{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"PLAN_REQUIRED\",\n    \"message\": \"No active subscription. Start a trial or subscribe to a plan to use this API.\",\n    \"field_errors\": []\n  }\n}"
        }
      ]
    },
    {
      "name": "Get invoice by id",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices/{{invoiceId}}",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices",
            "{{invoiceId}}"
          ]
        },
        "description": "Retrieves an invoice by its Ledgerly public id."
      }
    },
    {
      "name": "List invoices",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices?page=0&size=20",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices"
          ],
          "query": [
            {
              "key": "page",
              "value": "0"
            },
            {
              "key": "size",
              "value": "20"
            },
            {
              "key": "q",
              "value": "",
              "disabled": true,
              "description": "Substring match on external_reference"
            },
            {
              "key": "from",
              "value": "",
              "disabled": true,
              "description": "YYYY-MM-DD"
            },
            {
              "key": "to",
              "value": "",
              "disabled": true,
              "description": "YYYY-MM-DD"
            }
          ]
        },
        "description": "Paginated list of your invoices, newest first. Optional filters: q, from, to (query params are camelCase / lowercase)."
      }
    },
    {
      "name": "Find invoice by external reference",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices?externalReference={{externalReference}}",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices"
          ],
          "query": [
            {
              "key": "externalReference",
              "value": "{{externalReference}}"
            }
          ]
        },
        "description": "Looks up the single invoice you created with a given externalReference (query param is camelCase). Returns the invoice object, not a list."
      }
    },
    {
      "name": "Download invoice PDF",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices/{{invoiceId}}/pdf",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices",
            "{{invoiceId}}",
            "pdf"
          ]
        },
        "description": "Returns 302 with a Location header to a short-lived signed PDF URL. Postman follows the redirect by default."
      }
    },
    {
      "name": "Cancel invoice",
      "request": {
        "method": "POST",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices/{{invoiceId}}/cancel",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices",
            "{{invoiceId}}",
            "cancel"
          ]
        },
        "description": "Cancels the invoice (audit history preserved). Idempotent for already-cancelled invoices."
      }
    },
    {
      "name": "Record payment",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "body": {
          "mode": "raw",
          "raw": "{\n  \"amount\": 2360,\n  \"payment_method\": \"UPI\",\n  \"payment_date\": \"2026-07-18\",\n  \"reference_number\": \"UPI-REF-9988\",\n  \"notes\": \"Paid in full\"\n}"
        },
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices/{{invoiceId}}/payments",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices",
            "{{invoiceId}}",
            "payments"
          ]
        },
        "description": "Records a payment (body is snake_case). Only works if payment recording is enabled for your account (else 403 PAYMENTS_NOT_ENABLED)."
      }
    },
    {
      "name": "List payments (Suite)",
      "request": {
        "method": "GET",
        "header": [],
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices/{{invoiceId}}/payments",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices",
            "{{invoiceId}}",
            "payments"
          ]
        },
        "description": "Lists the payments (receipts) recorded on an invoice. Requires Billing Suite. payment_id is the receipt number."
      }
    },
    {
      "name": "Create payment link (Suite)",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/v1/partner/invoices/{{invoiceId}}/payment-link",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "v1",
            "partner",
            "invoices",
            "{{invoiceId}}",
            "payment-link"
          ]
        },
        "description": "Generates a shareable payment link. Requires Billing Suite and an active payment provider (else 403 PAYMENT_PROVIDER_NOT_CONFIGURED). Both fields optional: amount defaults to the outstanding balance.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"amount\": 2360,\n  \"return_url\": \"https://yourapp.example/thank-you\"\n}"
        }
      }
    },
    {
      "name": "Customers (Billing Suite)",
      "description": "Manage customers in your business. Requires a Billing Suite subscription — on a Core plan these return 403 PLAN_UPGRADE_REQUIRED. Customers are addressed by a public 'cus_...' id and only customers created via this API are returned.",
      "item": [
        {
          "name": "Create customer",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Save the returned public customer id for the other requests",
                  "if (pm.response.code === 201) {",
                  "    var body = pm.response.json();",
                  "    if (body.customer_id) {",
                  "        pm.collectionVariables.set('customerId', body.customer_id);",
                  "    }",
                  "}"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Acme Corp\",\n  \"phone\": \"9876543210\",\n  \"email\": \"accounts@acme.example\",\n  \"gstin\": \"23ABCDE1234F1Z5\",\n  \"billing_address\": {\n    \"line1\": \"12 Industrial Area\",\n    \"city\": \"Bhopal\",\n    \"state\": \"Madhya Pradesh\",\n    \"postal_code\": \"462001\"\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/v1/partner/customers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "customers"
              ]
            },
            "description": "Creates a customer in your business. Only 'name' is required; a duplicate phone returns 409 DUPLICATE_CUSTOMER_PHONE."
          }
        },
        {
          "name": "Get customer by id",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/customers/{{customerId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "customers",
                "{{customerId}}"
              ]
            },
            "description": "Retrieves a customer by its public id. 404 CUSTOMER_NOT_FOUND if it is not one of your customers."
          }
        },
        {
          "name": "List / search customers",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/customers?page=0&size=20",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "customers"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "0"
                },
                {
                  "key": "size",
                  "value": "20"
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Substring match on customer name"
                }
              ]
            },
            "description": "Paginated list of your customers, newest first. Optional q filters by name."
          }
        },
        {
          "name": "Update customer",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"billing@acme.example\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/v1/partner/customers/{{customerId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "customers",
                "{{customerId}}"
              ]
            },
            "description": "Patch semantics — only the fields you send are changed."
          }
        }
      ]
    },
    {
      "name": "Products (Billing Suite)",
      "description": "Manage the product catalogue in your business. Requires a Billing Suite subscription — on a Core plan these return 403 PLAN_UPGRADE_REQUIRED. Products are addressed by a public 'prd_...' id and only products created via this API are returned.",
      "item": [
        {
          "name": "Create product",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Save the returned public product id for the other requests",
                  "if (pm.response.code === 201) {",
                  "    var body = pm.response.json();",
                  "    if (body.product_id) {",
                  "        pm.collectionVariables.set('productId', body.product_id);",
                  "    }",
                  "}"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Aamla Tel\",\n  \"description\": \"Herbal hair oil, 200 ml\",\n  \"sku\": \"AAMLA-TEL-24\",\n  \"barcode\": \"8901234567890\",\n  \"hsn_sac\": \"3305\",\n  \"unit_price\": 24,\n  \"gst_rate\": 18,\n  \"unit\": \"BOTTLE\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/v1/partner/products",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "products"
              ]
            },
            "description": "Creates a product. 'name' and 'unit_price' are required; sku auto-generates when omitted. Duplicate sku/barcode return 409 DUPLICATE_SKU / DUPLICATE_BARCODE. 'unit' accepts an enum name (BOTTLE) or abbreviation (btl)."
          }
        },
        {
          "name": "Get product by id",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/products/{{productId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "products",
                "{{productId}}"
              ]
            },
            "description": "Retrieves a product by its public id. 404 PRODUCT_NOT_FOUND if it is not one of your products."
          }
        },
        {
          "name": "List / search products",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/products?page=0&size=20",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "products"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "0"
                },
                {
                  "key": "size",
                  "value": "20"
                },
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Substring match on product name or SKU"
                }
              ]
            },
            "description": "Paginated list of your products, newest first. Optional q filters by name or SKU."
          }
        },
        {
          "name": "Update product",
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"unit_price\": 30\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/v1/partner/products/{{productId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "products",
                "{{productId}}"
              ]
            },
            "description": "Patch semantics — only the fields you send are changed."
          }
        }
      ]
    },
    {
      "name": "Quotations (Billing Suite)",
      "item": [
        {
          "name": "Create quotation",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// Save the returned public quotation id for the other requests",
                  "if (pm.response.code === 201) {",
                  "    var body = pm.response.json();",
                  "    if (body.quotation_id) {",
                  "        pm.collectionVariables.set('quotationId', body.quotation_id);",
                  "    }",
                  "}"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/quotations",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "quotations"
              ]
            },
            "description": "Creates a quotation. customer_id (cus_...) is optional; valid_until is required. Items may reference a product via product_id (prd_...).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"customer_id\": \"{{customerId}}\",\n  \"issue_date\": \"2026-08-01\",\n  \"valid_until\": \"2026-08-15\",\n  \"items\": [\n    {\n      \"product_id\": \"{{productId}}\",\n      \"name\": \"Aamla Tel\",\n      \"quantity\": 10,\n      \"unit_price\": 24,\n      \"gst_rate\": 18,\n      \"discount\": 0\n    }\n  ],\n  \"notes\": \"Valid for 2 weeks.\"\n}"
            }
          }
        },
        {
          "name": "Get quotation by id",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/quotations/{{quotationId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "quotations",
                "{{quotationId}}"
              ]
            },
            "description": "Retrieves a quotation by its qot_ id, or 404 QUOTATION_NOT_FOUND."
          }
        },
        {
          "name": "List quotations",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/quotations?page=0&size=20",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "quotations"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "0"
                },
                {
                  "key": "size",
                  "value": "20"
                }
              ]
            },
            "description": "Paginated list, newest first. Optional q matches the quotation number."
          }
        },
        {
          "name": "Send quotation",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/quotations/{{quotationId}}/send",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "quotations",
                "{{quotationId}}",
                "send"
              ]
            },
            "description": "DRAFT -> SENT."
          }
        },
        {
          "name": "Accept quotation",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/quotations/{{quotationId}}/accept",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "quotations",
                "{{quotationId}}",
                "accept"
              ]
            },
            "description": "SENT -> ACCEPTED."
          }
        },
        {
          "name": "Reject quotation",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/quotations/{{quotationId}}/reject",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "quotations",
                "{{quotationId}}",
                "reject"
              ]
            },
            "description": "SENT -> REJECTED."
          }
        },
        {
          "name": "Cancel quotation",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/quotations/{{quotationId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "quotations",
                "{{quotationId}}",
                "cancel"
              ]
            },
            "description": "Cancels the quotation."
          }
        },
        {
          "name": "Convert quotation to invoice",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/quotations/{{quotationId}}/convert",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "quotations",
                "{{quotationId}}",
                "convert"
              ]
            },
            "description": "Converts to a DRAFT invoice and returns the new inv_ reference (retrievable via the invoices API)."
          }
        }
      ]
    },
    {
      "name": "Statements (Billing Suite)",
      "item": [
        {
          "name": "Get customer outstanding",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/customers/{{customerId}}/outstanding",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "customers",
                "{{customerId}}",
                "outstanding"
              ]
            },
            "description": "Current outstanding balance for a customer (positive = receivable)."
          }
        },
        {
          "name": "Get customer statement",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/customers/{{customerId}}/statement",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "customers",
                "{{customerId}}",
                "statement"
              ]
            },
            "description": "Full ledger statement: opening/closing balance, totals and entries."
          }
        }
      ]
    },
    {
      "name": "Reports (Billing Suite)",
      "item": [
        {
          "name": "Sales report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/reports/sales?from=2026-07-01&to=2026-07-31&reportType=DAILY",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "reports",
                "sales"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "2026-07-01"
                },
                {
                  "key": "to",
                  "value": "2026-07-31"
                },
                {
                  "key": "reportType",
                  "value": "DAILY"
                }
              ]
            },
            "description": "Sales summary for a date range. reportType groups sales_by_date (DAILY default, MONTHLY, YEARLY)."
          }
        },
        {
          "name": "Profit & loss report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/reports/profit-loss?from=2026-07-01&to=2026-07-31",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "reports",
                "profit-loss"
              ],
              "query": [
                {
                  "key": "from",
                  "value": "2026-07-01"
                },
                {
                  "key": "to",
                  "value": "2026-07-31"
                }
              ]
            },
            "description": "Profit & loss summary for a date range."
          }
        },
        {
          "name": "Inventory valuation report",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/v1/partner/reports/inventory-valuation",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "partner",
                "reports",
                "inventory-valuation"
              ]
            },
            "description": "Current inventory valuation with a per-product breakdown."
          }
        }
      ]
    }
  ]
}
