{
  "info": {
    "_postman_id": "5d1c2f7e-0b8a-4c6e-9f3a-6a2f1d0e7b12",
    "name": "StockMount Out API (EN)",
    "description": "StockMount Out API endpoints. Run one of the DoLogin requests in the authentication folder first; the returned ApiCode is saved to the `apiCode` variable.\n\nDocumentation: https://outsample.stockmount.com/en",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "event": [
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "exec": [
          "pm.test(\"HTTP 200\", () => pm.response.to.have.status(200));",
          "const body = pm.response.json();",
          "pm.test(\"Result: true\", () => pm.expect(body.Result, `${body.ErrorCode} ${body.ErrorMessage}`).to.be.true);",
          "if (body.ErrorCode === \"00001\" || body.ErrorCode === \"00006\") {",
          "    console.warn(\"ApiCode geçersiz veya süresi dolmuş / ApiCode invalid or expired: run DoLogin again.\");",
          "}"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://out.stockmount.com"
    },
    {
      "key": "apiCode",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "Authentication",
      "description": "Get the ApiCode that every other call needs.",
      "item": [
        {
          "name": "DoLogin",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiKey\": \"{{apiKey}}\",\n  \"ApiPassword\": \"{{apiPassword}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/User/DoLogin",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "User",
                "DoLogin"
              ]
            },
            "description": "**Log in and get an ApiCode** — Logs in with an API key and password and returns the `ApiCode` you send with every other request.\n\nYou create the API key and password in the StockMount panel under Settings → API service settings. An account can have at most 2 keys. Only keys with active status can log in.\n\nSend the returned `ApiCode` in the `ApiCode` field of the JSON body of every other request. It is an encrypted, opaque string and can contain `+`, `/` and `=`. Do not try to decode or modify it.\n\nThe session is valid for the period set in the system settings, counted from the last login with the same credentials (in minutes; default 1440 minutes = 24 hours). Service calls do not extend it. When it expires, requests return `00001` with \"Your session has timed out, please refresh your ApiCode using 'DoLogin' service.\". Then call `DoLogin` for a new `ApiCode` and retry the request.\n\nIf you call `DoLogin` again with the same credentials while the session is valid, the credentials are checked again, the same `ApiCode` is returned and the session period starts over. Every system that uses the same API key gets the same `ApiCode`. Store the `ApiCode` and reuse it; call `DoLogin` when you get `00001` or `00006`, not before every request.\n\nEach API key has its own session; logging in with one does not affect the `ApiCode` of another.\n\nTo log in, the account must be active and must have a valid package that gives API access: an unexpired paid or trial StockMount package, or an unexpired Out API service. If neither exists, the call returns `99988`.\n\nWrong credentials, a passive account, a passive API key, a closed account and server maintenance all give the same result: `00001` with an empty `ErrorMessage`. The actual reason is not returned.\n\nhttps://outsample.stockmount.com/en/api/User/DoLogin"
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const login = pm.response.json();",
                  "const apiCode = login.Result && login.Response ? login.Response.ApiCode : null;",
                  "if (apiCode) {",
                  "    pm.collectionVariables.set(\"apiCode\", apiCode);",
                  "    if (pm.environment.name) pm.environment.set(\"apiCode\", apiCode);",
                  "}"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "Orders",
      "description": "Pull marketplace orders and update their status, shipment and invoice details.",
      "item": [
        {
          "name": "GetSales",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 12345,\n  \"OrderStatus\": \"New\",\n  \"StartDate\": \"2026-11-01T00:00:00\",\n  \"EndDate\": \"2026-11-04T00:00:00\",\n  \"InvoiceStatus\": 0,\n  \"PageIndex\": 1,\n  \"RowsByPage\": 100\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/GetSales",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "GetSales"
              ]
            },
            "description": "**List orders** — Returns a store's orders in one status, page by page.\n\n`StoreId` and `OrderStatus` are always required. On top of that use one of three modes: (1) a `StartDate` + `EndDate` range, (2) ID-based incremental fetch with `BiggestOrderDetailId` or `SmallestOrderDetailId`, (3) change-based fetch with `LastModificationTimeFrom`. In modes (2) and (3) the dates are optional and the 7-day limit does not apply; if you still send dates they are applied as filters.\n\nIn date-range mode `StartDate` must be earlier than `EndDate` and the gap can be at most 7 days (exactly 7 is accepted). The filter applies to the order's `OrderDate`. Note: the server adds 1 day to `EndDate` and includes both bounds. For example `StartDate`=`2026-11-01T00:00:00`, `EndDate`=`2026-11-02T00:00:00` returns orders from 1 Nov 00:00 to 3 Nov 00:00. If you scan with consecutive windows you can receive the same order twice; deduplicate by `OrderId`.\n\nSend dates as ISO 8601 in Turkey time (UTC+3) without an offset, e.g. `2026-11-05T14:30:00`. A trailing `Z` is ignored: the value is still treated as Turkey time. An explicit offset such as `+03:00` is converted correctly. Do not use local formats like `05.11.2026`; day and month can be swapped.\n\nTime zones in the response are mixed. `OrderDate`, `CargoDate`, `InvoiceTime`, `PackageTime` and `WayBillTime` are converted to UTC and end with `Z`. `LastModificationTime` is not converted and is Turkey time without an offset. If you reuse a returned `OrderDate` as `StartDate`, convert it back to Turkey time first.\n\nEmpty dates are not returned as `null`. Empty `CargoDate`, `InvoiceTime`, `PackageTime` and `WayBillTime` come back as `1899-12-31T22:03:00Z` (1900-01-01 Turkey time in UTC). Treat any date before 1900 as empty. Fields whose value is `null` (e.g. `PaymentMethod`, `CompanyTitle`) are omitted from the response.\n\nPaging: `PageIndex` starts at 1; 0 or missing means 1. `RowsByPage` is orders per page (not lines); missing or 0 means 20, the maximum is 200. Larger values are silently capped at 200. Results are always sorted by `OrderDate` descending (newest first). `TotalOrderCount` is the total number of matching orders; page count = `ceil(TotalOrderCount / RowsByPage)`. Paging is offset-based, so records can shift between pages if new orders arrive while you page.\n\nThe status filter works at line (order item) level. An order is returned only with its lines in the requested status; lines of the same order in other statuses are not in this response. To get every line, call once per status code or use `GetOrder`. Valid codes come from `GetIntegrationOrderListingStatus` and differ per marketplace. An unknown code is not an error; it returns an empty list.\n\nWith `BiggestOrderDetailId` you get orders that have at least one line whose `OrderDetailId` is greater than the value; `SmallestOrderDetailId` does the same for smaller IDs. These filters, `InvoiceStatus` and `LastModificationTimeFrom`/`To` only decide which orders are selected. A selected order comes back with all its lines in the requested status, so lines you already have can come again. Deduplicate by `OrderDetailId`.\n\n`LastModificationTimeFrom`/`To` filter on the line's `LastModificationTime` (Turkey time, bounds included, values after year 2000). The value changes when the line status changes. Only `LastModificationTimeFrom` lifts the date requirement; if you send only `LastModificationTimeTo`, `StartDate`/`EndDate` are still required. Lines with an empty `LastModificationTime` never match this filter.\n\nValidation errors use code `00003`. `ErrorMessage` holds the field name (`StoreId`, `OrderStatus`) or a Turkish text: `StartDate parametresi boş olamaz` (StartDate is empty), `EndDate parametresi boş olamaz` (EndDate is empty), `StartDate parametresi EndDate parametresinden büyük olamaz` (StartDate is after EndDate; also returned when they are equal), `EndDate parametresi ile StartDate parametresi farkı 7 günden fazla olamaz` (range longer than 7 days).\n\nFor Amazon stores buyer and address fields are stored encrypted and decrypted before the response is sent. The request fields `OrderId` and `LiveResult` are ignored here. `GetOrders` is an old alias that does exactly the same; use `GetSales` in new integrations.\n\n`TotalNotInvoicedCount` and `TotalUnreadCount` always return `0`; do not use them.\n\nhttps://outsample.stockmount.com/en/api/Integration/GetSales"
          }
        },
        {
          "name": "GetOrder",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"OrderId\": 4567890\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/GetOrder",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "GetOrder"
              ]
            },
            "description": "**Get a single order** — Returns one order with all its lines by `OrderId`.\n\nOnly `OrderId` is used. `StoreId` is not a filter; it is only read to decide on Amazon decryption. Other `GetSales` fields are ignored.\n\nThe response has the same shape as one order in `GetSales`, with differences: all lines are returned regardless of status; `OrderStatus` is the order-level status and is repeated on every line (use `GetOrderDetailStatus` for line status); `PersonType`, `PaymentType` and `Country` are not returned; `LastModificationTime` is always `0001-01-01T00:00:00`; `PackageNumber` holds the value written by `SetOrderDetailInvoiced` instead of the marketplace package number.\n\nDate rules match `GetSales`: `OrderDate`, `CargoDate`, `InvoiceTime`, `PackageTime`, `WayBillTime` are UTC (with `Z`); empty dates come back as `1899-12-31T22:03:00Z`.\n\nBuyer and address fields are read from the order record. `GetSales` also reads the updated address record; if the two endpoints differ, trust `GetSales`.\n\nFor an `OrderId` that does not exist the call returns `Result` false with `ErrorCode` `99999` (`ErrorMessage` is a .NET exception text). A missing `OrderId` returns `00003` / `OrderId`.\n\nhttps://outsample.stockmount.com/en/api/Integration/GetOrder"
          }
        },
        {
          "name": "SetOrder",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 67890,\n  \"Order\": {\n    \"IntegrationOrderCode\": \"WEB-2026-000123\",\n    \"OrderStatus\": \"New\",\n    \"OrderDate\": \"2026-11-05T14:30:00\",\n    \"Nickname\": \"musteri-4411\",\n    \"Fullname\": \"Mehmet Demir\",\n    \"Name\": \"Mehmet\",\n    \"Surname\": \"Demir\",\n    \"Address\": \"Atatürk Cad. No:12\",\n    \"District\": \"Nilüfer\",\n    \"City\": \"Bursa\",\n    \"PostalCode\": \"16110\",\n    \"Telephone\": \"05321234567\",\n    \"PersonalIdentification\": \"11111111111\",\n    \"TaxNumber\": \"11111111111\",\n    \"Notes\": \"Kapıya bırakılabilir.\",\n    \"OrderDetails\": [\n      {\n        \"IntegrationOrderDetailId\": \"WEB-2026-000123-1\",\n        \"IntegrationProductCode\": \"KUPA-350\",\n        \"ProductName\": \"Seramik Kupa 350 ml\",\n        \"Quantity\": 3,\n        \"Price\": 129.9,\n        \"TaxRate\": 20,\n        \"DetailType\": 1,\n        \"CargoPayment\": \"Seller\"\n      }\n    ]\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SetOrder",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SetOrder"
              ]
            },
            "description": "**Create or update an order** — Adds an external order to a StockMount-type store, or updates an existing one.\n\nWorks only for StockMount-type stores (`IntegrationId` = 9999). You cannot write orders into marketplace stores (Trendyol, Hepsiburada, etc.); that returns `10001` / `Store has to be StockMount store!`.\n\nWith `Order.OrderId` 0 or missing a new order is created. If the store already has an order with the same `IntegrationOrderCode`, nothing is added and an error is returned. With `Order.OrderId` set, that order is updated; if it is not in the store you get `50006`.\n\nOn update all lines of the order are deleted and the lines in the request are inserted again, so line `OrderDetailId` values change. An update does not change `CompanyTitle`, `Nickname` or `IntegrationOrderCode`. Everything runs in one database transaction; on error nothing is kept.\n\nDefaults: if `OrderDate` is missing or before 2000, the server time (Turkey) is used. Empty `Name` falls back to `Fullname`. If a line has no `Address`, the order's address, city, district, postal code, phone and delivery name (title or full name) are copied. An empty line `OrderStatus` takes the order status. `CargoPayment` values other than `Seller`, `Buyer` or `Unknown` become `Unknown`.\n\nSend dates in Turkey time without an offset (see `GetSales`). `Price` and `Quantity` are stored with 2 decimal places.\n\nOn success `Response` holds the saved order in `GetOrder` format. `Order.Email` and the line fields `InvoiceNumber`, `InvoiceTime`, `PackageNumber`, `PackageTime`, `WayBillNumber`, `WayBillTime` and `VariantProductCode` are not saved; use `SetOrderDetailInvoiced` for invoice data.\n\nValidation errors use `00003` and `ErrorMessage` names the field: `OrderDetails`, `StoreId`, `IntegrationOrderCode`, `Nickname`, `OrderStatus`, `CompanyTitle/Fullname`, `Address`, `OrderDetail.IntegrationProductCode`, `OrderDetail.ProductName`, `OrderDetail.Quantity`.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/SetOrder"
          }
        },
        {
          "name": "SetOrderNotes",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"OrderId\": 4567890,\n  \"Notes\": \"Müşteri aradı, hediye paketi istedi.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SetOrderNotes",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SetOrderNotes"
              ]
            },
            "description": "**Save the order note** — Writes or clears an order's note in StockMount.\n\nThe note is stored only in StockMount; it is not sent to the marketplace. It overwrites the existing note. An empty or missing `Notes` clears it.\n\nThe body is an order object but only `OrderId` and `Notes` are read; other fields are ignored. On success `Response` is empty.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/SetOrderNotes"
          }
        },
        {
          "name": "ConfirmOrRejectOrderItem",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 12345,\n  \"IntegrationId\": 2,\n  \"IntegrationOrderDetailId\": \"245678901234\",\n  \"Status\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/ConfirmOrRejectOrderItem",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "ConfirmOrRejectOrderItem"
              ]
            },
            "description": "**Accept or reject an N11 order item** — Accepts or rejects a single order item on N11 for an N11 store.\n\nN11 stores only; `IntegrationId` must be 2. Other values return `00003` / `IntegrationId`.\n\n`IntegrationOrderDetailId` is N11's numeric item ID (`IntegrationOrderDetailId` from `GetSales`). Values containing `_` (e.g. additional service lines) are skipped when accepting. One item per call.\n\nWhen rejecting, `...` is sent to N11 as the reason; you cannot set a reason.\n\nThe action is performed on N11. The line status in StockMount is not updated by this call; it changes on the next N11 order sync.\n\nValidation errors use `00003`; `ErrorMessage` is `StoreId`, `Status`, `IntegrationId` or `IntegrationOrderDetailId`.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/ConfirmOrRejectOrderItem"
          }
        },
        {
          "name": "SetOrderShipmentInformation",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 12345,\n  \"IntegrationId\": 2,\n  \"OrderDetailId\": 9876543,\n  \"SendShipmentInformation\": true,\n  \"ShipmentCompany\": \"344\",\n  \"ShipmentTrackingCode\": \"1234567890123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SetOrderShipmentInformation",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SetOrderShipmentInformation"
              ]
            },
            "description": "**Send shipment information** — Sends the shipping company and tracking code of an order line to the marketplace and saves them in StockMount.\n\nOnly does something for these store types: N11 (`IntegrationId` 2), T-Soft (22) and StockMount (9999). GittiGidiyor (1) code still exists but the marketplace is closed. For other marketplaces (Trendyol, Hepsiburada, etc.) the call sends nothing and returns `Result` false with `ErrorCode` `60001`.\n\nIf `IntegrationId` is not sent, it is looked up from the store. Sending it is recommended, since you know the store's marketplace.\n\n`SendShipmentInformation` must be true, otherwise `00003` / `SendShipmentInformation` is returned. `OrderId` and `IntegrationOrderDetailId` are looked up from `OrderDetailId` when missing.\n\n`ShipmentCompany` is the marketplace's shipping company code: the `Code` value from `GetIntegrationShipmentCompanies`. For N11 it must be numeric. For T-Soft it is checked against the T-Soft shop's cargo list. For StockMount stores it is free text. An unknown code returns `00004` / `ShipmentCompany`.\n\nIf the line already has a tracking code you get `60002` / `Order item shipment information already exists !`; the info cannot be changed.\n\nOn success StockMount saves the shipping company (`ShipmentCompany` or the company name, followed by `ShipmentBranch`), the tracking code and the shipping date (now). These values are written to all lines of the order. The status is updated: `Shipped` for N11 and StockMount, `6` for T-Soft.\n\nThe fields `ShipmentCompanyName`, `ShipmentCompanyId`, `ShipmentMethod`, `CampaignNumber`, `SendPhoneMessage`, `UserMessage` and `SmUser` are ignored.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/SetOrderShipmentInformation"
          }
        },
        {
          "name": "SetOrderDetailInvoiced",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"OrderDetails\": [\n    {\n      \"OrderDetailId\": 9876543,\n      \"StoreId\": 12345,\n      \"Invoiced\": true,\n      \"InvoiceNumber\": \"ABC2026000000123\",\n      \"InvoiceTime\": \"2026-11-05T15:00:00\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SetOrderDetailInvoiced",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SetOrderDetailInvoiced"
              ]
            },
            "description": "**Save invoice data for lines** — Marks order lines as invoiced or not invoiced and saves invoice, package and waybill numbers and dates.\n\nData is written only to StockMount; nothing is sent to the marketplace. Use `SetEinvoiceLink` to push an invoice link to the marketplace.\n\nSend `OrderDetailId` and `StoreId` for every line. With a wrong or missing `StoreId` the line is silently not updated and `Result` is still true.\n\n`Invoiced` is always written; if omitted it is `false` and the line is marked as not invoiced. The internal invoice record date is set to now on every call.\n\n`InvoiceNumber`, `PackageNumber` and `WayBillNumber` are updated only when non-empty; an empty string or omission keeps the current value. Date fields are also updated only when sent. Send dates in Turkey time without an offset; `GetSales` returns them converted to UTC.\n\nLines are processed one by one; the call is not transactional. A line that belongs to another user stops processing and can return `99999`; earlier lines stay updated. On success `Response` is empty.\n\nEmpty `OrderDetails` returns `00003` / `OrderDetails`; a line with `OrderDetailId` < 1 returns `00003` / `OrderDetailId`.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/SetOrderDetailInvoiced"
          }
        },
        {
          "name": "SetEinvoiceLink",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 12345,\n  \"IntegrationOrderCode\": \"10293847\",\n  \"InvoiceNumber\": \"ABC2026000000123\",\n  \"InvoiceId\": \"3f2a9c1e-7b4d-4e8a-9c21-5d6e7f8a9b0c\",\n  \"InvoiceScenario\": \"EARSIVFATURA\",\n  \"InvoiceTime\": \"2026-11-05T15:00:00\",\n  \"InvoiceLink\": \"https://efatura.example.com/view/3f2a9c1e-7b4d-4e8a-9c21-5d6e7f8a9b0c.pdf\",\n  \"SendEinvoiceToPlatform\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SetEinvoiceLink",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SetEinvoiceLink"
              ]
            },
            "description": "**Save the e-invoice link** — Saves an order's e-invoice data and link, and can also send the link to the marketplace.\n\nThe order is found by store and marketplace order number (`IntegrationOrderCode`). With `IntegrationOrderDetailIds` only those marketplace line IDs are updated; otherwise all lines of the order. If the order number is not found in the store given by `StoreId`, you get `Invalid order.`; an order with the same number in another store is never updated.\n\nUpdated lines get the invoice number, invoice UUID, scenario, link and invoice date, and are marked as invoiced.\n\nWith `SendEinvoiceToPlatform` true the link is also sent to the marketplace. This is supported only for Trendyol, Hepsiburada, N11 and Pazarama stores. If sending fails the link is still saved, but `Result` is false and `ErrorMessage` is `Invoice link saved successfully. Invoice link could not be sent: …` (the rest is usually a Turkish marketplace/system message).\n\nOn success `Message` is `Invoice link saved successfully.` or `Invoice link saved and sent successfully.`; `Response` is empty.\n\nMissing fields are reported together: `00003` with `ErrorMessage` like `Missing: StoreId, InvoiceNumber, …`. Send `InvoiceTime` in Turkey time without an offset.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/SetEinvoiceLink"
          }
        },
        {
          "name": "SetOrderDetailStatus",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"OrderDetails\": [\n    {\n      \"OrderDetailId\": 9877001,\n      \"StoreId\": 67890,\n      \"OrderStatus\": \"Shipped\"\n    },\n    {\n      \"OrderDetailId\": 9877002,\n      \"StoreId\": 67890,\n      \"OrderStatus\": \"Shipped\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SetOrderDetailStatus",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SetOrderDetailStatus"
              ]
            },
            "description": "**Change line status** — Updates the status of order lines in StockMount-type stores in bulk.\n\nWorks only for StockMount-type stores (`IntegrationId` 9999) and sends nothing to any marketplace. Lines of marketplace stores return an error.\n\nLines are processed one by one. `Response` is a list with one result per line: `Result`, `ErrorCode`, `ErrorMessage` and `Response` holding the line's `OrderDetailId`. The top-level `Result` is true only if every line succeeded; on partial failure the top-level `ErrorCode` is empty, so check the list.\n\n`OrderStatus` is not validated (max 50 characters). Use StockMount status codes for consistency. When the status actually changes, the line's `LastModificationTime` is updated, so changes can be tracked with `GetSales` + `LastModificationTimeFrom`.\n\nOnly the line status changes, not the order-level status. `GetOrder` therefore keeps showing the old order-level status; `GetSales` and `GetOrderDetailStatus` show the line status.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/SetOrderDetailStatus"
          }
        }
      ]
    },
    {
      "name": "Products",
      "description": "Add and update products; sync stock, price, name and images. Requires the Product package.",
      "item": [
        {
          "name": "SetProductSourceProducts",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductSourceUrl\": \"https://files.example.com/00012345/out/products.xml\",\n  \"ProductsText\": \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><Products><Product><Code>KUPA-350</Code><Name>Seramik Kupa 350 ml</Name><Price>129.90</Price><Quantity>40</Quantity></Product></Products>\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SetProductSourceProducts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SetProductSourceProducts"
              ]
            },
            "description": "**Upload a product source file** — Uploads the product content you send (e.g. XML) as a file to your product source address on StockMount.\n\nRequires an active Product package; otherwise `70018` is returned.\n\nThe path of `ProductSourceUrl` must be `/{userId}/out/{fileName}`, where `{userId}` is your StockMount user ID left-padded with zeros to 8 digits (e.g. `00012345`). The host name is not checked. A mismatch returns `60501`.\n\n`ProductsText` is written as UTF-8 to the `/{userId}/out/` folder, using the file name from the URL. The content is not validated. On success `Response` is empty.\n\nError messages are inconsistent: a bad URL also returns `ErrorMessage` `ProductsText`. Rely on the code (`60501`).\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Integration/SetProductSourceProducts"
          }
        },
        {
          "name": "GetProductSources",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/GetProductSources",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "GetProductSources"
              ]
            },
            "description": "**List product sources** — Returns the active StockMount-type product sources of your account. Use the returned IDs as `ProductSourceId` in the other product calls.\n\nOnly StockMount-type sources (type 2) are returned: the sources whose products you manage in the StockMount panel or through this API. XML, marketplace integration, supplier, ERP and Excel sources are not listed, and neither are deleted (passive) sources.\n\nThere are no parameters other than `ApiCode`. The list is sorted by name and is not paged. If the source list cannot be read, the call does not fail: it returns `Result: true` with an empty list.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/GetProductSources"
          }
        },
        {
          "name": "GetProductCategories",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductSourceId\": 1234\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/GetProductCategories",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "GetProductCategories"
              ]
            },
            "description": "**List the categories of a source** — Returns the category names used in a StockMount product source, with their IDs.\n\nCategories are free text. `AddProduct` and `UpdateProduct` create a category automatically when the `Category` value is a name the source does not have yet. The API never deletes categories, so the list can contain names that no product uses any more.\n\nProduct calls expect the category name, not its ID. `ProductCategoryId` is informational only; the `ProductCategory` filter of `GetProducts` also takes the name.\n\nThe list is sorted by name and is not paged. Send only source IDs returned by `GetProductSources`.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/GetProductCategories"
          }
        },
        {
          "name": "AddProduct",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductSourceId\": 1234,\n  \"Code\": \"TSHIRT-001\",\n  \"Name\": \"Basic Pamuklu Tişört\",\n  \"Category\": \"Tişört\",\n  \"Price\": 249.9,\n  \"MarketPrice\": 299.9,\n  \"CurrencyId\": 4,\n  \"TaxRate\": 20,\n  \"Quantity\": 30,\n  \"Barcode\": \"8690000000017\",\n  \"Brand\": \"Örnek Marka\",\n  \"Model\": \"BSC-01\",\n  \"Description\": \"<p>%100 pamuk, regular fit.</p>\",\n  \"DispatchPeriod\": 2,\n  \"Volume\": 1,\n  \"VariantName1\": \"Renk\",\n  \"VariantName2\": \"Beden\",\n  \"Images\": [\n    {\n      \"Url\": \"https://cdn.example.com/tshirt-001-1.jpg\"\n    },\n    {\n      \"Url\": \"https://cdn.example.com/tshirt-001-2.jpg\"\n    }\n  ],\n  \"Variants\": [\n    {\n      \"Code\": \"TSHIRT-001-BLK-M\",\n      \"Barcode\": \"8690000000024\",\n      \"Quantity\": 10,\n      \"Price\": 249.9,\n      \"VariantValue1\": \"Siyah\",\n      \"VariantValue2\": \"M\"\n    },\n    {\n      \"Code\": \"TSHIRT-001-BLK-L\",\n      \"Barcode\": \"8690000000031\",\n      \"Quantity\": 20,\n      \"Price\": 249.9,\n      \"VariantValue1\": \"Siyah\",\n      \"VariantValue2\": \"L\"\n    }\n  ],\n  \"Specs\": [\n    {\n      \"Name\": \"Materyal\",\n      \"Value\": \"Pamuk\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/AddProduct",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "AddProduct"
              ]
            },
            "description": "**Add a product** — Adds a new product to a StockMount-type source and saves its variants, images and specs in the same call. The response is the new `ProductId`.\n\nRequired fields are checked in this order: `ProductSourceId`, `CurrencyId`, `Price` (must be greater than 0), `Code`, `Name`, `Category`. The first missing one returns 00003 and `ErrorMessage` names it: `ProductSourceId is missing`, `CurrencyId is missing`, `Price is missing`, `Code is missing`, `Name is missing`, or just `Category`. If any variant has `VariantValueN`, the product must also have `VariantNameN`, otherwise `VariantNameN is missing` is returned.\n\nIf the source is not found in your account, 70002 (`Invalid Product Source`) is returned; if it is not a StockMount-type source, 70003 (`Invalid Product Source Type`). You can add products only to sources listed by `GetProductSources`.\n\n`Code` is unique within the source and compared exactly. If a product with the same code already exists, nothing changes and the response is `{\"Result\": true, \"Message\": \"Product code already exists\", \"ErrorCode\": \"70004\", \"Response\": <existing ProductId>}`. So `Result: true` alone does not mean the product was added; also check `ErrorCode`. Codes of products deleted in the past with the retired `DeleteProduct` still count.\n\nIf you send `UpdateProductByCode: true` and the code exists in the source, the existing product is updated instead of returning 70004 (upsert). `UpdateProduct` rules then apply: omitted fields are cleared and images are not changed.\n\nOn success `Response` is the new `ProductId`. The new product gets status 1 (new) whatever its stock. `ProductId`, `Status`, `Url`, `StoreId`, `CreationTime`, `Image`, `SoldCount` and `SetProductQuantityFromVariants` are ignored by this call.\n\nImages, variants and specs are saved after the product row is saved. Failures there are not reported; the call still returns `Result: true`. If an image upload fails, the image is stored with an empty URL. Invalid Base64 returns 99999, but the product has already been created at that point; repeating the same request then returns 70004. Check the result with `GetProduct`.\n\nVariants are defined by `VariantName1`–`VariantName6` on the product and `VariantValue1`–`VariantValue6` on each variant (e.g. `VariantName1: Color`, `VariantValue1: Black`). The variant `Code` is the matching key for later updates. The product `Quantity` is not calculated from variant stock; send the total yourself.\n\nThis call does not run marketplace-specific checks: barcode format and special characters, mandatory brand, allowed VAT rates, webp images and catalog approval are not checked here. Those checks happen when the product is sent to a marketplace and their results appear in the StockMount panel. Codes 70012 and 70014–70017 are never returned by this call.\n\nLength limits come from database fields and are not checked by the API; longer text is cut without an error. Error messages are in English.\n\nOnly the package error (`70018`) has a Turkish message.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/AddProduct"
          }
        },
        {
          "name": "UpdateProduct",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 987654,\n  \"ProductSourceId\": 1234,\n  \"Code\": \"TSHIRT-001\",\n  \"Name\": \"Basic Pamuklu Tişört\",\n  \"Category\": \"Tişört\",\n  \"Price\": 229.9,\n  \"MarketPrice\": 299.9,\n  \"CurrencyId\": 4,\n  \"TaxRate\": 20,\n  \"Quantity\": 25,\n  \"Barcode\": \"8690000000017\",\n  \"Brand\": \"Örnek Marka\",\n  \"Model\": \"BSC-01\",\n  \"Description\": \"<p>%100 pamuk, regular fit.</p>\",\n  \"DispatchPeriod\": 2,\n  \"Volume\": 1,\n  \"VariantName1\": \"Renk\",\n  \"VariantName2\": \"Beden\",\n  \"Variants\": [\n    {\n      \"Code\": \"TSHIRT-001-BLK-M\",\n      \"Barcode\": \"8690000000024\",\n      \"Quantity\": 5,\n      \"Price\": 229.9,\n      \"VariantValue1\": \"Siyah\",\n      \"VariantValue2\": \"M\"\n    },\n    {\n      \"Code\": \"TSHIRT-001-BLK-L\",\n      \"Barcode\": \"8690000000031\",\n      \"Quantity\": 20,\n      \"Price\": 229.9,\n      \"VariantValue1\": \"Siyah\",\n      \"VariantValue2\": \"L\"\n    }\n  ],\n  \"Specs\": [\n    {\n      \"Name\": \"Materyal\",\n      \"Value\": \"Pamuk\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProduct",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProduct"
              ]
            },
            "description": "**Update a product** — Rewrites an existing product's data, variants and specs with the values you send. It does not change images or the product code.\n\nThis is not a partial update; it rewrites the whole product. Required fields and 00003 messages are the same as in `AddProduct` (`ProductSourceId`, `CurrencyId`, `Price` > 0, `Code`, `Name`, `Category`). Optional fields you omit are cleared: `Barcode`, `Brand`, `Model`, `Subtitle`, `Code2`, `Mpn`, `SellerNote` and `VariantName1`–`VariantName6` become empty; `TaxRate`, `MarketPrice`, `Volume`, `Width`, `Length`, `Height`, `Weight` become 0; `DispatchPeriod` becomes -1; `Description` becomes empty (unless you send `UpdateProductDescription: false`). Read the product with `GetProduct` first and send all fields back.\n\nSome values managed only in the StockMount panel are also reset on every update: sold count (`SoldCount`), minimum sale price, product page URL, meta/SEO fields, invoice name and warranty data. Updated variants also get their sold count reset to 0.\n\nNot changed: images (`Images` and variant image fields are ignored; use `UpdateProductImages`), `Price2`–`Price5`, and the product code (use `SetProductCode`).\n\nThe product is found by `ProductId`, and `Code` must be the product's current code in the source. If the code does not exist in the source, 70005 is returned (`Message`: `There is no product with the given ProductId`); if the code belongs to another product, 70004 is returned with `Result: false` (`Message`: `Product code does not exist`). With `UpdateProductByCode: true`, `ProductId` is not needed: the product is found by `ProductSourceId` + `Code`, and 70005 is returned if it does not exist. For these two errors the text is in `Message`, not `ErrorMessage`.\n\nThe status is recalculated from stock: `Quantity` below 1 gives 3 (stopped / out of stock), otherwise 2 (changed). So a product stopped with `StopProduct` becomes active again when you send stock above 0.\n\nIf you send `Variants`, they are matched by `Code`: matches are updated, new codes are added without an image, and existing variants missing from the list are made passive. Passive variants are not deleted and still appear in `GetProduct`. Empty or omitted `Variants` leaves variants untouched. If you send `Specs`, the whole spec list is replaced; if you omit it, stored specs are kept.\n\nOn success `Response` is the product's `ProductId`, and the product is queued for sync to the active stores where it is listed. This call never returns 70013 (not changed); the record is rewritten even if nothing changed. Category auto-creation, length limits and HTML cleaning work as in `AddProduct`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProduct"
          }
        },
        {
          "name": "StopProduct",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 987654\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/StopProduct",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "StopProduct"
              ]
            },
            "description": "**Stop a product** — Sets the product status to 3 (stopped). The product is not deleted and its stock is not changed.\n\nOnly `ProductId` is read; other fields are ignored. The source type is not checked, so any product in your account can be stopped. Status 3 is also the status of products with zero stock.\n\nTo make the product active again, send `UpdateProduct` with `Quantity` above 0; the status becomes 2.\n\nIf the product is not found or is not yours, 99999 is returned with no `ErrorMessage`. A successful response has no `Response`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/StopProduct"
          }
        },
        {
          "name": "GetProduct",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 987654\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/GetProduct",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "GetProduct"
              ]
            },
            "description": "**Get a product** — Returns one product with its images, variants and specs. Find it by `ProductId` or by `ProductSourceId` + `Code`.\n\nIf `ProductId` is above 0, the product is looked up only by that ID across all your sources and `Code` is ignored. Without `ProductId`, `Code` and `ProductSourceId` are both required. If neither is sent, 00003 is returned (`ErrorMessage`: `ProductId`); `Code` without a source returns 00003 (`ErrorMessage`: `ProductSourceId`). An unknown product returns 70005 (`Product was not found!`). Stopped products (status 3) are returned; products deleted with the retired `DeleteProduct` are not.\n\nVariants and specs are loaded only when you query by `ProductId`. When you query by `Code`, `Variants` is an empty array and `Specs` is missing from the response.\n\n`Variants` also contains variants made passive by `UpdateProduct`, and the variant status is not returned; variants come in creation order.\n\nSome fields are not read and always come back with a fixed value: `Weight`, `StoreId`, `Price2`–`Price5` are 0; `UpdateProductByCode` and `SetProductQuantityFromVariants` are `false`; `UpdateProductDescription` is `true`; in variants, `CurrencyId`, `MinSalePrice` and `Price2`–`Price5` are 0. `VariantName5`, `VariantName6`, `VariantValue5`, `VariantValue6` and `Mpn` are not returned. Fields whose value is `null` are omitted from the response.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/GetProduct"
          }
        },
        {
          "name": "GetProducts",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductSourceId\": 1234,\n  \"Keywords\": \"tişört\",\n  \"ProductStatus\": 99,\n  \"CreationTimeFrom\": \"2025-10-01T00:00:00\",\n  \"PageIndex\": 1,\n  \"RowsByPage\": 50,\n  \"OrderBy\": \"Name\",\n  \"OrderDirection\": \"ASC\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/GetProducts",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "GetProducts"
              ]
            },
            "description": "**List products** — Returns the products of one source, filtered, sorted and paged.\n\n`PageIndex` starts at 1; values below 1 are treated as 1. `RowsByPage` is 100 when omitted or 0, and at most 100 (larger values become 100, negative values become 1). Compute the page count from `FilteredProductCount` and `RowsByPage`.\n\n`OrderBy` must be one of (case-insensitive): `Name`, `ProductId`, `Category`, `Price`, `Quantity`, `Status`, `CurrencyId`. An invalid value does not fail; `ProductId` is used. `OrderDirection` is `ASC` or `DESC`; invalid values fall back to `ASC`.\n\n0 in numeric filters and an empty value in text filters switch the filter off, so you cannot select zero-stock products with `QuantityFrom`/`QuantityTo`. `ProductCode` and `ProductCategory` match exactly. `Keywords` searches the product name (and the marketplace-specific name, if any); spaces act as wildcards: `red shirt` finds names containing `red` followed later by `shirt`.\n\n`CreationTimeFrom` and `CreationTimeTo` are applied only when their year is after 2010. Send them as `2025-01-31T00:00:00`, without a time zone suffix; they are compared as-is with the stored creation time. `CreationTime` in the response also has no time zone suffix.\n\n`TotalProductCount` is the number of products in the source regardless of filters; `FilteredProductCount` is the number matching the filters. Products deleted with the retired `DeleteProduct` are neither counted nor listed; stopped products (status 3) are listed. `ProductSourceId` can be any of your sources; the source type is not checked.\n\nList items carry fewer fields than `GetProduct`: no variants, image list or description. `Image` is the first image URL. `Currency` is the currency code; `NON` is returned as `TRY`. `Barcode` is the product's own barcode (`GetProduct` prefers the integration-level barcode).\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/GetProducts"
          }
        },
        {
          "name": "GetProductSummary",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductSourceId\": 1234\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/GetProductSummary",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "GetProductSummary"
              ]
            },
            "description": "**Get the product summary** — Returns the ID, code, name, barcode and status of every product in a source in one response.\n\nThere is no paging or filtering; all products in the source come in one response, in no guaranteed order. Only `ProductSourceId` is read; the `GetProducts` filter and paging fields are ignored.\n\n`TotalProductCount` and `FilteredProductCount` are always equal to the number of returned products. Products deleted with the retired `DeleteProduct` are not returned; stopped products (status 3) are. Use this call to map products in your system to StockMount `ProductId` values.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/GetProductSummary"
          }
        },
        {
          "name": "SetProductCode",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 987654,\n  \"Code\": \"TSHIRT-001-V2\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/SetProductCode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "SetProductCode"
              ]
            },
            "description": "**Change a product code** — Changes the `Code` of an existing product.\n\nWorks only for products in StockMount-type sources. If the new code is already used by another product in the same source, nothing is changed.\n\n`Code` is at most 50 characters; longer values return 70009 (`ErrorMessage`: `'Code' length must be at most 50 character.`).\n\nIf the product is not found, is not yours, is not in a StockMount-type source, or the code is used by another product, 99999 is returned with no `ErrorMessage`. A successful response has no `Response`.\n\nAfter the change, use the new code in `UpdateProduct`, `GetProduct` and other code-based calls.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/SetProductCode"
          }
        },
        {
          "name": "UpdateProductPrice",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 184522,\n  \"Price\": 349.9,\n  \"MarketPrice\": 449.9,\n  \"Price2\": 329.9,\n  \"Price3\": 0,\n  \"Price4\": 0,\n  \"Price5\": 0,\n  \"Variants\": [\n    {\n      \"ProductVariantId\": 9120344,\n      \"Price\": 349.9,\n      \"Price2\": 329.9\n    },\n    {\n      \"Code\": \"TSHIRT-RED-L\",\n      \"Price\": 359.9,\n      \"Price2\": 339.9\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductPrice",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductPrice"
              ]
            },
            "description": "**Update product price (by ProductId)** — Updates the prices of the product found by `ProductId` and, optionally, of its variants.\n\nEach call updates a single product; you cannot send several products in one call. You can update several variants of that product in the same call with `Variants`.\n\nThe product is identified only by `ProductId`. To update by product code, use the `ByCode` endpoint.\n\n`Price`, `MarketPrice` and `Price2`–`Price5` are overwritten on every call with the values in the request; any field you omit becomes `0`. Send every price you use each time.\n\nEach item in `Variants` is matched to the product's variants by `ProductVariantId`, or by variant `Code` when no ID is given. A matched variant gets its `Price` and `Price2`–`Price5` replaced by the request values (omitted ones become `0`). Variants not in the list are not touched. A variant-level `CurrencyId` is not read; the product-level `CurrencyId` is used.\n\nThis endpoint does not validate prices: `0`, negative values, or a `MarketPrice` lower than `Price` are accepted. Such problems surface as errors during marketplace synchronization, not in this call.\n\nThis endpoint does not change stock or name; `Quantity` and `Name` are ignored.\n\nThe price is written to the product in StockMount first. If any price actually changed, a price update is queued for each active marketplace listing of the product. Marketplaces are updated by background jobs, not during this call. If an update of the same kind is already pending, no duplicate is queued.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductPrice"
          }
        },
        {
          "name": "UpdateProductPriceByCode",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"Code\": \"TSHIRT-RED\",\n  \"ProductSourceId\": 3051,\n  \"Price\": 349.9,\n  \"MarketPrice\": 449.9,\n  \"Price2\": 329.9,\n  \"Price3\": 0,\n  \"Price4\": 0,\n  \"Price5\": 0,\n  \"Variants\": [\n    {\n      \"ProductVariantId\": 9120344,\n      \"Price\": 349.9,\n      \"Price2\": 329.9\n    },\n    {\n      \"Code\": \"TSHIRT-RED-L\",\n      \"Price\": 359.9,\n      \"Price2\": 339.9\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductPriceByCode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductPriceByCode"
              ]
            },
            "description": "**Update product price (by product code)** — Updates the prices of the product found by `Code` and `ProductSourceId` and, optionally, of its variants.\n\nEach call updates a single product; you cannot send several products in one call. You can update several variants of that product in the same call with `Variants`.\n\nThe product is identified by `Code` + `ProductSourceId`; any `ProductId` you send is ignored. If `Code` is empty, `ErrorMessage` says `ProductId`; this means the code is missing.\n\n`Price`, `MarketPrice` and `Price2`–`Price5` are overwritten on every call with the values in the request; any field you omit becomes `0`. Send every price you use each time.\n\nEach item in `Variants` is matched to the product's variants by `ProductVariantId`, or by variant `Code` when no ID is given. A matched variant gets its `Price` and `Price2`–`Price5` replaced by the request values (omitted ones become `0`). Variants not in the list are not touched. A variant-level `CurrencyId` is not read; the product-level `CurrencyId` is used.\n\nThis endpoint does not validate prices: `0`, negative values, or a `MarketPrice` lower than `Price` are accepted. Such problems surface as errors during marketplace synchronization, not in this call.\n\nThis endpoint does not change stock or name; `Quantity` and `Name` are ignored.\n\nThe price is written to the product in StockMount first. If any price actually changed, a price update is queued for each active marketplace listing of the product. Marketplaces are updated by background jobs, not during this call. If an update of the same kind is already pending, no duplicate is queued.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductPriceByCode"
          }
        },
        {
          "name": "UpdateProductQuantity",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 184522,\n  \"SetProductQuantityFromVariants\": true,\n  \"Variants\": [\n    {\n      \"ProductVariantId\": 9120344,\n      \"Quantity\": 15\n    },\n    {\n      \"Code\": \"TSHIRT-RED-L\",\n      \"Quantity\": 0\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductQuantity",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductQuantity"
              ]
            },
            "description": "**Update product stock (by ProductId)** — Updates the stock quantity of the product found by `ProductId` and, optionally, of its variants.\n\nEach call updates a single product; you cannot send several products in one call. You can update several variants of that product in the same call with `Variants`.\n\nThe product is identified only by `ProductId`. To update by product code, use the `ByCode` endpoint.\n\nThe quantity you send replaces the product's available stock; the sold counter StockMount has kept so far is reset to zero. If the new product stock is below 1, the product's `Status` becomes `3`, otherwise `2`.\n\nThe product-level `Quantity` is written on every call. If you send only variant quantities without `Quantity` and do not set `SetProductQuantityFromVariants` to `true`, the product stock becomes `0`. For products with variants, sending `SetProductQuantityFromVariants: true` is recommended.\n\nEach item in `Variants` is matched to the product's variants by `ProductVariantId`, or by variant `Code` when no ID is given. A matched variant's stock is replaced by `Quantity` (`0` if omitted). Variants not in the list are not touched.\n\nQuantities are not validated; negative values are not rejected.\n\nThis endpoint does not change prices; price fields are ignored. The one exception is `CurrencyId`: if you send a value greater than 0, the product currency changes too. Do not send it.\n\nThe stock is written to the product in StockMount first. If the stock changed, a stock update is queued for each active marketplace listing of the product. Marketplaces are updated by background jobs, not during this call. If an update of the same kind is already pending, no duplicate is queued.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductQuantity"
          }
        },
        {
          "name": "UpdateProductQuantityByCode",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"Code\": \"TSHIRT-RED\",\n  \"ProductSourceId\": 3051,\n  \"SetProductQuantityFromVariants\": true,\n  \"Variants\": [\n    {\n      \"ProductVariantId\": 9120344,\n      \"Quantity\": 15\n    },\n    {\n      \"Code\": \"TSHIRT-RED-L\",\n      \"Quantity\": 0\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductQuantityByCode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductQuantityByCode"
              ]
            },
            "description": "**Update product stock (by product code)** — Updates the stock quantity of the product found by `Code` and `ProductSourceId` and, optionally, of its variants.\n\nEach call updates a single product; you cannot send several products in one call. You can update several variants of that product in the same call with `Variants`.\n\nThe product is identified by `Code` + `ProductSourceId`; any `ProductId` you send is ignored. If `Code` is empty, `ErrorMessage` says `ProductId`; this means the code is missing.\n\nThe quantity you send replaces the product's available stock; the sold counter StockMount has kept so far is reset to zero. If the new product stock is below 1, the product's `Status` becomes `3`, otherwise `2`.\n\nThe product-level `Quantity` is written on every call. If you send only variant quantities without `Quantity` and do not set `SetProductQuantityFromVariants` to `true`, the product stock becomes `0`. For products with variants, sending `SetProductQuantityFromVariants: true` is recommended.\n\nEach item in `Variants` is matched to the product's variants by `ProductVariantId`, or by variant `Code` when no ID is given. A matched variant's stock is replaced by `Quantity` (`0` if omitted). Variants not in the list are not touched.\n\nQuantities are not validated; negative values are not rejected.\n\nThis endpoint does not change prices; price fields are ignored. The one exception is `CurrencyId`: if you send a value greater than 0, the product currency changes too. Do not send it.\n\nThe stock is written to the product in StockMount first. If the stock changed, a stock update is queued for each active marketplace listing of the product. Marketplaces are updated by background jobs, not during this call. If an update of the same kind is already pending, no duplicate is queued.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductQuantityByCode"
          }
        },
        {
          "name": "UpdateProductQuantityByBarcode",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"Code\": \"TSHIRT-RED\",\n  \"ProductSourceId\": 3051,\n  \"SetProductQuantityFromVariants\": true,\n  \"Price2\": 329.9,\n  \"Price3\": 0,\n  \"Price4\": 0,\n  \"Price5\": 0,\n  \"Variants\": [\n    {\n      \"Barcode\": \"8690000000017\",\n      \"Quantity\": 15\n    },\n    {\n      \"Barcode\": \"8690000000024\",\n      \"Quantity\": 0\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductQuantityByBarcode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductQuantityByBarcode"
              ]
            },
            "description": "**Update variant stock by barcode** — Updates the stock of the product found by `Code` and `ProductSourceId`, and the stock of its variants matched by barcode.\n\nEach call updates a single product; you cannot send several products in one call. You can update several variants of that product in the same call with `Variants`.\n\nThe product is identified by `Code` + `ProductSourceId`, not by barcode; `ProductId` is ignored. The root-level `Barcode` field is not used. Barcodes are only used to match the variants in `Variants`.\n\nEach item in `Variants` is matched to this product's variants by `ProductVariantId`, or by `Barcode` when no ID is given. A matched variant's stock is replaced by `Quantity` (`0` if omitted). Variants not in the list are not touched.\n\nThe quantity you send replaces the product's available stock; the sold counter StockMount has kept so far is reset to zero. If the new product stock is below 1, the product's `Status` becomes `3`, otherwise `2`.\n\nThe product-level `Quantity` is written on every call. If you send only variant quantities without `Quantity` and do not set `SetProductQuantityFromVariants` to `true`, the product stock becomes `0`. For products with variants, sending `SetProductQuantityFromVariants: true` is recommended.\n\nWarning: although it is a stock endpoint, this endpoint overwrites the product's `Price2`–`Price5` with the request values; if you omit them they become `0`. If you use these prices, send their current values on every call. `Price` and `MarketPrice` are not changed.\n\n`CurrencyId` is ignored by this endpoint; the product currency does not change.\n\nQuantities are not validated; negative values are not rejected.\n\nAfter every successful call, a stock update is queued for each active marketplace listing of the product (unless one of the same kind is already pending). Marketplaces are updated by background jobs, not during this call.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductQuantityByBarcode"
          }
        },
        {
          "name": "UpdateProductQuantityAndPrice",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 184522,\n  \"SetProductQuantityFromVariants\": true,\n  \"Price\": 349.9,\n  \"MarketPrice\": 449.9,\n  \"Price2\": 329.9,\n  \"Price3\": 0,\n  \"Price4\": 0,\n  \"Price5\": 0,\n  \"Variants\": [\n    {\n      \"ProductVariantId\": 9120344,\n      \"Quantity\": 15,\n      \"Price\": 349.9,\n      \"Price2\": 329.9\n    },\n    {\n      \"Code\": \"TSHIRT-RED-L\",\n      \"Quantity\": 0,\n      \"Price\": 359.9,\n      \"Price2\": 339.9\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductQuantityAndPrice",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductQuantityAndPrice"
              ]
            },
            "description": "**Update product stock and price (by ProductId)** — Updates stock and prices of the product found by `ProductId` and, optionally, of its variants in one call.\n\nEach call updates a single product; you cannot send several products in one call. You can update several variants of that product in the same call with `Variants`.\n\nThe product is identified only by `ProductId`. To update by product code, use the `ByCode` endpoint.\n\nThe quantity you send replaces the product's available stock; the sold counter StockMount has kept so far is reset to zero. If the new product stock is below 1, the product's `Status` becomes `3`, otherwise `2`.\n\nThe product-level `Quantity` is written on every call. If you send only variant quantities without `Quantity` and do not set `SetProductQuantityFromVariants` to `true`, the product stock becomes `0`. For products with variants, sending `SetProductQuantityFromVariants: true` is recommended.\n\n`Price`, `MarketPrice` and `Price2`–`Price5` are overwritten on every call with the values in the request; any field you omit becomes `0`. Send every price you use each time.\n\nEach item in `Variants` is matched to the product's variants by `ProductVariantId`, or by variant `Code` when no ID is given. A matched variant gets its stock replaced by `Quantity` and its prices by `Price` and `Price2`–`Price5`; omitted fields become `0`. Variants not in the list are not touched. A variant-level `CurrencyId` is not read.\n\nThis endpoint does not validate prices: `0`, negative values, or a `MarketPrice` lower than `Price` are accepted. Such problems surface as errors during marketplace synchronization, not in this call.\n\nQuantities are not validated; negative values are not rejected.\n\nThe values are written to the product in StockMount first. If stock or price actually changed, the matching update (stock, price, or both) is queued for each active marketplace listing of the product. Marketplaces are updated by background jobs, not during this call.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductQuantityAndPrice"
          }
        },
        {
          "name": "UpdateProductQuantityAndPriceByCode",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"Code\": \"TSHIRT-RED\",\n  \"ProductSourceId\": 3051,\n  \"SetProductQuantityFromVariants\": true,\n  \"Price\": 349.9,\n  \"MarketPrice\": 449.9,\n  \"Price2\": 329.9,\n  \"Price3\": 0,\n  \"Price4\": 0,\n  \"Price5\": 0,\n  \"Variants\": [\n    {\n      \"ProductVariantId\": 9120344,\n      \"Quantity\": 15,\n      \"Price\": 349.9,\n      \"Price2\": 329.9\n    },\n    {\n      \"Code\": \"TSHIRT-RED-L\",\n      \"Quantity\": 0,\n      \"Price\": 359.9,\n      \"Price2\": 339.9\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductQuantityAndPriceByCode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductQuantityAndPriceByCode"
              ]
            },
            "description": "**Update product stock and price (by product code)** — Updates stock and prices of the product found by `Code` and `ProductSourceId` and, optionally, of its variants in one call.\n\nEach call updates a single product; you cannot send several products in one call. You can update several variants of that product in the same call with `Variants`.\n\nThe product is identified by `Code` + `ProductSourceId`; any `ProductId` you send is ignored. If `Code` is empty, `ErrorMessage` says `ProductId`; this means the code is missing.\n\nThe quantity you send replaces the product's available stock; the sold counter StockMount has kept so far is reset to zero. If the new product stock is below 1, the product's `Status` becomes `3`, otherwise `2`.\n\nThe product-level `Quantity` is written on every call. If you send only variant quantities without `Quantity` and do not set `SetProductQuantityFromVariants` to `true`, the product stock becomes `0`. For products with variants, sending `SetProductQuantityFromVariants: true` is recommended.\n\n`Price`, `MarketPrice` and `Price2`–`Price5` are overwritten on every call with the values in the request; any field you omit becomes `0`. Send every price you use each time.\n\nEach item in `Variants` is matched to the product's variants by `ProductVariantId`, or by variant `Code` when no ID is given. A matched variant gets its stock replaced by `Quantity` and its prices by `Price` and `Price2`–`Price5`; omitted fields become `0`. Variants not in the list are not touched. A variant-level `CurrencyId` is not read.\n\nThis endpoint does not validate prices: `0`, negative values, or a `MarketPrice` lower than `Price` are accepted. Such problems surface as errors during marketplace synchronization, not in this call.\n\nQuantities are not validated; negative values are not rejected.\n\nThe values are written to the product in StockMount first. If stock or price actually changed, the matching update (stock, price, or both) is queued for each active marketplace listing of the product. Marketplaces are updated by background jobs, not during this call.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductQuantityAndPriceByCode"
          }
        },
        {
          "name": "UpdateProductName",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 184522,\n  \"Name\": \"Pamuklu Basic T-Shirt Kırmızı\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductName",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductName"
              ]
            },
            "description": "**Update product name (by ProductId)** — Changes the name of the product found by `ProductId`.\n\nEach call updates a single product; you cannot send several products in one call.\n\nThe product is identified only by `ProductId`. To update by product code, use the `ByCode` endpoint.\n\nOnly the product's main name (`Name`) changes. Stock, prices and variants are not changed; other fields are ignored. The one exception is `CurrencyId`: if you send a value greater than 0, the product currency changes too. Do not send it.\n\nIf the name actually changed, a product update is queued for each active marketplace listing of the product. Marketplaces are updated by background jobs, not during this call.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductName"
          }
        },
        {
          "name": "UpdateProductNameByCode",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"Code\": \"TSHIRT-RED\",\n  \"ProductSourceId\": 3051,\n  \"Name\": \"Pamuklu Basic T-Shirt Kırmızı\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductNameByCode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductNameByCode"
              ]
            },
            "description": "**Update product name (by product code)** — Changes the name of the product found by `Code` and `ProductSourceId`.\n\nEach call updates a single product; you cannot send several products in one call.\n\nThe product is identified by `Code` + `ProductSourceId`; any `ProductId` you send is ignored. If `Code` is empty, `ErrorMessage` says `ProductId`; this means the code is missing.\n\nOnly the product's main name (`Name`) changes. Stock, prices and variants are not changed; other fields are ignored. The one exception is `CurrencyId`: if you send a value greater than 0, the product currency changes too. Do not send it.\n\nIf the name actually changed, a product update is queued for each active marketplace listing of the product. Marketplaces are updated by background jobs, not during this call.\n\nIf the product is not found or does not belong to your account, the response is `Result: false` with `ErrorCode: \"70005\"` and `ErrorMessage: \"ProductNotFound\"`. Database errors return `ErrorCode` `99999`.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductNameByCode"
          }
        },
        {
          "name": "UpdateProductImages",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"ProductId\": 184522,\n  \"Images\": [\n    {\n      \"Url\": \"https://cdn.example.com/p/184522-1.jpg\"\n    },\n    {\n      \"Url\": \"https://cdn.example.com/p/184522-2.jpg\"\n    }\n  ],\n  \"Variants\": [\n    {\n      \"Code\": \"TSHIRT-RED-M\",\n      \"ImageUrl\": \"https://cdn.example.com/p/184522-red-m.jpg\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductImages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductImages"
              ]
            },
            "description": "**Update product images** — Replaces the product's image list (up to 12) and, optionally, its variant images.\n\nThe product is identified by `ProductId`; if `ProductId` is less than 1, by `Code` + `ProductSourceId`. `UpdateProductImages` and `UpdateProductImagesByCode` run the same code and accept the same fields; they behave identically.\n\nEach call updates a single product; you cannot send several products in one call.\n\nThe image list is replaced as a whole: existing images that are not in the request are removed, new ones are added, and the product's image slots 1–12 are rewritten in request order. Unused slots are cleared.\n\nIf any item after the first has neither `Url` nor `Base64`, the call fails with `99999`.\n\nBase64 images are uploaded to the StockMount image server and the stored URL starts with `http://`. If the upload fails, the image is stored with an empty URL and no error is returned.\n\nThis call does not check image format or protocol. Some marketplaces reject non-`http(s)` URLs or `.webp` images when a listing is sent (`70016`, `70015`); those errors appear during marketplace submission, not in this call.\n\nThe response does not reflect whether variant images were saved: `Result: true` can be returned even if a variant image could not be stored.\n\nThis call does not queue a marketplace update. The images are marked as manually edited, so later imports from the product source (XML/feed) do not overwrite them.\n\nThe application enforces no separate request-size limit for this endpoint. Base64 images make the request large; prefer `Url` where you can.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductImages"
          }
        },
        {
          "name": "UpdateProductImagesByCode",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"Code\": \"TSHIRT-RED\",\n  \"ProductSourceId\": 3051,\n  \"Images\": [\n    {\n      \"Url\": \"https://cdn.example.com/p/184522-1.jpg\"\n    },\n    {\n      \"Base64\": \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==\"\n    }\n  ],\n  \"Variants\": [\n    {\n      \"ProductVariantId\": 9120344,\n      \"ImageUrl\": \"https://cdn.example.com/p/184522-red-m.jpg\"\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Product/UpdateProductImagesByCode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Product",
                "UpdateProductImagesByCode"
              ]
            },
            "description": "**Update product images (by product code)** — Replaces the product's image list (up to 12) and, optionally, its variant images; works exactly like `UpdateProductImages`.\n\nThe product is identified by `ProductId`; if `ProductId` is less than 1, by `Code` + `ProductSourceId`. `UpdateProductImages` and `UpdateProductImagesByCode` run the same code and accept the same fields; they behave identically.\n\nEach call updates a single product; you cannot send several products in one call.\n\nThe image list is replaced as a whole: existing images that are not in the request are removed, new ones are added, and the product's image slots 1–12 are rewritten in request order. Unused slots are cleared.\n\nIf any item after the first has neither `Url` nor `Base64`, the call fails with `99999`.\n\nBase64 images are uploaded to the StockMount image server and the stored URL starts with `http://`. If the upload fails, the image is stored with an empty URL and no error is returned.\n\nThis call does not check image format or protocol. Some marketplaces reject non-`http(s)` URLs or `.webp` images when a listing is sent (`70016`, `70015`); those errors appear during marketplace submission, not in this call.\n\nThe response does not reflect whether variant images were saved: `Result: true` can be returned even if a variant image could not be stored.\n\nThis call does not queue a marketplace update. The images are marked as manually edited, so later imports from the product source (XML/feed) do not overwrite them.\n\nThe application enforces no separate request-size limit for this endpoint. Base64 images make the request large; prefer `Url` where you can.\n\n⚠ This endpoint changes real data in your account.\n\nAccounts without an active Product package get error 70018; if the package cannot be verified, 99999 is returned.\n\nhttps://outsample.stockmount.com/en/api/Product/UpdateProductImagesByCode"
          }
        }
      ]
    },
    {
      "name": "General and lookups",
      "description": "Stores, shipment companies, status lists and currency rates.",
      "item": [
        {
          "name": "GetCurrencies",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/General/GetCurrencies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "General",
                "GetCurrencies"
              ]
            },
            "description": "**List currencies** — Returns the active currencies with their ID, code and name.\n\nThe list is the same for every account. There is no paging and the order is not guaranteed.\n\nOnly active currencies are returned. The internal \"unknown\" entry (`CurrencyId` 1) is not listed.\n\nUse these values wherever a currency ID (`CurrencyId`) is expected. Some IDs defined as constants in code: 2 = US dollar, 3 = Euro, 4 = Turkish lira.\n\nOnly `ApiCode` is read from the request body.\n\nhttps://outsample.stockmount.com/en/api/General/GetCurrencies"
          }
        },
        {
          "name": "GetStores",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"IntegrationId\": 14\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/GetStores",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "GetStores"
              ]
            },
            "description": "**List stores** — Returns the marketplace and e-commerce stores connected to your account, with their `StoreId`.\n\n`StoreId` is the ID you use to refer to a store in other endpoints. `IntegrationId` identifies the marketplace or platform the store belongs to.\n\nOnly stores that are active in the panel are listed. If you send `IntegrationId`, only that integration's stores are returned. An unknown `IntegrationId` is not an error; it returns an empty list.\n\nThere is no paging; all stores come in one response. The order is not guaranteed. `StoreName` can be empty.\n\nThe `StoreId` request field in the model is ignored. `Integration/GetStore` is an old alias that does the same thing; use `GetStores` in new integrations.\n\nhttps://outsample.stockmount.com/en/api/Integration/GetStores"
          }
        },
        {
          "name": "GetIntegrationShipmentCompanies",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"IntegrationId\": 2\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/GetIntegrationShipmentCompanies",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "GetIntegrationShipmentCompanies"
              ]
            },
            "description": "**List shipment companies** — Returns the shipment companies accepted by the marketplaces, with their codes.\n\nWhen you send shipment information (`SetOrderShipmentInformation`), put the `Code` value from this list in the `ShipmentCompany` field.\n\nIf you send `IntegrationId`, only that integration's companies are returned. If omitted or 0, companies of all integrations are returned; that list is long.\n\nThe list contains the integration's general companies plus companies defined only for your stores. It is sorted by `Name`. There is no paging.\n\nhttps://outsample.stockmount.com/en/api/Integration/GetIntegrationShipmentCompanies"
          }
        },
        {
          "name": "GetIntegrationOrderListingStatus",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 1234\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/GetIntegrationOrderListingStatus",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "GetIntegrationOrderListingStatus"
              ]
            },
            "description": "**List order status codes** — Returns the order status codes used by integrations and stores, with their descriptions.\n\nThe result comes in groups. Each group has `IntegrationId`, `StoreId` and a `ListingStatuses` list. In an integration-wide list `StoreId` is 0; in a store-specific list it is the store's ID.\n\nIf you send `StoreId`, only that store's statuses are returned and `IntegrationId` is ignored. For marketplaces with a fixed status set you get the marketplace's list; for e-commerce sites that define their own statuses you get the store's own list.\n\nIf you send only `IntegrationId`, that integration's statuses are returned. If you send neither, statuses of all integrations and stores you use are returned. Integration-wide groups come first, then store groups. An integration-wide group can also repeat store-specific statuses of the same integration.\n\n`Code` is the status value that appears on order lines (e.g. `OrderStatus` in `GetOrderDetailStatus`). `Description` is always in Turkish. If `Erp` is 1, orders in this status are eligible for ERP/accounting transfer.\n\nA `StoreId` that is not in your account returns `10001`. An unknown `IntegrationId` is not an error; it returns an empty list. There is no paging.\n\nhttps://outsample.stockmount.com/en/api/Integration/GetIntegrationOrderListingStatus"
          }
        },
        {
          "name": "GetOrderDetailStatus",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"OrderDetails\": [\n    {\n      \"OrderDetailId\": 9876543\n    },\n    {\n      \"OrderDetailId\": 9876544\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/GetOrderDetailStatus",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "GetOrderDetailStatus"
              ]
            },
            "description": "**Get order line statuses** — Returns the current status codes of the order lines you specify.\n\nOnly `OrderDetailId` is read from each item of `OrderDetails`; other fields are ignored.\n\nOnly lines that belong to your stores are returned. IDs that are not found or belong to another account are skipped without an error. The response order is not guaranteed.\n\nThere is no list length limit in code. Use `GetIntegrationOrderListingStatus` for the meaning of `OrderStatus` values. A line without a status has an empty `OrderStatus`.\n\nhttps://outsample.stockmount.com/en/api/Integration/GetOrderDetailStatus"
          }
        }
      ]
    },
    {
      "name": "Messages",
      "description": "Read and answer marketplace customer messages.",
      "item": [
        {
          "name": "GetUserMessages",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 1234,\n  \"MessageTypeId\": 1,\n  \"SmallestIntegrationMessageId\": 88120\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/GetUserMessages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "GetUserMessages"
              ]
            },
            "description": "**List messages** — Returns a store's messages from the marketplace by type, newest first, 20 at a time.\n\nMessages are records imported from the marketplace into StockMount. In code, message import exists only for N11 (`IntegrationId` 2) and GittiGidiyor (1) stores; for other stores the list is empty.\n\nEach call returns at most 20 messages, newest first by `Time`. The page size cannot be changed.\n\nPaging is by ID. For older messages, send the smallest `UserMessageId` you have as `SmallestIntegrationMessageId`; messages with a smaller ID are returned. For new messages, send the largest `UserMessageId` you know as `BiggestIntegrationMessageId`; messages with a larger ID are returned. Both fields can be combined.\n\nNote: if you send only `BiggestIntegrationMessageId` and there are more than 20 new messages, you get the newest 20 and the ones in between are skipped. Keep `BiggestIntegrationMessageId` and send the smallest ID from the last batch as `SmallestIntegrationMessageId` to continue backwards.\n\n`MessageCount` is the total number of messages matching the filter. A `StoreId` that belongs to another account is not an error; it returns an empty list.\n\n`Integration/GetUserMessage` is an alias that does the same thing.\n\nhttps://outsample.stockmount.com/en/api/Integration/GetUserMessages"
          }
        },
        {
          "name": "GetAllUserMessage",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 1234,\n  \"User\": \"alici_123\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/GetAllUserMessage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "GetAllUserMessage"
              ]
            },
            "description": "**Get the conversation with a buyer** — Returns the messages received from and sent to one buyer in a store, in a single list.\n\nTwo queries are merged: incoming messages (type 1) whose `From` matches `User`, and sent messages (type 2) whose `To` matches `User`. Deleted messages are not included.\n\nEach query returns at most 20 messages, so the response has at most 40 messages, newest first. There is no paging. `MessageCount` is the sum of the total counts of both queries.\n\n`User` is matched with a full-text search, not exact equality; similar usernames can also match. `MessageTypeId`, `BiggestIntegrationMessageId` and `SmallestIntegrationMessageId` are ignored on this endpoint.\n\nMessages are imported only for N11 and GittiGidiyor stores. A `StoreId` that belongs to another account returns an empty list.\n\nhttps://outsample.stockmount.com/en/api/Integration/GetAllUserMessage"
          }
        },
        {
          "name": "SetMessageRead",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 1234,\n  \"IntegrationId\": 2,\n  \"UserMessageId\": 88119\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SetMessageRead",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SetMessageRead"
              ]
            },
            "description": "**Mark a message as read** — Marks a message as read in StockMount.\n\nThe supported integration is N11 (`IntegrationId` 2). The message is marked as read only in StockMount; nothing is sent to N11.\n\nAny `IntegrationId` other than 1 (GittiGidiyor) and 2 (N11) returns `99999` with an empty `ErrorMessage`.\n\nSpecify the message with `UserMessageId`. The response is successful (`Result: true`) even if the message is not found; check `Unread` in `GetUserMessages` to confirm.\n\nA successful response has no `Response` field.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/SetMessageRead"
          }
        },
        {
          "name": "SendUserMessage",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ApiCode\": \"{{apiCode}}\",\n  \"StoreId\": 1234,\n  \"IntegrationId\": 2,\n  \"UserMessageCode\": \"301245678\",\n  \"UserMessageId\": 88119,\n  \"To\": \"alici_123\",\n  \"From\": \"ornekmagaza\",\n  \"Subject\": \"Ürün sorusu\",\n  \"Message\": \"Merhaba, ürün stoktadır.\",\n  \"SetMessageRead\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/Integration/SendUserMessage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "Integration",
                "SendUserMessage"
              ]
            },
            "description": "**Reply to a message** — Answers a buyer question on the marketplace and stores the answer in StockMount as a sent message.\n\nThe supported integration is N11 (`IntegrationId` 2). Only an existing product question can be answered; you cannot start a new conversation. Send the question's `Code` in `UserMessageCode`; it must be numeric.\n\nAfter sending, the answer is stored as a sent message (type 2) with a code in the form `{questionCode}_ANSWER_{n}`. The answered question is closed.\n\nIf `SetMessageRead` is `true`, the question given by `UserMessageId` is also marked as read.\n\nAlso send `Subject` and `From`. If they are missing, the answer may reach N11 but cannot be stored in StockMount and the call returns `99999`; in that case check the answer on N11 before retrying.\n\nA successful response does not guarantee that N11 accepted the answer: the request to N11 is started but its result is not awaited. Errors on the N11 side are not reported by this endpoint.\n\nAny `IntegrationId` other than 1 and 2 returns `99999` with an empty `ErrorMessage`. A successful response has no `Response` field.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Integration/SendUserMessage"
          }
        }
      ]
    }
  ]
}