LOGIC ERP Solutions Pvt. Ltd. is an Indian ERP vendor founded in 1993 and based in Mohali, Punjab, selling retail, distribution and manufacturing ERP into apparel, footwear, textiles, FMCG, supermarkets, pharma, electronics and auto parts. In a brand running LOGIC it is the system of record for the item master, stock by branch and godown, purchase and sale documents, the customer ledger and the retail customer and loyalty file.
LOGIC publishes a genuine API reference. It is not on a developer portal and it is easy to miss, because it sits inside the end-user knowledge base at kb.logicerp.com as a section called API Documentation. It documents roughly sixty endpoints across masters, purchase, orders, sale, inventory, accounts and payroll, each with the endpoint path, the authentication model, a full example request, a field table with types, lengths and mandatory flags, and a real example response. That puts LOGIC well ahead of most Indian ERP vendors in this catalogue.
This page covers the ERP product line and the API as a whole. The point of sale product is covered separately at /connectors/logic-pos. Same vendor, same database, same API: that page explains what is actually different and which of these endpoints matter at store level.
At a glance
The documentation is served from GitBook, so every page is available as clean markdown by appending .md to the URL, and the whole set is indexed at kb.logicerp.com/llms.txt. That is the fastest way to work through it. The API section does not appear in the site's main navigation, so go to the path directly.
What it is
LOGIC ERP is a Windows-stack, India-first ERP sold in three deployment shapes: LOGIC Enterprise-Core, the full on-premise suite for multi-entity chains; LOGIC Cloud, a self-serve cloud product for smaller businesses, hosted at cloud.logicerp.com; and LOGIC Desktop, a subscription on-premise product. The vendor's own FAQ states that the desktop version runs on Microsoft Windows only and that the web application must be hosted on Windows Server. That is a .NET application over Microsoft SQL Server, usually on hardware the customer controls, which is why the API base URL is per customer.
Published modules are billing and invoicing, GST e-invoicing, inventory, point of sale, CRM and loyalty, warehouse management, production, payroll and HR, accounts and finance, and reporting. Android companion apps cover warehouse picking, B2B ordering, point of sale reporting, delivery and customer feedback.
Published case studies name Redtape, stated as over 600 stores, along with Snitch, The Bear House, Kryolan, Sweet Dreams, Peppermint Kids, Trylo and several supermarket chains. Pre-built integrations are advertised with EasyEcom, Unicommerce, Vinculum, Increff, Fynd, Omuni, Shopify, Capillary, Easyrewardz, Xeno, OptCulture, eWards, Paytm, Pine Labs, Razorpay, ICICI Bank and eShipz, and LOGIC publishes its own Shopify app.
API access
Credentials come from the customer's installation, not from a developer console.
- The brand raises a request with LOGIC or its implementation partner to enable the API on their installation and to issue a user name and password.
- LOGIC supplies the base URL. All documented examples use a demo host in the form
http://<host>/api/<EndpointName>, so expect your customer's host plus/api/. - Check whether a pre-built connector already covers the need before building. LOGIC maintains connectors for most of the Indian order management and loyalty platforms.
The vendor's own summary, from its FAQ page: "LOGIC ERP provides a great set of APIs which can be used to integrate our application with various third-party vendors like e-commerce, shipping, CRM, payments portals, warehouses, or any other custom development required by the client. Both PUSH and PULL APIs are available."
The documentation's own definition of those two words is important and is the opposite of what most people assume:
- PUSH "enables external systems to automatically push the information into Logic when an event occurs, such as saving a sale bill". These are writes into LOGIC. Their endpoint names begin with
Save,UpdateorCancel. - PULL "allows for the collection of information from external systems at a predetermined time frequency, such as obtaining a sale bill". These are reads out of LOGIC. Their endpoint names begin with
Get.
No API version number appears in any path or header, and no deprecation policy is published. No official SDK, OpenAPI specification or Postman collection exists in any language. What was checked and found absent on 2026-09-22: api.logicerp.com serves the stock ASP.NET MVC template and 404s on /Help, /swagger and /api; docs.logicerp.com is a document approval application, not developer documentation; developer.logicerp.com and apidoc.logicerp.com do not resolve; GitHub has no LOGIC ERP owned repository; Postman's public search returns one unreadable collection named "Logic ERP" with no requests against any LOGIC host.
Authentication
HTTP Basic Auth on every request. The documentation's authorisation table is the same on every endpoint page:
An authenticated call:
POST /api/GetStockInHand HTTP/1.1
Host: your-logic-host
Authorization: Basic BASE64_OF_USER_COLON_PASSWORD
Content-Type: application/json
{
"StockType": "DELTA",
"Branch_Codes": 2,
"LogicUserCode": "",
"AddlItemCode": "",
"Godown_Name": "",
"RequestDate": "2022-10-03 17:16"
}
Practical notes:
- There is nothing to refresh and nothing to expire. Rotation is a manual, per-installation operation.
- Every documented example uses plain HTTP on the demo host. Insist on TLS for a real installation, because Basic Auth sends the credential on every request.
- Multi-account means one base URL and one credential pair per installation. Branch is a parameter inside the request, not part of the credential, so one credential usually reaches every branch on that installation. Ask whether the user can be scoped to a branch if that matters.
- No scope or permission model is documented. Assume the API user has whatever rights its ERP role has.
Objects we can read
All reads are POSTs whose names begin with Get. Most share a filter shape:
{
"GlobalModifyCode": 0,
"Doc_Codes": "",
"DateFrom": null,
"DateTo": null,
"Branch_Codes_From": ""
}
GlobalModifyCode is the incremental primitive: a monotonically increasing modification counter. Pass the highest value you have seen and LOGIC returns what has changed since. Doc_Codes selects specific documents, and DateFrom with DateTo gives a date window. Use GlobalModifyCode for a sync loop and dates only for backfill.
All read responses wrap rows in a GetData array.
Orders
Sale invoices and returns
POST /api/GetSaleInvoice is the main sales read, documented as covering sale and sale return.
{
"GetData": [
{
"Vouch_Code": 2,
"Bill_No": "WSL-1",
"Bill_Date": "19/04/2023",
"Bill_Time": "19/04/2023 06:49 PM",
"Account_Code": "2721",
"Account_Name": "TEST API",
"Customer_Code": "2721",
"Customer_Name": "TEST API",
"Agent_Name": "NIL",
"Quantity": 1.0,
"Gross_Amount": 1050.0,
"Net_Amount": 1176.0,
"Total_Tax": "126",
"Branch_Name": "WAREHOUSE",
"Branch_Code": 2,
"Type": "SL",
"Action_Code": "N",
"Doc_Prefix": "WSL",
"Doc_Number": "1",
"Branch_Short_Name": "990",
"RCU_Membership_Series": "RCU",
"RCU_Membership_Number": 137821,
"Retail_Cust_Name": "Demo Test",
"Retail_Cust_Mobile_No": "",
"Retail_Cust_Email_ID": "demotest@mail.com",
"SO_Order_No": "ES 257",
"SO_Order_Date": "13/03/23",
"SO_Party_Order_No": "10031",
"Order_No": "10031",
"Challan_No": "",
"Challan_Date": "",
"Gr_Number": "",
"Gr_Date": "",
"Transport_Mode": "",
"Currency_Name": "0",
"Tax_Region_Name": "0"
}
]
}
The sample above is trimmed to the header. The real response also carries a ListItems array with full line detail (LogicUser_Code, AddlItemCode, Lot_Code, Lot_Number, PackName, Quantity, Rate, Gross_Amt, Net_Amt, HSN_Code, Tax_Amt_1 and Tax_Amt_3, five special rates at item and lot level, and CD, TD and SP_CD in both value and percentage form), a tender split on the header (Cash_Amount, Credit_Amount, Credit_Card_Amount, Gift_Voucher_Amount, Discount_Coupon_No, Discount_Coupon_Amt), a Bill_Cancelled flag, the GST e-invoice block (GST_EInvoice_IRN_No, GST_EInvoice_QR_Image, acknowledgement number and date), the e-way bill fields and an InvoicePDFLink. See /connectors/logic-pos for how those are used at store level.
Fields marked PII: Retail_Cust_Name, Retail_Cust_Mobile_No, Retail_Cust_Email_ID, Customer_Name and any address block.
Two things to notice. Type distinguishes the document class, SL in the sample. Action_Code is N here and is likely new against modified or deleted, which matters for a sync loop; confirm the value set with LOGIC. Doc_Prefix plus Doc_Number decompose Bill_No, and Vouch_Code is the internal key.
Other sale reads: POST /api/GetSaleReturnInvoice, POST /api/GetSaleChallan, POST /api/GetSaleChallanReturn, POST /api/GetStockTransferOut.
Purchase
POST /api/GetPurchaseVoucher, GetPurchaseReturn, GetPurchaseChallan, GetPurchaseChallanReturn, GetStockTransferIn.
Products and listings
POST /api/GetItemMaster takes the same filter shape. The response shows how LOGIC models apparel and footwear:
{
"GetData": [
{
"ItemNameWOShade": "BZLTP7203",
"ItemNameWithShade": "BZLTP7203 NAV",
"Addl_Item_Name": "6329 B22",
"Item_Description": "pavers-england-women-sandals-53",
"Comp_Name": "PAVERS ENGLAND",
"Raw_Or_Finish": "FI",
"Shade_Name": "NAVY",
"Shade_Short_Name": "NAV",
"ItemDetailCode": 435,
"UserCode": "10",
"AddlItemCode": "8903247430802",
"PackName": "6 (39)",
"Packing": "PAIR",
"BasicRate": 450.67,
"PurRate": 450.67,
"SaleRate": 0.0,
"MRP": 2999.0,
"Group_Name1": "TOEPOST",
"Group_Name2": "CASUAL",
"Group_Name3": "LADIES",
"Group_Name4": "FOOTWEAR",
"Group_Name25": "64029190",
"Group_Name30": "GST FOOTWEAR"
}
]
}
The single biggest mapping hazard in this product. An item is a style plus a shade plus a pack size: ItemNameWOShade is the style, ItemNameWithShade adds colour, and PackName and Packing carry the size and unit. The saleable unit is addressed by UserCode (the LOGIC item code) or AddlItemCode (usually the barcode or EAN), and almost every write accepts either.
Classification lives in thirty numbered, unlabelled slots: Group_Name1 through Group_Name30, each with a matching Group_Short_Name. Their meaning is configured per customer. In the vendor's own sample, slot 4 holds the category, slot 25 holds what is clearly an HSN code and slot 30 holds a GST classification, but none of that is guaranteed on another installation. Get the slot mapping from the customer before writing any transformation. Do not infer it from this page.
Party master
POST /api/GetPartyMaster returns accounts, meaning customers and suppliers as ledger parties.
Inventory
POST /api/GetStockInHand returns stock, and it has two modes.
Mode one, by barcode. LogicUserCode takes a comma-separated list, so one call covers many items:
{
"Branch_Codes": 2,
"BranchShortNames": "",
"LogicUserCode": "8903247032716,8903247035045,8903247047413",
"AddlItemCode": "",
"Godown_Name": "",
"RequestDate": ""
}
Mode two, changed-since. Setting StockType to DELTA with a RequestDate returns only what has moved since that timestamp, documented as "Auto Retrive Inventory againts Request Date If any Changed". This is the most valuable endpoint in the whole set, because a changed-since stock feed is exactly what most Indian ERPs fail to provide.
The response:
{
"GetData": [
{
"Branch_Code": 2,
"Branch_Name": "WAREHOUSE",
"Godown_Name": "",
"Godown_Code": 0,
"LogicUserCode": "8903247032716",
"AddlItemCode": "8903247032716",
"Item_Name": "BZLMU8103 GOL",
"Shade_Name": "GOLD",
"Pack_Name": "6 (39)",
"Packing": "PAIR",
"Lot_Number": "",
"Lot_Code": 0,
"Stock_Qty": 1.0,
"Lot_Sale_Rate": 0.0,
"Lot_Basic_Rate": 0.0,
"Lot_MRP": 0.0,
"Lot_SPRate1": 0.0,
"Item_Sale_Rate": 0.0,
"Item_MRP": 2799.0,
"Carton_Stock": 0.0,
"Lot_Pur_Date": null,
"Lot_Expiry_Date": null
}
]
}
Stock is per branch and per godown, and optionally per lot with purchase and expiry dates, which matters for pharma and FMCG. Note that both a lot-level and an item-level price are returned, and in the sample the lot-level values are zero while the item-level MRP is populated. Prefer the lot value when non-zero and fall back to the item value.
Payroll
POST /api/GetEmployeeDiscountPointsStatus.
What is not readable
There is no shipment or carrier object, no AWB and no tracking event. Transport_Mode, Gr_Number and Gr_Date on the invoice are free-text transport references, not a carrier record. There is no marketplace settlement object.
Writing back: listings, price and stock
Writes are POSTs whose names begin with Save, Update or Cancel. The coverage is broad.
Sale
The sale invoice request is the fullest example in the documentation. Trimmed to the parts that matter:
{
"BillSeries": "WSL",
"Bill_Number": 0,
"Bill_Date": "22/06/2023",
"BranchCode": 2,
"BranchShortName": "",
"Godown_Name": "",
"PartyUserCode": "99004477",
"OrderNo": "1011",
"OrderDate": "22/06/23",
"PaymentMode": "",
"Freight": 0.0,
"CD_P": 0.0,
"TD_P": 0.0,
"SpDiscountRs": 0.0,
"Adjustment_Rs": 0.0,
"RCU_Mem_Prefix": "",
"RCU_Mem_Number": 0,
"RCU_Mobile_No": "",
"RCU_Email": "",
"RCU_First_Name": "",
"RCU_Last_Name": "",
"BillingAddress": {
"Mobile_No": "9898989898",
"Contact_Person_Name": "",
"Address_1": "",
"Address_2": "",
"City_Name": "",
"State_Name": "",
"Pin_Code": "",
"Country_Name": "",
"Email_Id": "",
"Phone_Number": ""
},
"ShippingAddress": { "Mobile_No": "9898989898" },
"LstItems": [
{
"LogicUserCode": "TESTITEM101",
"AddlItemCode": "",
"Quantity": 5.0,
"Rate": 1200.0,
"Mrp": 0.0,
"CD_P": 0.0,
"TD_P": 0.0,
"Scheme_Rs": 0.0,
"Lot_No": "",
"ItemDescription": ""
}
],
"TenderDetails": [
{
"TenderType": "CREDIT",
"CardName": "",
"CardNo": "",
"GiftVoucherNo": "",
"Amount": 0.0
}
]
}
Response:
{
"PrintFile": "",
"Invoice_No": "WSL-58",
"Order_No": "",
"Status": true,
"Message": "Saved Doc No.-WSL-58\r\n Doc Date-22/06/2023",
"LastSavedCode": 177
}
Design notes:
- Only two fields are marked mandatory on the line:
Quantity, and eitherLogicUserCodeorAddlItemCode. That is the resolution point. If your catalogue carries EANs,AddlItemCoderemoves the need for an id lookup entirely, which is a real advantage over ERPs that demand internal ids. Bill_Numbersent as 0 lets LOGIC allocate againstBillSeries. Store the returnedInvoice_NoandLastSavedCode.- Dates are
DD/MM/YYYYstrings, withDD/MM/YYappearing on some fields in the same document. Do not assume one format across fields. CD_P,TD_PandSpCD_Pare cash, trade and special discount percentages, and appear at both header and line level.SpDiscountRsandAdjustment_Rsare absolute amounts. Discount is not one number.TenderDetailsis an array, so split tenders are supported, with card name, card number and gift voucher number carried per tender. Never storeCardNo.- The
RCU_prefix fields attach a retail customer and loyalty membership to the bill. See /connectors/logic-pos. - There is no documented idempotency key.
OrderNoandOrder_Idare external reference fields and are the natural place to write your own identifier, but uniqueness is not stated. Read back withGetSaleInvoicebefore retrying a failed write.
Orders
POST /api/SaveSaleOrder, POST /api/CancelSaleOrder, POST /api/SavePurchaseOrder, POST /api/SavePurchaseIndent, POST /api/SaveInvoiceAgainstSO, plus invoice against delivery order, assigned delivery order, packing slip against sale order and stock transfer out against sale order.
Purchase
POST /api/SavePurchaseVoucher, purchase return, purchase against purchase challan, purchase return against challan return, stock transfer in, physical verification and rate difference debit notes against purchase.
Inventory
POST /api/SaveGodownTransfer, POST /api/SaveIssueStock, POST /api/SaveReceiptStock. Stock is never set to an absolute figure; it moves through these documents. Model a correction as an issue or a receipt and agree the document type with the customer.
Masters
POST /api/SaveItem creates an item, POST /api/SaveParty creates an account, POST /api/SaveRetailCustomer and POST /api/UpdateRetailCustomer handle the retail customer file. Price reaches LOGIC through the item master, not through a separate price endpoint: BasicRate, PurRate, SaleRate and MRP all live on the item.
Accounts and payroll
Cash and bank receipts and payments, and journal vouchers in seven flavours: normal, sale, sale return, purchase, purchase return, debit note and credit note. Payroll covers daily attendance, gate attendance and employee discount points.
Webhooks and notifications
None outbound. LOGIC's "PUSH" means an external system calling into LOGIC. There is no subscription endpoint, no callback URL, no event list and no signature scheme anywhere in the documentation.
Poll, and poll well, because LOGIC gives you the primitives to do it cheaply:
- Sale documents:
GetSaleInvoicewithGlobalModifyCodeset to the highest value seen, every 15 minutes. Backfill withDateFromandDateToonly when recovering. - Stock:
GetStockInHandwithStockTypeset toDELTAandRequestDateset to the last successful run, hourly or better. This is far cheaper than a full stock pull and is the main reason a LOGIC connector can be well behaved. - Masters:
GetItemMasterandGetPartyMasterwithGlobalModifyCode, hourly, with a daily full refresh.
Agree the cadence with the customer's IT contact before enabling it. Most installations are a Windows Server that is also running store billing, and a badly sized poll competes directly with it.
Rate limits and pagination
Not published. No quota number, no header, no burst policy.
There is also no pagination: no page number, no page size, no cursor and no continuation token on any read. The only way to bound a response is the filter, so GlobalModifyCode, Doc_Codes, the date window and Branch_Codes_From are your page controls. Always set at least one. An unbounded GetItemMaster against a large apparel catalogue will return every item with thirty group fields each, in one response.
For LOGIC Cloud, the vendor-hosted multi-tenant deployment, a shared limit probably exists but is not published. Ask for it explicitly.
Practical guidance: one request in flight per installation, narrow filters, and prefer the delta forms.
Mapping to the unified model
Gaps and open questions
- The
Group_Name1toGroup_Name30slot mapping is customer-configured and undocumented. It blocks any category, HSN or brand mapping and is the first thing to obtain. Action_Codeis returned but its value set is not documented. A sync loop probably needs it to distinguish new from modified from deleted.GlobalModifyCodesemantics are not explained beyond the field name. Confirm that it is monotonic, whether it is global across document types or per type, and whether a deleted document changes it.- No pagination exists. On a large catalogue or a busy branch, response sizes are unbounded. Ask whether a page parameter exists that is not documented.
- No rate limit, no quota header, no concurrency guidance.
- No idempotency mechanism on writes. Duplicate protection has to be built on our side.
- No list endpoint for branches or godowns was found, although both are parameters everywhere.
- Error semantics beyond
Status,MessageandErrorCodeare not documented, and there is no error code list. - Whether the API surface is identical across LOGIC Enterprise-Core, LOGIC Cloud and LOGIC Desktop is not stated. Establish which product the customer runs.
- Every documented example uses plain HTTP. Confirm TLS is available on the customer's installation before sending Basic Auth credentials.
- Date formats vary within a single document between
DD/MM/YYYYandDD/MM/YY, and the stock delta filter usesYYYY-MM-DD HH:MM. Check per field. - Beware the name collision: an unrelated open source Portuguese point of sale project is also called LogicPOS, published by Logic Pulse. Any GitHub result under that name is not this vendor, including a repository whose description mentions integrating "LogicERP with LogicPOS".
Sources
- LOGIC ERP API Documentation, read 2026-09-22. The vendor's own published reference. Source of every endpoint, request, response and field table on this page
- LOGIC ERP API overview page, read 2026-09-22. Source of the Basic Auth model and the vendor's definitions of PUSH and PULL
- LOGIC ERP documentation index, read 2026-09-22. Machine-readable index of every page, including the roughly sixty API pages
- Individual API pages read 2026-09-22: sale push and pull for sales invoice, sales return, challan, stock transfer out, retail footfalls, gift voucher and cancel; masters push and pull for item, account, retail customer; inventory push for godown transfer, issue and receipt; orders push and pull; purchase push and pull; accounts push; payroll push; stock in hand and delta stock in hand
- LOGIC ERP home page and FAQ page, read 2026-09-22. Product line, modules, industries, the Windows-only deployment statement and the PUSH and PULL statement
- Logic ERP Integration on the Shopify App Store, read 2026-09-22. First party app, free, launched 31 July 2025
- Direct probes on 2026-09-22:
api.logicerp.comserves the stock ASP.NET MVC page and 404s on/Help,/swaggerand/api;docs.logicerp.comis an approval workflow application;developer.logicerp.comandapidoc.logicerp.comdo not resolve - GitHub and Postman public searches for
logicerp, run 2026-09-22: no vendor owned repository, SDK or readable collection