{
  "openapi": "3.0.3",
  "info": {
    "title": "StockMount Out API",
    "version": "1.0",
    "description": "Every endpoint uses POST with a JSON body. Authentication is the ApiCode field in the body; get it from `User/DoLogin`.\n\nDocumentation: https://outsample.stockmount.com/en"
  },
  "servers": [
    {
      "url": "https://out.stockmount.com"
    }
  ],
  "tags": [
    {
      "name": "Authentication",
      "description": "Get the ApiCode that every other call needs."
    },
    {
      "name": "Orders",
      "description": "Pull marketplace orders and update their status, shipment and invoice details."
    },
    {
      "name": "Products",
      "description": "Add and update products; sync stock, price, name and images. Requires the Product package."
    },
    {
      "name": "General and lookups",
      "description": "Stores, shipment companies, status lists and currency rates."
    },
    {
      "name": "Messages",
      "description": "Read and answer marketplace customer messages."
    }
  ],
  "paths": {
    "/api/User/DoLogin": {
      "post": {
        "operationId": "DoLogin",
        "tags": [
          "Authentication"
        ],
        "summary": "Log in and get an ApiCode",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiKey": {
                    "type": "string",
                    "description": "The API key created in the panel."
                  },
                  "ApiPassword": {
                    "type": "string",
                    "description": "The password of the API key."
                  },
                  "DeveloperId": {
                    "type": "string",
                    "description": "Optional. Free text that identifies your integration. It is stored with the session and used only for logging."
                  }
                },
                "required": [
                  "ApiKey",
                  "ApiPassword"
                ]
              },
              "example": {
                "ApiKey": "3f9c2a7e5b1d4c08",
                "ApiPassword": "Xk82!pQz7mWv",
                "DeveloperId": "ornek-erp-connector"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "UserId": {
                              "type": "integer",
                              "description": "Account ID."
                            },
                            "Name": {
                              "type": "string",
                              "description": "Account holder's first name."
                            },
                            "Surname": {
                              "type": "string",
                              "description": "Account holder's last name."
                            },
                            "Email": {
                              "type": "string",
                              "description": "Account e-mail address."
                            },
                            "Username": {
                              "type": "string",
                              "description": "Account username."
                            },
                            "Avatar": {
                              "type": "string",
                              "description": "Profile image. Can be empty."
                            },
                            "PackageEndDate": {
                              "type": "string",
                              "description": "Account package end date. ISO 8601 without a time zone offset (e.g. `2027-03-31T00:00:00`), in Türkiye time. When a stored session is returned, this is the value from the first login."
                            },
                            "ApiCode": {
                              "type": "string",
                              "description": "Session code. Send it in the `ApiCode` field of every other request."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "UserId": 104523,
                    "Name": "Ayşe",
                    "Surname": "Yılmaz",
                    "Email": "ayse@ornekmagaza.com",
                    "Username": "ornekmagaza",
                    "Avatar": "",
                    "PackageEndDate": "2027-03-31T00:00:00",
                    "ApiCode": "q7XvT1kR9mN2bW4yL8pZ0cH5sJ3fG6dA+eU1iO7tY2rE9wQ4xV8nM0lK5jH3gF6d=="
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/GetSales": {
      "post": {
        "operationId": "GetSales",
        "tags": [
          "Orders"
        ],
        "summary": "List orders",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "Store ID (from `GetStores`)."
                  },
                  "OrderStatus": {
                    "type": "string",
                    "description": "Line status code. Get the codes for the store's marketplace from `GetIntegrationOrderListingStatus` (the `Code` field). Codes for StockMount stores are listed below.\n\n- `New`: New.\n- `Approved`: Approved.\n- `Rejected`: Rejected.\n- `Shipped`: Shipped.\n- `Delivered`: Delivered.\n- `Completed`: Completed."
                  },
                  "StartDate": {
                    "type": "string",
                    "description": "Start of the `OrderDate` range, Turkey time without offset. Required in date-range mode."
                  },
                  "EndDate": {
                    "type": "string",
                    "description": "End of the range. Must be after `StartDate`, at most 7 days later. The server adds 1 day to it. Required in date-range mode."
                  },
                  "BiggestOrderDetailId": {
                    "type": "integer",
                    "description": "Returns orders with a line whose ID is greater than this (for incremental fetch, pass the largest `OrderDetailId` you have seen)."
                  },
                  "SmallestOrderDetailId": {
                    "type": "integer",
                    "description": "Returns orders with a line whose ID is smaller than this."
                  },
                  "LastModificationTimeFrom": {
                    "type": "string",
                    "description": "Lines whose `LastModificationTime` is greater than or equal to this. When set, the date range is not required."
                  },
                  "LastModificationTimeTo": {
                    "type": "string",
                    "description": "Lines whose `LastModificationTime` is less than or equal to this."
                  },
                  "InvoiceStatus": {
                    "type": "integer",
                    "description": "Filter by invoice state. Default `0`. Values not in the list behave like `0`.\n\n- `0`: All.\n- `1`: Invoiced (`Invoiced` = true).\n- `2`: Not invoiced."
                  },
                  "PageIndex": {
                    "type": "integer",
                    "description": "Page number, starting at 1. Default 1."
                  },
                  "RowsByPage": {
                    "type": "integer",
                    "description": "Orders per page. Default 20, maximum 200."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "OrderStatus"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 12345,
                "OrderStatus": "New",
                "StartDate": "2026-11-01T00:00:00",
                "EndDate": "2026-11-04T00:00:00",
                "InvoiceStatus": 0,
                "PageIndex": 1,
                "RowsByPage": 100
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "TotalOrderCount": {
                              "type": "integer",
                              "description": "Total number of matching orders across all pages."
                            },
                            "TotalNotInvoicedCount": {
                              "type": "integer",
                              "description": "Always `0`."
                            },
                            "TotalUnreadCount": {
                              "type": "integer",
                              "description": "Always `0`."
                            },
                            "Orders": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "OrderId": {
                                    "type": "integer",
                                    "description": "StockMount order ID. Use it with `GetOrder`, `SetOrderNotes` and similar endpoints."
                                  },
                                  "StoreId": {
                                    "type": "integer",
                                    "description": "Store ID."
                                  },
                                  "IntegrationOrderCode": {
                                    "type": "string",
                                    "description": "Order number on the marketplace."
                                  },
                                  "OrderDate": {
                                    "type": "string",
                                    "description": "Order date in UTC (with `Z`). An order placed at 14:30 Turkey time returns `…T11:30:00Z`."
                                  },
                                  "OrderStatus": {
                                    "type": "string",
                                    "description": "The status code you requested (line-level filter)."
                                  },
                                  "OrderType": {
                                    "type": "integer",
                                    "description": "Order type.\n\n- `0`: Standard order.\n- `1`: Trendyol equivalent-product order.\n- `2`: Trendyol cross-border (micro export) order.\n- `3`: Trendyol cross-border and equivalent-product order.\n- `10`: Hepsiburada Buy Now Pay Later order."
                                  },
                                  "Name": {
                                    "type": "string",
                                    "description": "Buyer first name."
                                  },
                                  "Surname": {
                                    "type": "string",
                                    "description": "Buyer last name."
                                  },
                                  "Fullname": {
                                    "type": "string",
                                    "description": "Company title for corporate buyers, otherwise the full name (falls back to `Name`). No separate `CompanyTitle` field is returned."
                                  },
                                  "Nickname": {
                                    "type": "string",
                                    "description": "Buyer's user name on the marketplace."
                                  },
                                  "PersonType": {
                                    "type": "string",
                                    "description": "Buyer type as a fixed Turkish text.\n\n- `Gerçek Kişi`: Individual: `PersonalIdentification` equals `TaxNumber`.\n- `Tüzel Kişi`: Corporate: no national ID, tax number and tax office present.\n- ``: Could not be determined."
                                  },
                                  "PersonalIdentification": {
                                    "type": "string",
                                    "description": "Turkish national ID number."
                                  },
                                  "TaxAuthority": {
                                    "type": "string",
                                    "description": "Tax office."
                                  },
                                  "TaxNumber": {
                                    "type": "string",
                                    "description": "Tax number."
                                  },
                                  "Email": {
                                    "type": "string",
                                    "description": "Buyer e-mail address."
                                  },
                                  "Telephone": {
                                    "type": "string",
                                    "description": "Buyer phone number."
                                  },
                                  "Address": {
                                    "type": "string",
                                    "description": "Billing address, postal code, district and city joined with spaces."
                                  },
                                  "District": {
                                    "type": "string",
                                    "description": "District."
                                  },
                                  "City": {
                                    "type": "string",
                                    "description": "City."
                                  },
                                  "PostalCode": {
                                    "type": "string",
                                    "description": "Postal code."
                                  },
                                  "Country": {
                                    "type": "string",
                                    "description": "Country. Can be empty."
                                  },
                                  "Notes": {
                                    "type": "string",
                                    "description": "Order note (written by `SetOrderNotes`)."
                                  },
                                  "Member": {
                                    "type": "string",
                                    "description": "Raw membership info from the marketplace (e.g. an IdeaSoft JSON string). Usually empty."
                                  },
                                  "PaymentType": {
                                    "type": "string",
                                    "description": "Payment type reported by the marketplace (e.g. ÇiçekSepeti, IdeaSoft, Pazarama). Usually empty."
                                  },
                                  "RowSalt": {
                                    "type": "string",
                                    "description": "Internal field (encryption salt, Base64). Normally absent; ignore it if present."
                                  },
                                  "OrderDetails": {
                                    "type": "array",
                                    "items": {
                                      "type": "object",
                                      "properties": {
                                        "OrderDetailId": {
                                          "type": "integer",
                                          "description": "StockMount order line ID. Use this value in the other line endpoints."
                                        },
                                        "StoreId": {
                                          "type": "integer",
                                          "description": "Store ID."
                                        },
                                        "IntegrationOrderDetailId": {
                                          "type": "string",
                                          "description": "The line's ID on the marketplace. Additional service lines may carry a synthetic value containing `_`, such as `{orderNo}_Service`."
                                        },
                                        "ProductId": {
                                          "type": "integer",
                                          "description": "Matched StockMount product ID. `0` when the line is not matched to a product."
                                        },
                                        "IntegrationProductCode": {
                                          "type": "string",
                                          "description": "The product's code on the marketplace. Additional service lines use fixed codes: `999999999999` service fee, `999999999998` instalment difference, `999999999997` commission, `999999999996` payment service fee, `999999999995` shipping fee, `999999999994` gift wrapping, `999999999993` account payment service fee."
                                        },
                                        "ProductName": {
                                          "type": "string",
                                          "description": "Product name on the marketplace; falls back to the matched StockMount product name. Omitted when both are empty."
                                        },
                                        "ProductCode": {
                                          "type": "string",
                                          "description": "Matched StockMount product code. Without a match: `MerchantSku`, then `IntegrationProductCode`."
                                        },
                                        "ProductCode2": {
                                          "type": "string",
                                          "description": "Second code of the StockMount product. Empty string when not set."
                                        },
                                        "Barcode": {
                                          "type": "string",
                                          "description": "Barcode of the matched StockMount product. Empty string without a match."
                                        },
                                        "MerchantSku": {
                                          "type": "string",
                                          "description": "Merchant SKU reported by the marketplace."
                                        },
                                        "ProductImage": {
                                          "type": "string",
                                          "description": "First image of the matched StockMount product; otherwise the marketplace image URL."
                                        },
                                        "ProductUnit": {
                                          "type": "string",
                                          "description": "Sales unit, when the marketplace provides one."
                                        },
                                        "ProductVariantCode": {
                                          "type": "string",
                                          "description": "Variant code of the line. Empty string when not set."
                                        },
                                        "ProductVariantId": {
                                          "type": "integer",
                                          "description": "Always `0`; do not use."
                                        },
                                        "VariantProductCode": {
                                          "type": "string",
                                          "description": "Code of the matched StockMount variant. Empty string when not matched."
                                        },
                                        "VariantProductBarcode": {
                                          "type": "string",
                                          "description": "Barcode of the matched StockMount variant. Empty string when not matched."
                                        },
                                        "VariantPhrase": {
                                          "type": "string",
                                          "description": "Variant text from the marketplace (e.g. `Color: Black, Size: M`)."
                                        },
                                        "VariantName1": {
                                          "type": "string",
                                          "description": "Name of variant attribute 1."
                                        },
                                        "VariantValue1": {
                                          "type": "string",
                                          "description": "Value of variant attribute 1."
                                        },
                                        "VariantName2": {
                                          "type": "string",
                                          "description": "Name of variant attribute 2."
                                        },
                                        "VariantValue2": {
                                          "type": "string",
                                          "description": "Value of variant attribute 2."
                                        },
                                        "VariantName3": {
                                          "type": "string",
                                          "description": "Name of variant attribute 3."
                                        },
                                        "VariantValue3": {
                                          "type": "string",
                                          "description": "Value of variant attribute 3."
                                        },
                                        "Price": {
                                          "type": "number",
                                          "description": "Unit price. Line total = `Price` × `RawQuantity` (StockMount's own reports compute it this way)."
                                        },
                                        "Quantity": {
                                          "type": "integer",
                                          "description": "Quantity truncated to an integer. Use `RawQuantity` for fractional quantities."
                                        },
                                        "RawQuantity": {
                                          "type": "number",
                                          "description": "Exact (decimal) quantity."
                                        },
                                        "TaxRate": {
                                          "type": "number",
                                          "description": "VAT rate (e.g. `20`). If the line is matched to a StockMount product whose rate is above 0, the product's rate is used; otherwise the rate the marketplace sent. Orders with `OrderType` = 2 always return the marketplace rate."
                                        },
                                        "DetailType": {
                                          "type": "integer",
                                          "description": "Line type.\n\n- `0`: Not specified (default).\n- `1`: Product line.\n- `2`: Additional service line (service fee, shipping fee, etc.).\n- `3`: Instalment charge line."
                                        },
                                        "OrderStatus": {
                                          "type": "string",
                                          "description": "Status of this line. In `GetSales` it always equals the requested `OrderStatus`."
                                        },
                                        "Invoiced": {
                                          "type": "boolean",
                                          "description": "`true` when the line is marked as invoiced."
                                        },
                                        "InvoiceNumber": {
                                          "type": "string",
                                          "description": "Invoice number. Empty string when not set."
                                        },
                                        "InvoiceTime": {
                                          "type": "string",
                                          "description": "Invoice date in UTC (with `Z`). When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                        },
                                        "PackageNumber": {
                                          "type": "string",
                                          "description": "Marketplace package number (e.g. the Trendyol package ID). Empty string when not set. Note: `GetOrder` returns the StockMount package number written by `SetOrderDetailInvoiced` in this field instead."
                                        },
                                        "PackageTime": {
                                          "type": "string",
                                          "description": "Package date in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                        },
                                        "WayBillNumber": {
                                          "type": "string",
                                          "description": "Waybill number. Empty string when not set."
                                        },
                                        "WayBillTime": {
                                          "type": "string",
                                          "description": "Waybill date in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                        },
                                        "Unread": {
                                          "type": "boolean",
                                          "description": "`true` when the line is flagged as unread in the StockMount panel."
                                        },
                                        "SmUserSchemaId": {
                                          "type": "integer",
                                          "description": "Template (schema) ID of the matched StockMount product. `0` without a match."
                                        },
                                        "SchemaName": {
                                          "type": "string",
                                          "description": "Template name of the matched product. Empty string when not set."
                                        },
                                        "DeliveryTitle": {
                                          "type": "string",
                                          "description": "Recipient name or title on the delivery address."
                                        },
                                        "Address": {
                                          "type": "string",
                                          "description": "Delivery address, postal code, district and city joined with spaces. Can consist only of spaces when the line has no address."
                                        },
                                        "District": {
                                          "type": "string",
                                          "description": "Delivery district."
                                        },
                                        "City": {
                                          "type": "string",
                                          "description": "Delivery city."
                                        },
                                        "Country": {
                                          "type": "string",
                                          "description": "Delivery country. Can be empty."
                                        },
                                        "PostalCode": {
                                          "type": "string",
                                          "description": "Postal code of the order (not of the line)."
                                        },
                                        "Telephone": {
                                          "type": "string",
                                          "description": "Delivery phone number."
                                        },
                                        "CargoCompany": {
                                          "type": "string",
                                          "description": "Shipping company name."
                                        },
                                        "CargoLabelCode": {
                                          "type": "string",
                                          "description": "Shipment tracking / label code. Empty when no shipment info has been set for the line."
                                        },
                                        "CargoPayment": {
                                          "type": "string",
                                          "description": "Who pays for shipping; usually `Seller`, `Buyer` or `Unknown`."
                                        },
                                        "CargoDate": {
                                          "type": "string",
                                          "description": "Date the shipment info was set, in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                        },
                                        "ShipmentCampaignCode": {
                                          "type": "string",
                                          "description": "Shipping campaign / shipment code from the marketplace."
                                        },
                                        "LastModificationTime": {
                                          "type": "string",
                                          "description": "Last modification time of the line. Unlike the other dates it is not converted to UTC: it is Turkey time without an offset (e.g. `2026-11-05T14:30:00`)."
                                        },
                                        "RowSalt": {
                                          "type": "string",
                                          "description": "Internal field (encryption salt, Base64). Normally absent; ignore it if present."
                                        }
                                      }
                                    },
                                    "description": "Lines of the order in the requested status."
                                  }
                                }
                              },
                              "description": "Orders on this page."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "TotalOrderCount": 1,
                    "TotalNotInvoicedCount": 0,
                    "TotalUnreadCount": 0,
                    "Orders": [
                      {
                        "OrderId": 4567890,
                        "StoreId": 12345,
                        "IntegrationOrderCode": "10293847",
                        "OrderDate": "2026-11-04T07:12:45Z",
                        "OrderStatus": "New",
                        "OrderType": 0,
                        "Name": "Ayşe",
                        "Surname": "Yılmaz",
                        "Fullname": "Ayşe Yılmaz",
                        "Nickname": "ayseyilmaz",
                        "PersonType": "Gerçek Kişi",
                        "PersonalIdentification": "11111111111",
                        "TaxAuthority": "",
                        "TaxNumber": "11111111111",
                        "Email": "ayse@example.com",
                        "Telephone": "05551112233",
                        "Address": "Örnek Mah. Deneme Sok. No:5 D:3 34710 Kadıköy İstanbul",
                        "District": "Kadıköy",
                        "City": "İstanbul",
                        "PostalCode": "34710",
                        "Country": "Türkiye",
                        "Notes": "",
                        "Member": "",
                        "PaymentType": "",
                        "OrderDetails": [
                          {
                            "OrderDetailId": 9876543,
                            "StoreId": 12345,
                            "IntegrationOrderDetailId": "3456789012",
                            "ProductId": 554433,
                            "IntegrationProductCode": "TSH-001-BLK-M",
                            "ProductName": "Basic Tişört Siyah M",
                            "ProductCode": "TSH-001",
                            "ProductCode2": "",
                            "Barcode": "8691234567890",
                            "MerchantSku": "TSH-001-BLK-M",
                            "ProductImage": "https://cdn.example.com/img/tsh-001.jpg",
                            "ProductUnit": "Adet",
                            "ProductVariantCode": "TSH-001-BLK-M",
                            "ProductVariantId": 0,
                            "VariantProductCode": "TSH-001-BLK-M",
                            "VariantProductBarcode": "8691234567890",
                            "VariantPhrase": "Renk: Siyah, Beden: M",
                            "VariantName1": "Renk",
                            "VariantValue1": "Siyah",
                            "VariantName2": "Beden",
                            "VariantValue2": "M",
                            "VariantName3": "",
                            "VariantValue3": "",
                            "Price": 249.9,
                            "Quantity": 2,
                            "RawQuantity": 2.0,
                            "TaxRate": 20.0,
                            "DetailType": 1,
                            "OrderStatus": "New",
                            "Invoiced": false,
                            "InvoiceNumber": "",
                            "InvoiceTime": "1899-12-31T22:03:00Z",
                            "PackageNumber": "",
                            "PackageTime": "1899-12-31T22:03:00Z",
                            "WayBillNumber": "",
                            "WayBillTime": "1899-12-31T22:03:00Z",
                            "Unread": true,
                            "SmUserSchemaId": 77,
                            "SchemaName": "Giyim",
                            "DeliveryTitle": "Ayşe Yılmaz",
                            "Address": "Örnek Mah. Deneme Sok. No:5 D:3 34710 Kadıköy İstanbul",
                            "District": "Kadıköy",
                            "City": "İstanbul",
                            "Country": "Türkiye",
                            "PostalCode": "34710",
                            "Telephone": "05551112233",
                            "CargoCompany": "",
                            "CargoLabelCode": "",
                            "CargoPayment": "Seller",
                            "CargoDate": "1899-12-31T22:03:00Z",
                            "ShipmentCampaignCode": "7330012345678",
                            "LastModificationTime": "2026-11-04T10:15:22"
                          }
                        ]
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/GetOrder": {
      "post": {
        "operationId": "GetOrder",
        "tags": [
          "Orders"
        ],
        "summary": "Get a single order",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "OrderId": {
                    "type": "integer",
                    "description": "StockMount order ID (`OrderId` from `GetSales`)."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "Optional. Only used for the Amazon decryption check; when missing, the order's own store is used."
                  }
                },
                "required": [
                  "ApiCode",
                  "OrderId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "OrderId": 4567890
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "OrderId": {
                              "type": "integer",
                              "description": "StockMount order ID. Use it with `GetOrder`, `SetOrderNotes` and similar endpoints."
                            },
                            "StoreId": {
                              "type": "integer",
                              "description": "Store ID."
                            },
                            "IntegrationOrderCode": {
                              "type": "string",
                              "description": "Order number on the marketplace."
                            },
                            "OrderDate": {
                              "type": "string",
                              "description": "Order date in UTC (with `Z`). An order placed at 14:30 Turkey time returns `…T11:30:00Z`."
                            },
                            "OrderStatus": {
                              "type": "string",
                              "description": "Order-level status from the order record. Line statuses can differ; check them with `GetOrderDetailStatus`."
                            },
                            "OrderType": {
                              "type": "integer",
                              "description": "Order type.\n\n- `0`: Standard order.\n- `1`: Trendyol equivalent-product order.\n- `2`: Trendyol cross-border (micro export) order.\n- `3`: Trendyol cross-border and equivalent-product order.\n- `10`: Hepsiburada Buy Now Pay Later order."
                            },
                            "Name": {
                              "type": "string",
                              "description": "Buyer first name."
                            },
                            "Surname": {
                              "type": "string",
                              "description": "Buyer last name."
                            },
                            "Fullname": {
                              "type": "string",
                              "description": "Company title for corporate buyers, otherwise the full name. No separate `CompanyTitle` field is returned."
                            },
                            "Nickname": {
                              "type": "string",
                              "description": "Buyer's user name on the marketplace."
                            },
                            "PersonalIdentification": {
                              "type": "string",
                              "description": "Turkish national ID number."
                            },
                            "TaxAuthority": {
                              "type": "string",
                              "description": "Tax office."
                            },
                            "TaxNumber": {
                              "type": "string",
                              "description": "Tax number."
                            },
                            "Email": {
                              "type": "string",
                              "description": "Buyer e-mail address."
                            },
                            "Telephone": {
                              "type": "string",
                              "description": "Buyer phone number."
                            },
                            "Address": {
                              "type": "string",
                              "description": "Billing address, postal code, district and city joined with spaces."
                            },
                            "District": {
                              "type": "string",
                              "description": "District."
                            },
                            "City": {
                              "type": "string",
                              "description": "City."
                            },
                            "PostalCode": {
                              "type": "string",
                              "description": "Postal code."
                            },
                            "Notes": {
                              "type": "string",
                              "description": "Order note (written by `SetOrderNotes`)."
                            },
                            "Member": {
                              "type": "string",
                              "description": "Raw membership info from the marketplace (e.g. an IdeaSoft JSON string). Usually empty."
                            },
                            "RowSalt": {
                              "type": "string",
                              "description": "Internal field (encryption salt, Base64). Normally absent; ignore it if present."
                            },
                            "OrderDetails": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "OrderDetailId": {
                                    "type": "integer",
                                    "description": "StockMount order line ID. Use this value in the other line endpoints."
                                  },
                                  "StoreId": {
                                    "type": "integer",
                                    "description": "Store ID."
                                  },
                                  "IntegrationOrderDetailId": {
                                    "type": "string",
                                    "description": "The line's ID on the marketplace. Additional service lines may carry a synthetic value containing `_`, such as `{orderNo}_Service`."
                                  },
                                  "ProductId": {
                                    "type": "integer",
                                    "description": "Matched StockMount product ID. `0` when the line is not matched to a product."
                                  },
                                  "IntegrationProductCode": {
                                    "type": "string",
                                    "description": "The product's code on the marketplace. Additional service lines use fixed codes: `999999999999` service fee, `999999999998` instalment difference, `999999999997` commission, `999999999996` payment service fee, `999999999995` shipping fee, `999999999994` gift wrapping, `999999999993` account payment service fee."
                                  },
                                  "ProductName": {
                                    "type": "string",
                                    "description": "Product name on the marketplace; falls back to the matched StockMount product name. Omitted when both are empty."
                                  },
                                  "ProductCode": {
                                    "type": "string",
                                    "description": "Matched StockMount product code. Without a match: `MerchantSku`, then `IntegrationProductCode`."
                                  },
                                  "ProductCode2": {
                                    "type": "string",
                                    "description": "Second code of the StockMount product. Empty string when not set."
                                  },
                                  "Barcode": {
                                    "type": "string",
                                    "description": "Barcode of the matched StockMount product. Empty string without a match."
                                  },
                                  "MerchantSku": {
                                    "type": "string",
                                    "description": "Merchant SKU reported by the marketplace."
                                  },
                                  "ProductImage": {
                                    "type": "string",
                                    "description": "First image of the matched StockMount product; otherwise the marketplace image URL."
                                  },
                                  "ProductUnit": {
                                    "type": "string",
                                    "description": "Sales unit, when the marketplace provides one."
                                  },
                                  "ProductVariantCode": {
                                    "type": "string",
                                    "description": "Variant code of the line. Empty string when not set."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Always `0`; do not use."
                                  },
                                  "VariantProductCode": {
                                    "type": "string",
                                    "description": "Code of the matched StockMount variant. Empty string when not matched."
                                  },
                                  "VariantProductBarcode": {
                                    "type": "string",
                                    "description": "Barcode of the matched StockMount variant. Empty string when not matched."
                                  },
                                  "VariantPhrase": {
                                    "type": "string",
                                    "description": "Variant text from the marketplace (e.g. `Color: Black, Size: M`)."
                                  },
                                  "VariantName1": {
                                    "type": "string",
                                    "description": "Name of variant attribute 1."
                                  },
                                  "VariantValue1": {
                                    "type": "string",
                                    "description": "Value of variant attribute 1."
                                  },
                                  "VariantName2": {
                                    "type": "string",
                                    "description": "Name of variant attribute 2."
                                  },
                                  "VariantValue2": {
                                    "type": "string",
                                    "description": "Value of variant attribute 2."
                                  },
                                  "VariantName3": {
                                    "type": "string",
                                    "description": "Name of variant attribute 3."
                                  },
                                  "VariantValue3": {
                                    "type": "string",
                                    "description": "Value of variant attribute 3."
                                  },
                                  "Price": {
                                    "type": "number",
                                    "description": "Unit price. Line total = `Price` × `RawQuantity` (StockMount's own reports compute it this way)."
                                  },
                                  "Quantity": {
                                    "type": "integer",
                                    "description": "Quantity truncated to an integer. Use `RawQuantity` for fractional quantities."
                                  },
                                  "RawQuantity": {
                                    "type": "number",
                                    "description": "Exact (decimal) quantity."
                                  },
                                  "TaxRate": {
                                    "type": "number",
                                    "description": "VAT rate (e.g. `20`). The matched StockMount product's rate when it is above 0; otherwise the rate the marketplace sent."
                                  },
                                  "DetailType": {
                                    "type": "integer",
                                    "description": "Line type.\n\n- `0`: Not specified (default).\n- `1`: Product line.\n- `2`: Additional service line (service fee, shipping fee, etc.).\n- `3`: Instalment charge line."
                                  },
                                  "OrderStatus": {
                                    "type": "string",
                                    "description": "The order-level status (from the order record), not the line's own status. Use `GetOrderDetailStatus` for line status."
                                  },
                                  "Invoiced": {
                                    "type": "boolean",
                                    "description": "`true` when the line is marked as invoiced."
                                  },
                                  "InvoiceNumber": {
                                    "type": "string",
                                    "description": "Invoice number. Empty string when not set."
                                  },
                                  "InvoiceTime": {
                                    "type": "string",
                                    "description": "Invoice date in UTC (with `Z`). When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                  },
                                  "PackageNumber": {
                                    "type": "string",
                                    "description": "Package number written by `SetOrderDetailInvoiced`. Empty string when not set. Note: `GetSales` returns the marketplace package number in this field instead."
                                  },
                                  "PackageTime": {
                                    "type": "string",
                                    "description": "Package date in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                  },
                                  "WayBillNumber": {
                                    "type": "string",
                                    "description": "Waybill number. Empty string when not set."
                                  },
                                  "WayBillTime": {
                                    "type": "string",
                                    "description": "Waybill date in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                  },
                                  "Unread": {
                                    "type": "boolean",
                                    "description": "`true` when the line is flagged as unread in the StockMount panel."
                                  },
                                  "SmUserSchemaId": {
                                    "type": "integer",
                                    "description": "Template (schema) ID of the matched StockMount product. `0` without a match."
                                  },
                                  "SchemaName": {
                                    "type": "string",
                                    "description": "Template name of the matched product. Empty string when not set."
                                  },
                                  "DeliveryTitle": {
                                    "type": "string",
                                    "description": "Recipient name or title on the delivery address."
                                  },
                                  "Address": {
                                    "type": "string",
                                    "description": "Delivery address, postal code, district and city joined with spaces. Can consist only of spaces when the line has no address."
                                  },
                                  "District": {
                                    "type": "string",
                                    "description": "Delivery district."
                                  },
                                  "City": {
                                    "type": "string",
                                    "description": "Delivery city."
                                  },
                                  "PostalCode": {
                                    "type": "string",
                                    "description": "Postal code of the order (not of the line)."
                                  },
                                  "Telephone": {
                                    "type": "string",
                                    "description": "Delivery phone number."
                                  },
                                  "CargoCompany": {
                                    "type": "string",
                                    "description": "Shipping company name."
                                  },
                                  "CargoLabelCode": {
                                    "type": "string",
                                    "description": "Shipment tracking / label code. Empty when no shipment info has been set for the line."
                                  },
                                  "CargoPayment": {
                                    "type": "string",
                                    "description": "Who pays for shipping; usually `Seller`, `Buyer` or `Unknown`."
                                  },
                                  "CargoDate": {
                                    "type": "string",
                                    "description": "Date the shipment info was set, in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                  },
                                  "ShipmentCampaignCode": {
                                    "type": "string",
                                    "description": "Shipping campaign / shipment code from the marketplace."
                                  },
                                  "LastModificationTime": {
                                    "type": "string",
                                    "description": "Not populated by this endpoint; always `0001-01-01T00:00:00`. Use `GetSales` for the real value."
                                  },
                                  "RowSalt": {
                                    "type": "string",
                                    "description": "Internal field (encryption salt, Base64). Normally absent; ignore it if present."
                                  }
                                }
                              },
                              "description": "All lines of the order."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "OrderId": 4567890,
                    "StoreId": 12345,
                    "IntegrationOrderCode": "10293847",
                    "OrderDate": "2026-11-04T07:12:45Z",
                    "OrderStatus": "New",
                    "OrderType": 0,
                    "Name": "Ayşe",
                    "Surname": "Yılmaz",
                    "Fullname": "Ayşe Yılmaz",
                    "Nickname": "ayseyilmaz",
                    "PersonalIdentification": "11111111111",
                    "TaxAuthority": "",
                    "TaxNumber": "11111111111",
                    "Email": "ayse@example.com",
                    "Telephone": "05551112233",
                    "Address": "Örnek Mah. Deneme Sok. No:5 D:3 34710 Kadıköy İstanbul",
                    "District": "Kadıköy",
                    "City": "İstanbul",
                    "PostalCode": "34710",
                    "Notes": "",
                    "Member": "",
                    "OrderDetails": [
                      {
                        "OrderDetailId": 9876543,
                        "StoreId": 12345,
                        "IntegrationOrderDetailId": "3456789012",
                        "ProductId": 554433,
                        "IntegrationProductCode": "TSH-001-BLK-M",
                        "ProductName": "Basic Tişört Siyah M",
                        "ProductCode": "TSH-001",
                        "ProductCode2": "",
                        "Barcode": "8691234567890",
                        "MerchantSku": "TSH-001-BLK-M",
                        "ProductImage": "https://cdn.example.com/img/tsh-001.jpg",
                        "ProductUnit": "Adet",
                        "ProductVariantCode": "TSH-001-BLK-M",
                        "ProductVariantId": 0,
                        "VariantProductCode": "TSH-001-BLK-M",
                        "VariantProductBarcode": "8691234567890",
                        "VariantPhrase": "Renk: Siyah, Beden: M",
                        "VariantName1": "Renk",
                        "VariantValue1": "Siyah",
                        "VariantName2": "Beden",
                        "VariantValue2": "M",
                        "VariantName3": "",
                        "VariantValue3": "",
                        "Price": 249.9,
                        "Quantity": 2,
                        "RawQuantity": 2.0,
                        "TaxRate": 20.0,
                        "DetailType": 1,
                        "OrderStatus": "New",
                        "Invoiced": false,
                        "InvoiceNumber": "",
                        "InvoiceTime": "1899-12-31T22:03:00Z",
                        "PackageNumber": "",
                        "PackageTime": "1899-12-31T22:03:00Z",
                        "WayBillNumber": "",
                        "WayBillTime": "1899-12-31T22:03:00Z",
                        "Unread": true,
                        "SmUserSchemaId": 77,
                        "SchemaName": "Giyim",
                        "DeliveryTitle": "Ayşe Yılmaz",
                        "Address": "Örnek Mah. Deneme Sok. No:5 D:3 34710 Kadıköy İstanbul",
                        "District": "Kadıköy",
                        "City": "İstanbul",
                        "PostalCode": "34710",
                        "Telephone": "05551112233",
                        "CargoCompany": "",
                        "CargoLabelCode": "",
                        "CargoPayment": "Seller",
                        "CargoDate": "1899-12-31T22:03:00Z",
                        "ShipmentCampaignCode": "7330012345678",
                        "LastModificationTime": "0001-01-01T00:00:00"
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SetOrder": {
      "post": {
        "operationId": "SetOrder",
        "tags": [
          "Orders"
        ],
        "summary": "Create or update an order",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "ID of a StockMount-type store."
                  },
                  "Order": {
                    "type": "object",
                    "properties": {
                      "OrderId": {
                        "type": "integer",
                        "description": "ID of the order to update. Use 0 or omit for a new order."
                      },
                      "IntegrationOrderCode": {
                        "type": "string",
                        "description": "Your order number. Must be unique within the store. Max 50 characters."
                      },
                      "OrderStatus": {
                        "type": "string",
                        "description": "Order status (case-insensitive).\n\n- `New`: New.\n- `Approved`: Approved.\n- `Rejected`: Rejected.\n- `Shipped`: Shipped.\n- `Delivered`: Delivered.\n- `Completed`: Completed."
                      },
                      "Nickname": {
                        "type": "string",
                        "description": "Buyer user name / customer code. Max 100 characters."
                      },
                      "Fullname": {
                        "type": "string",
                        "description": "Buyer full name. Required if `CompanyTitle` is empty."
                      },
                      "CompanyTitle": {
                        "type": "string",
                        "description": "Company title. Required if `Fullname` is empty. Not changed on update."
                      },
                      "Address": {
                        "type": "string",
                        "description": "Address. Max 500 characters."
                      },
                      "OrderDate": {
                        "type": "string",
                        "description": "Order date, Turkey time without offset. Default: now."
                      },
                      "Name": {
                        "type": "string",
                        "description": "Buyer first name. Falls back to `Fullname`."
                      },
                      "Surname": {
                        "type": "string",
                        "description": "Buyer last name."
                      },
                      "City": {
                        "type": "string",
                        "description": "City."
                      },
                      "District": {
                        "type": "string",
                        "description": "District."
                      },
                      "PostalCode": {
                        "type": "string",
                        "description": "Postal code. Max 10 characters."
                      },
                      "Telephone": {
                        "type": "string",
                        "description": "Phone."
                      },
                      "PersonalIdentification": {
                        "type": "string",
                        "description": "National ID number."
                      },
                      "TaxAuthority": {
                        "type": "string",
                        "description": "Tax office."
                      },
                      "TaxNumber": {
                        "type": "string",
                        "description": "Tax number."
                      },
                      "Notes": {
                        "type": "string",
                        "description": "Order note."
                      },
                      "OrderDetails": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "IntegrationProductCode": {
                              "type": "string",
                              "description": "Product code. Max 50 characters."
                            },
                            "ProductName": {
                              "type": "string",
                              "description": "Product name. Max 200 characters."
                            },
                            "Quantity": {
                              "type": "integer",
                              "description": "Quantity; at least 1."
                            },
                            "Price": {
                              "type": "number",
                              "description": "Unit price."
                            },
                            "TaxRate": {
                              "type": "number",
                              "description": "VAT rate (e.g. `20`)."
                            },
                            "IntegrationOrderDetailId": {
                              "type": "string",
                              "description": "Line ID in your system."
                            },
                            "ProductId": {
                              "type": "integer",
                              "description": "StockMount product ID to link. Default 0 (no match)."
                            },
                            "ProductVariantId": {
                              "type": "integer",
                              "description": "StockMount variant ID to link."
                            },
                            "MerchantSku": {
                              "type": "string",
                              "description": "Merchant SKU."
                            },
                            "ProductImage": {
                              "type": "string",
                              "description": "Product image URL."
                            },
                            "OrderStatus": {
                              "type": "string",
                              "description": "Line status. Falls back to the order status. Not validated."
                            },
                            "DetailType": {
                              "type": "integer",
                              "description": "Line type. Default 0.\n\n- `0`: Not specified (default).\n- `1`: Product line.\n- `2`: Additional service line (service fee, shipping fee, etc.).\n- `3`: Instalment charge line."
                            },
                            "Invoiced": {
                              "type": "boolean",
                              "description": "Invoiced flag. Default false."
                            },
                            "DeliveryTitle": {
                              "type": "string",
                              "description": "Delivery name or title."
                            },
                            "Address": {
                              "type": "string",
                              "description": "Delivery address. When empty the order's address and contact fields are copied."
                            },
                            "City": {
                              "type": "string",
                              "description": "Delivery city."
                            },
                            "District": {
                              "type": "string",
                              "description": "Delivery district."
                            },
                            "PostalCode": {
                              "type": "string",
                              "description": "Delivery postal code."
                            },
                            "Telephone": {
                              "type": "string",
                              "description": "Delivery phone."
                            },
                            "CargoCompany": {
                              "type": "string",
                              "description": "Shipping company."
                            },
                            "CargoLabelCode": {
                              "type": "string",
                              "description": "Tracking code."
                            },
                            "CargoPayment": {
                              "type": "string",
                              "description": "Who pays for shipping.\n\n- `Seller`: Seller pays.\n- `Buyer`: Buyer pays.\n- `Unknown`: Unknown (invalid values become this)."
                            },
                            "CargoDate": {
                              "type": "string",
                              "description": "Shipping date; only values after 2000 are saved."
                            },
                            "ShipmentCampaignCode": {
                              "type": "string",
                              "description": "Shipping campaign / shipment code."
                            },
                            "PaymentMethod": {
                              "type": "string",
                              "description": "Payment method. Max 50 characters."
                            },
                            "VariantName1": {
                              "type": "string",
                              "description": "Variant attribute 1 name."
                            },
                            "VariantValue1": {
                              "type": "string",
                              "description": "Variant attribute 1 value."
                            },
                            "VariantName2": {
                              "type": "string",
                              "description": "Variant attribute 2 name."
                            },
                            "VariantValue2": {
                              "type": "string",
                              "description": "Variant attribute 2 value."
                            },
                            "VariantName3": {
                              "type": "string",
                              "description": "Variant attribute 3 name."
                            },
                            "VariantValue3": {
                              "type": "string",
                              "description": "Variant attribute 3 value."
                            }
                          },
                          "required": [
                            "IntegrationProductCode",
                            "ProductName",
                            "Quantity"
                          ]
                        },
                        "description": "Order lines; at least one."
                      }
                    },
                    "required": [
                      "IntegrationOrderCode",
                      "OrderStatus",
                      "Nickname",
                      "Address",
                      "OrderDetails"
                    ],
                    "description": "The order."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "Order"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 67890,
                "Order": {
                  "IntegrationOrderCode": "WEB-2026-000123",
                  "OrderStatus": "New",
                  "OrderDate": "2026-11-05T14:30:00",
                  "Nickname": "musteri-4411",
                  "Fullname": "Mehmet Demir",
                  "Name": "Mehmet",
                  "Surname": "Demir",
                  "Address": "Atatürk Cad. No:12",
                  "District": "Nilüfer",
                  "City": "Bursa",
                  "PostalCode": "16110",
                  "Telephone": "05321234567",
                  "PersonalIdentification": "11111111111",
                  "TaxNumber": "11111111111",
                  "Notes": "Kapıya bırakılabilir.",
                  "OrderDetails": [
                    {
                      "IntegrationOrderDetailId": "WEB-2026-000123-1",
                      "IntegrationProductCode": "KUPA-350",
                      "ProductName": "Seramik Kupa 350 ml",
                      "Quantity": 3,
                      "Price": 129.9,
                      "TaxRate": 20,
                      "DetailType": 1,
                      "CargoPayment": "Seller"
                    }
                  ]
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "OrderId": {
                              "type": "integer",
                              "description": "StockMount order ID. Use it with `GetOrder`, `SetOrderNotes` and similar endpoints."
                            },
                            "StoreId": {
                              "type": "integer",
                              "description": "Store ID."
                            },
                            "IntegrationOrderCode": {
                              "type": "string",
                              "description": "Order number on the marketplace."
                            },
                            "OrderDate": {
                              "type": "string",
                              "description": "Order date in UTC (with `Z`). An order placed at 14:30 Turkey time returns `…T11:30:00Z`."
                            },
                            "OrderStatus": {
                              "type": "string",
                              "description": "Order-level status from the order record. Line statuses can differ; check them with `GetOrderDetailStatus`."
                            },
                            "OrderType": {
                              "type": "integer",
                              "description": "Order type.\n\n- `0`: Standard order.\n- `1`: Trendyol equivalent-product order.\n- `2`: Trendyol cross-border (micro export) order.\n- `3`: Trendyol cross-border and equivalent-product order.\n- `10`: Hepsiburada Buy Now Pay Later order."
                            },
                            "Name": {
                              "type": "string",
                              "description": "Buyer first name."
                            },
                            "Surname": {
                              "type": "string",
                              "description": "Buyer last name."
                            },
                            "Fullname": {
                              "type": "string",
                              "description": "Company title for corporate buyers, otherwise the full name. No separate `CompanyTitle` field is returned."
                            },
                            "Nickname": {
                              "type": "string",
                              "description": "Buyer's user name on the marketplace."
                            },
                            "PersonalIdentification": {
                              "type": "string",
                              "description": "Turkish national ID number."
                            },
                            "TaxAuthority": {
                              "type": "string",
                              "description": "Tax office."
                            },
                            "TaxNumber": {
                              "type": "string",
                              "description": "Tax number."
                            },
                            "Email": {
                              "type": "string",
                              "description": "Buyer e-mail address."
                            },
                            "Telephone": {
                              "type": "string",
                              "description": "Buyer phone number."
                            },
                            "Address": {
                              "type": "string",
                              "description": "Billing address, postal code, district and city joined with spaces."
                            },
                            "District": {
                              "type": "string",
                              "description": "District."
                            },
                            "City": {
                              "type": "string",
                              "description": "City."
                            },
                            "PostalCode": {
                              "type": "string",
                              "description": "Postal code."
                            },
                            "Notes": {
                              "type": "string",
                              "description": "Order note (written by `SetOrderNotes`)."
                            },
                            "Member": {
                              "type": "string",
                              "description": "Raw membership info from the marketplace (e.g. an IdeaSoft JSON string). Usually empty."
                            },
                            "RowSalt": {
                              "type": "string",
                              "description": "Internal field (encryption salt, Base64). Normally absent; ignore it if present."
                            },
                            "OrderDetails": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "OrderDetailId": {
                                    "type": "integer",
                                    "description": "StockMount order line ID. Use this value in the other line endpoints."
                                  },
                                  "StoreId": {
                                    "type": "integer",
                                    "description": "Store ID."
                                  },
                                  "IntegrationOrderDetailId": {
                                    "type": "string",
                                    "description": "The line's ID on the marketplace. Additional service lines may carry a synthetic value containing `_`, such as `{orderNo}_Service`."
                                  },
                                  "ProductId": {
                                    "type": "integer",
                                    "description": "Matched StockMount product ID. `0` when the line is not matched to a product."
                                  },
                                  "IntegrationProductCode": {
                                    "type": "string",
                                    "description": "The product's code on the marketplace. Additional service lines use fixed codes: `999999999999` service fee, `999999999998` instalment difference, `999999999997` commission, `999999999996` payment service fee, `999999999995` shipping fee, `999999999994` gift wrapping, `999999999993` account payment service fee."
                                  },
                                  "ProductName": {
                                    "type": "string",
                                    "description": "Product name on the marketplace; falls back to the matched StockMount product name. Omitted when both are empty."
                                  },
                                  "ProductCode": {
                                    "type": "string",
                                    "description": "Matched StockMount product code. Without a match: `MerchantSku`, then `IntegrationProductCode`."
                                  },
                                  "ProductCode2": {
                                    "type": "string",
                                    "description": "Second code of the StockMount product. Empty string when not set."
                                  },
                                  "Barcode": {
                                    "type": "string",
                                    "description": "Barcode of the matched StockMount product. Empty string without a match."
                                  },
                                  "MerchantSku": {
                                    "type": "string",
                                    "description": "Merchant SKU reported by the marketplace."
                                  },
                                  "ProductImage": {
                                    "type": "string",
                                    "description": "First image of the matched StockMount product; otherwise the marketplace image URL."
                                  },
                                  "ProductUnit": {
                                    "type": "string",
                                    "description": "Sales unit, when the marketplace provides one."
                                  },
                                  "ProductVariantCode": {
                                    "type": "string",
                                    "description": "Variant code of the line. Empty string when not set."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Always `0`; do not use."
                                  },
                                  "VariantProductCode": {
                                    "type": "string",
                                    "description": "Code of the matched StockMount variant. Empty string when not matched."
                                  },
                                  "VariantProductBarcode": {
                                    "type": "string",
                                    "description": "Barcode of the matched StockMount variant. Empty string when not matched."
                                  },
                                  "VariantPhrase": {
                                    "type": "string",
                                    "description": "Variant text from the marketplace (e.g. `Color: Black, Size: M`)."
                                  },
                                  "VariantName1": {
                                    "type": "string",
                                    "description": "Name of variant attribute 1."
                                  },
                                  "VariantValue1": {
                                    "type": "string",
                                    "description": "Value of variant attribute 1."
                                  },
                                  "VariantName2": {
                                    "type": "string",
                                    "description": "Name of variant attribute 2."
                                  },
                                  "VariantValue2": {
                                    "type": "string",
                                    "description": "Value of variant attribute 2."
                                  },
                                  "VariantName3": {
                                    "type": "string",
                                    "description": "Name of variant attribute 3."
                                  },
                                  "VariantValue3": {
                                    "type": "string",
                                    "description": "Value of variant attribute 3."
                                  },
                                  "Price": {
                                    "type": "number",
                                    "description": "Unit price. Line total = `Price` × `RawQuantity` (StockMount's own reports compute it this way)."
                                  },
                                  "Quantity": {
                                    "type": "integer",
                                    "description": "Quantity truncated to an integer. Use `RawQuantity` for fractional quantities."
                                  },
                                  "RawQuantity": {
                                    "type": "number",
                                    "description": "Exact (decimal) quantity."
                                  },
                                  "TaxRate": {
                                    "type": "number",
                                    "description": "VAT rate (e.g. `20`). The matched StockMount product's rate when it is above 0; otherwise the rate the marketplace sent."
                                  },
                                  "DetailType": {
                                    "type": "integer",
                                    "description": "Line type.\n\n- `0`: Not specified (default).\n- `1`: Product line.\n- `2`: Additional service line (service fee, shipping fee, etc.).\n- `3`: Instalment charge line."
                                  },
                                  "OrderStatus": {
                                    "type": "string",
                                    "description": "The order-level status (from the order record), not the line's own status. Use `GetOrderDetailStatus` for line status."
                                  },
                                  "Invoiced": {
                                    "type": "boolean",
                                    "description": "`true` when the line is marked as invoiced."
                                  },
                                  "InvoiceNumber": {
                                    "type": "string",
                                    "description": "Invoice number. Empty string when not set."
                                  },
                                  "InvoiceTime": {
                                    "type": "string",
                                    "description": "Invoice date in UTC (with `Z`). When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                  },
                                  "PackageNumber": {
                                    "type": "string",
                                    "description": "Package number written by `SetOrderDetailInvoiced`. Empty string when not set. Note: `GetSales` returns the marketplace package number in this field instead."
                                  },
                                  "PackageTime": {
                                    "type": "string",
                                    "description": "Package date in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                  },
                                  "WayBillNumber": {
                                    "type": "string",
                                    "description": "Waybill number. Empty string when not set."
                                  },
                                  "WayBillTime": {
                                    "type": "string",
                                    "description": "Waybill date in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                  },
                                  "Unread": {
                                    "type": "boolean",
                                    "description": "`true` when the line is flagged as unread in the StockMount panel."
                                  },
                                  "SmUserSchemaId": {
                                    "type": "integer",
                                    "description": "Template (schema) ID of the matched StockMount product. `0` without a match."
                                  },
                                  "SchemaName": {
                                    "type": "string",
                                    "description": "Template name of the matched product. Empty string when not set."
                                  },
                                  "DeliveryTitle": {
                                    "type": "string",
                                    "description": "Recipient name or title on the delivery address."
                                  },
                                  "Address": {
                                    "type": "string",
                                    "description": "Delivery address, postal code, district and city joined with spaces. Can consist only of spaces when the line has no address."
                                  },
                                  "District": {
                                    "type": "string",
                                    "description": "Delivery district."
                                  },
                                  "City": {
                                    "type": "string",
                                    "description": "Delivery city."
                                  },
                                  "PostalCode": {
                                    "type": "string",
                                    "description": "Postal code of the order (not of the line)."
                                  },
                                  "Telephone": {
                                    "type": "string",
                                    "description": "Delivery phone number."
                                  },
                                  "CargoCompany": {
                                    "type": "string",
                                    "description": "Shipping company name."
                                  },
                                  "CargoLabelCode": {
                                    "type": "string",
                                    "description": "Shipment tracking / label code. Empty when no shipment info has been set for the line."
                                  },
                                  "CargoPayment": {
                                    "type": "string",
                                    "description": "Who pays for shipping; usually `Seller`, `Buyer` or `Unknown`."
                                  },
                                  "CargoDate": {
                                    "type": "string",
                                    "description": "Date the shipment info was set, in UTC. When there is no value it returns `1899-12-31T22:03:00Z` instead of `null` (1900-01-01 Turkey time converted to UTC)."
                                  },
                                  "ShipmentCampaignCode": {
                                    "type": "string",
                                    "description": "Shipping campaign / shipment code from the marketplace."
                                  },
                                  "LastModificationTime": {
                                    "type": "string",
                                    "description": "Not populated by this endpoint; always `0001-01-01T00:00:00`. Use `GetSales` for the real value."
                                  },
                                  "RowSalt": {
                                    "type": "string",
                                    "description": "Internal field (encryption salt, Base64). Normally absent; ignore it if present."
                                  }
                                }
                              },
                              "description": "All lines of the order."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "OrderId": 4567999,
                    "StoreId": 67890,
                    "IntegrationOrderCode": "WEB-2026-000123",
                    "OrderDate": "2026-11-05T11:30:00Z",
                    "OrderStatus": "New",
                    "OrderType": 0,
                    "Name": "Mehmet",
                    "Surname": "Demir",
                    "Fullname": "Mehmet Demir",
                    "Nickname": "musteri-4411",
                    "PersonalIdentification": "11111111111",
                    "TaxAuthority": "",
                    "TaxNumber": "11111111111",
                    "Email": "",
                    "Telephone": "05321234567",
                    "Address": "Atatürk Cad. No:12 16110 Nilüfer Bursa",
                    "District": "Nilüfer",
                    "City": "Bursa",
                    "PostalCode": "16110",
                    "Notes": "Kapıya bırakılabilir.",
                    "Member": "",
                    "OrderDetails": [
                      {
                        "OrderDetailId": 9877001,
                        "StoreId": 67890,
                        "IntegrationOrderDetailId": "WEB-2026-000123-1",
                        "ProductId": 0,
                        "IntegrationProductCode": "KUPA-350",
                        "ProductName": "Seramik Kupa 350 ml",
                        "ProductCode": "KUPA-350",
                        "ProductCode2": "",
                        "Barcode": "",
                        "MerchantSku": "",
                        "ProductImage": "",
                        "ProductUnit": "",
                        "ProductVariantCode": "",
                        "ProductVariantId": 0,
                        "VariantProductCode": "",
                        "VariantProductBarcode": "",
                        "Price": 129.9,
                        "Quantity": 3,
                        "RawQuantity": 3.0,
                        "TaxRate": 20.0,
                        "DetailType": 1,
                        "OrderStatus": "New",
                        "Invoiced": false,
                        "InvoiceNumber": "",
                        "InvoiceTime": "1899-12-31T22:03:00Z",
                        "PackageNumber": "",
                        "PackageTime": "1899-12-31T22:03:00Z",
                        "WayBillNumber": "",
                        "WayBillTime": "1899-12-31T22:03:00Z",
                        "Unread": false,
                        "SmUserSchemaId": 0,
                        "SchemaName": "",
                        "DeliveryTitle": "Mehmet Demir",
                        "Address": "Atatürk Cad. No:12 16110 Nilüfer Bursa",
                        "District": "Nilüfer",
                        "City": "Bursa",
                        "PostalCode": "16110",
                        "Telephone": "05321234567",
                        "CargoCompany": "",
                        "CargoLabelCode": "",
                        "CargoPayment": "Seller",
                        "CargoDate": "1899-12-31T22:03:00Z",
                        "ShipmentCampaignCode": "",
                        "LastModificationTime": "0001-01-01T00:00:00"
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SetOrderNotes": {
      "post": {
        "operationId": "SetOrderNotes",
        "tags": [
          "Orders"
        ],
        "summary": "Save the order note",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "OrderId": {
                    "type": "integer",
                    "description": "StockMount order ID."
                  },
                  "Notes": {
                    "type": "string",
                    "description": "New note. Empty clears the current note."
                  }
                },
                "required": [
                  "ApiCode",
                  "OrderId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "OrderId": 4567890,
                "Notes": "Müşteri aradı, hediye paketi istedi."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/ConfirmOrRejectOrderItem": {
      "post": {
        "operationId": "ConfirmOrRejectOrderItem",
        "tags": [
          "Orders"
        ],
        "summary": "Accept or reject an N11 order item",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "ID of the N11 store."
                  },
                  "IntegrationId": {
                    "type": "integer",
                    "description": "Marketplace ID; only `2` (N11) is accepted.\n\n- `2`: N11."
                  },
                  "IntegrationOrderDetailId": {
                    "type": "string",
                    "description": "N11 order item ID (numeric)."
                  },
                  "Status": {
                    "type": "integer",
                    "description": "Action.\n\n- `1`: Accept.\n- `2`: Reject."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "IntegrationId",
                  "IntegrationOrderDetailId",
                  "Status"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 12345,
                "IntegrationId": 2,
                "IntegrationOrderDetailId": "245678901234",
                "Status": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SetOrderShipmentInformation": {
      "post": {
        "operationId": "SetOrderShipmentInformation",
        "tags": [
          "Orders"
        ],
        "summary": "Send shipment information",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "Store ID."
                  },
                  "IntegrationId": {
                    "type": "integer",
                    "description": "The store's marketplace ID: N11 `2`, T-Soft `22`, StockMount `9999`. Looked up from the store when omitted.\n\n- `2`: N11.\n- `22`: T-Soft.\n- `9999`: StockMount store.\n- `1`: GittiGidiyor (closed)."
                  },
                  "OrderDetailId": {
                    "type": "integer",
                    "description": "StockMount order line ID."
                  },
                  "SendShipmentInformation": {
                    "type": "boolean",
                    "description": "Must be `true`."
                  },
                  "ShipmentCompany": {
                    "type": "string",
                    "description": "Shipping company code (`GetIntegrationShipmentCompanies` → `Code`)."
                  },
                  "ShipmentTrackingCode": {
                    "type": "string",
                    "description": "Tracking code."
                  },
                  "ShipmentBranch": {
                    "type": "string",
                    "description": "Shipping branch. Appended to the company name in StockMount. Was required for GittiGidiyor."
                  },
                  "OrderId": {
                    "type": "integer",
                    "description": "StockMount order ID. Looked up from the line when missing."
                  },
                  "IntegrationOrderDetailId": {
                    "type": "string",
                    "description": "Marketplace line ID (N11, T-Soft). Taken from the line when missing."
                  },
                  "IntegrationOrderCode": {
                    "type": "string",
                    "description": "Marketplace order number. Only used for GittiGidiyor."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "OrderDetailId",
                  "SendShipmentInformation",
                  "ShipmentCompany",
                  "ShipmentTrackingCode"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 12345,
                "IntegrationId": 2,
                "OrderDetailId": 9876543,
                "SendShipmentInformation": true,
                "ShipmentCompany": "344",
                "ShipmentTrackingCode": "1234567890123"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SetOrderDetailInvoiced": {
      "post": {
        "operationId": "SetOrderDetailInvoiced",
        "tags": [
          "Orders"
        ],
        "summary": "Save invoice data for lines",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "OrderDetails": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "OrderDetailId": {
                          "type": "integer",
                          "description": "StockMount order line ID."
                        },
                        "StoreId": {
                          "type": "integer",
                          "description": "Store ID of the line. Not validated, but a wrong value means the line is not updated."
                        },
                        "Invoiced": {
                          "type": "boolean",
                          "description": "Invoiced flag. Default `false`."
                        },
                        "InvoiceNumber": {
                          "type": "string",
                          "description": "Invoice number. Max 64 characters."
                        },
                        "InvoiceTime": {
                          "type": "string",
                          "description": "Invoice date."
                        },
                        "PackageNumber": {
                          "type": "string",
                          "description": "Package number. Max 64 characters."
                        },
                        "PackageTime": {
                          "type": "string",
                          "description": "Package date."
                        },
                        "WayBillNumber": {
                          "type": "string",
                          "description": "Waybill number. Max 64 characters."
                        },
                        "WayBillTime": {
                          "type": "string",
                          "description": "Waybill date."
                        }
                      },
                      "required": [
                        "OrderDetailId",
                        "StoreId"
                      ]
                    },
                    "description": "Lines to update."
                  }
                },
                "required": [
                  "ApiCode",
                  "OrderDetails"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "OrderDetails": [
                  {
                    "OrderDetailId": 9876543,
                    "StoreId": 12345,
                    "Invoiced": true,
                    "InvoiceNumber": "ABC2026000000123",
                    "InvoiceTime": "2026-11-05T15:00:00"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SetEinvoiceLink": {
      "post": {
        "operationId": "SetEinvoiceLink",
        "tags": [
          "Orders"
        ],
        "summary": "Save the e-invoice link",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "Store ID."
                  },
                  "IntegrationOrderCode": {
                    "type": "string",
                    "description": "Marketplace order number."
                  },
                  "IntegrationOrderDetailIds": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Optional marketplace line IDs. Empty means all lines."
                  },
                  "InvoiceNumber": {
                    "type": "string",
                    "description": "Invoice number (e.g. `ABC2026000000123`)."
                  },
                  "InvoiceId": {
                    "type": "string",
                    "description": "Invoice UUID (ETTN)."
                  },
                  "InvoiceScenario": {
                    "type": "string",
                    "description": "Invoice scenario (e.g. `EARSIVFATURA`, `TEMELFATURA`). Not validated; stored as is."
                  },
                  "InvoiceTime": {
                    "type": "string",
                    "description": "Invoice date, Turkey time without offset."
                  },
                  "InvoiceLink": {
                    "type": "string",
                    "description": "Public link to the invoice (PDF/HTML)."
                  },
                  "SendEinvoiceToPlatform": {
                    "type": "boolean",
                    "description": "When `true` the link is also sent to the marketplace. Default `false`."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "IntegrationOrderCode",
                  "InvoiceNumber",
                  "InvoiceId",
                  "InvoiceScenario",
                  "InvoiceTime",
                  "InvoiceLink"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 12345,
                "IntegrationOrderCode": "10293847",
                "InvoiceNumber": "ABC2026000000123",
                "InvoiceId": "3f2a9c1e-7b4d-4e8a-9c21-5d6e7f8a9b0c",
                "InvoiceScenario": "EARSIVFATURA",
                "InvoiceTime": "2026-11-05T15:00:00",
                "InvoiceLink": "https://efatura.example.com/view/3f2a9c1e-7b4d-4e8a-9c21-5d6e7f8a9b0c.pdf",
                "SendEinvoiceToPlatform": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Message": "Invoice link saved and sent successfully."
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SetOrderDetailStatus": {
      "post": {
        "operationId": "SetOrderDetailStatus",
        "tags": [
          "Orders"
        ],
        "summary": "Change line status",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "OrderDetails": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "OrderDetailId": {
                          "type": "integer",
                          "description": "StockMount order line ID."
                        },
                        "StoreId": {
                          "type": "integer",
                          "description": "Store ID of the line (StockMount-type store)."
                        },
                        "OrderStatus": {
                          "type": "string",
                          "description": "New status code.\n\n- `New`: New.\n- `Approved`: Approved.\n- `Rejected`: Rejected.\n- `Shipped`: Shipped.\n- `Delivered`: Delivered.\n- `Completed`: Completed."
                        }
                      },
                      "required": [
                        "OrderDetailId",
                        "StoreId",
                        "OrderStatus"
                      ]
                    },
                    "description": "Lines to update."
                  }
                },
                "required": [
                  "ApiCode",
                  "OrderDetails"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "OrderDetails": [
                  {
                    "OrderDetailId": 9877001,
                    "StoreId": 67890,
                    "OrderStatus": "Shipped"
                  },
                  {
                    "OrderDetailId": 9877002,
                    "StoreId": 67890,
                    "OrderStatus": "Shipped"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "Result": {
                                "type": "boolean",
                                "description": "`true` when this line was updated."
                              },
                              "ErrorCode": {
                                "type": "string",
                                "description": "Line error code: `00003` for validation/store errors, `99999` otherwise."
                              },
                              "ErrorMessage": {
                                "type": "string",
                                "description": "Line error: `OrderDetail.StoreId`, `OrderDetail.OrderDetailId`, `OrderDetail.OrderStatus`, `InvalidStore`, `Store has to be StockMount store!`, or `NotExisted` when the line is not found. Empty when the line belongs to another user."
                              },
                              "Response": {
                                "type": "integer",
                                "description": "The `OrderDetailId` from the request."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": false,
                  "Response": [
                    {
                      "Result": true,
                      "Response": 9877001
                    },
                    {
                      "Result": false,
                      "ErrorCode": "99999",
                      "ErrorMessage": "NotExisted",
                      "Response": 9877002
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SetProductSourceProducts": {
      "post": {
        "operationId": "SetProductSourceProducts",
        "tags": [
          "Products"
        ],
        "summary": "Upload a product source file",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "API code returned by `DoLogin`."
                  },
                  "ProductSourceUrl": {
                    "type": "string",
                    "description": "Address of the product source file; path `/{8-digit userId}/out/{fileName}`."
                  },
                  "ProductsText": {
                    "type": "string",
                    "description": "Full file content (e.g. XML text)."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductSourceUrl",
                  "ProductsText"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductSourceUrl": "https://files.example.com/00012345/out/products.xml",
                "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>"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/GetProductSources": {
      "post": {
        "operationId": "GetProductSources",
        "tags": [
          "Products"
        ],
        "summary": "List product sources",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  }
                },
                "required": [
                  "ApiCode"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "ProductSourceId": {
                                "type": "integer",
                                "description": "Source ID. Send it as `ProductSourceId` in the other product calls."
                              },
                              "Name": {
                                "type": "string",
                                "description": "Source name as shown in the StockMount panel."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": [
                    {
                      "ProductSourceId": 1234,
                      "Name": "Ana Ürünler"
                    },
                    {
                      "ProductSourceId": 1301,
                      "Name": "Outlet"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/GetProductCategories": {
      "post": {
        "operationId": "GetProductCategories",
        "tags": [
          "Products"
        ],
        "summary": "List the categories of a source",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "ID of a StockMount-type source (`GetProductSources`). A value below 1 returns 00003 (`ErrorMessage`: `ProductSourceId`)."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductSourceId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductSourceId": 1234
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "ProductCategoryId": {
                                "type": "integer",
                                "description": "Category ID (informational)."
                              },
                              "Name": {
                                "type": "string",
                                "description": "Category name. Use this name as `Category` in product calls."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": [
                    {
                      "ProductCategoryId": 55102,
                      "Name": "Pantolon"
                    },
                    {
                      "ProductCategoryId": 55101,
                      "Name": "Tişört"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/AddProduct": {
      "post": {
        "operationId": "AddProduct",
        "tags": [
          "Products"
        ],
        "summary": "Add a product",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "StockMount-type source that holds the product (`GetProductSources`). Returns 70002 if the source is not in your account and 70003 if it is not a StockMount-type source."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code (SKU). Unique within the source and compared exactly. Max 50 characters."
                  },
                  "Name": {
                    "type": "string",
                    "description": "Product name. Max 400 characters."
                  },
                  "Category": {
                    "type": "string",
                    "description": "Category name (not an ID). Created automatically if the source does not have it yet. See `GetProductCategories` for existing names."
                  },
                  "Price": {
                    "type": "number",
                    "description": "Sale price. Must be greater than 0, otherwise 00003 (`Price is missing`) is returned. Stored with 2 decimals."
                  },
                  "CurrencyId": {
                    "type": "integer",
                    "description": "Currency ID (`GetCurrencies`; e.g. 4 = TRY, 2 = USD, 3 = EUR). A value below 1 returns 00003. The API does not check that the ID exists, so send a valid one."
                  },
                  "Quantity": {
                    "type": "integer",
                    "description": "Stock quantity. Defaults to 0. Negative values are not rejected. For products with variants, send the total yourself; it is not calculated from variant stock."
                  },
                  "MarketPrice": {
                    "type": "number",
                    "description": "Market (list) price, usually higher than `Price` and used to show a discount. Defaults to 0."
                  },
                  "TaxRate": {
                    "type": "number",
                    "description": "VAT rate as a percentage (e.g. `20`). The API does not enforce a list of allowed values. Stored as 0 when omitted."
                  },
                  "Barcode": {
                    "type": "string",
                    "description": "Product barcode. Max 30 characters. No format or special-character check is done."
                  },
                  "Brand": {
                    "type": "string",
                    "description": "Brand. Max 30 characters."
                  },
                  "Model": {
                    "type": "string",
                    "description": "Model. Max 30 characters."
                  },
                  "Code2": {
                    "type": "string",
                    "description": "Secondary product code. Max 50 characters."
                  },
                  "Mpn": {
                    "type": "string",
                    "description": "Manufacturer part number (MPN). Max 50 characters."
                  },
                  "Subtitle": {
                    "type": "string",
                    "description": "Subtitle. Max 400 characters."
                  },
                  "Description": {
                    "type": "string",
                    "description": "Product description; may contain HTML. Unsafe HTML (e.g. scripts) is removed. Stored as empty when omitted."
                  },
                  "UpdateProductDescription": {
                    "type": "boolean",
                    "description": "Only matters when `UpdateProductByCode` turns the call into an update: `false` keeps the stored description. Default `true`."
                  },
                  "DispatchPeriod": {
                    "type": "integer",
                    "description": "Dispatch (handling) time in days. Defaults to -1 (not set)."
                  },
                  "Volume": {
                    "type": "number",
                    "description": "Volume / volumetric weight (desi). Defaults to 0."
                  },
                  "Width": {
                    "type": "number",
                    "description": "Width. Defaults to 0."
                  },
                  "Length": {
                    "type": "number",
                    "description": "Length. Defaults to 0."
                  },
                  "Height": {
                    "type": "number",
                    "description": "Height. Defaults to 0."
                  },
                  "Weight": {
                    "type": "number",
                    "description": "Weight. Defaults to 0."
                  },
                  "SellerNote": {
                    "type": "string",
                    "description": "Seller note. Max 150 characters."
                  },
                  "Price2": {
                    "type": "number",
                    "description": "Additional price field. Saved only when the product is created; `UpdateProduct` never changes it. Defaults to 0."
                  },
                  "Price3": {
                    "type": "number",
                    "description": "Additional price field. Saved only when the product is created; `UpdateProduct` never changes it. Defaults to 0."
                  },
                  "Price4": {
                    "type": "number",
                    "description": "Additional price field. Saved only when the product is created; `UpdateProduct` never changes it. Defaults to 0."
                  },
                  "Price5": {
                    "type": "number",
                    "description": "Additional price field. Saved only when the product is created; `UpdateProduct` never changes it. Defaults to 0."
                  },
                  "VariantName1": {
                    "type": "string",
                    "description": "Name of variant attribute 1 (e.g. `Color`). Max 30 characters. Required when any variant has `VariantValue1`; otherwise 00003 (`VariantName1 is missing`) is returned."
                  },
                  "VariantName2": {
                    "type": "string",
                    "description": "Name of variant attribute 2 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue2`; otherwise 00003 (`VariantName2 is missing`) is returned."
                  },
                  "VariantName3": {
                    "type": "string",
                    "description": "Name of variant attribute 3 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue3`; otherwise 00003 (`VariantName3 is missing`) is returned."
                  },
                  "VariantName4": {
                    "type": "string",
                    "description": "Name of variant attribute 4 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue4`; otherwise 00003 (`VariantName4 is missing`) is returned."
                  },
                  "VariantName5": {
                    "type": "string",
                    "description": "Name of variant attribute 5 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue5`; otherwise 00003 (`VariantName5 is missing`) is returned."
                  },
                  "VariantName6": {
                    "type": "string",
                    "description": "Name of variant attribute 6 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue6`; otherwise 00003 (`VariantName6 is missing`) is returned."
                  },
                  "Images": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "Url": {
                          "type": "string",
                          "description": "Image URL. Stored as sent; no format, protocol or webp check is done. A URL starting with `//` gets an `http:` prefix. Max 400 characters."
                        },
                        "Base64": {
                          "type": "string",
                          "description": "Used when `Url` is empty: the image is uploaded to StockMount's image server and stored with an `http://` URL. Send raw Base64 without a `data:` prefix. PNG and JPEG are detected; anything else is saved with a `.png` extension."
                        }
                      }
                    },
                    "description": "Product images, up to 12 (extra items are ignored). The array order is the image order; the `Order` field is not used."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Updates match variants by this code, so send a non-empty value that is unique within the product. Max 50 characters."
                        },
                        "Barcode": {
                          "type": "string",
                          "description": "Variant barcode. Leading and trailing spaces are trimmed. Max 30 characters."
                        },
                        "Quantity": {
                          "type": "integer",
                          "description": "Variant stock. Negative values are stored as 0."
                        },
                        "Price": {
                          "type": "number",
                          "description": "Variant price. Stored as 0 when omitted."
                        },
                        "VariantValue1": {
                          "type": "string",
                          "description": "Value of variant attribute 1 (e.g. `Black`). Max 100 characters."
                        },
                        "VariantValue2": {
                          "type": "string",
                          "description": "Value of variant attribute 2 (e.g. `M`). Max 100 characters."
                        },
                        "VariantValue3": {
                          "type": "string",
                          "description": "Value of variant attribute 3 (e.g. `M`). Max 100 characters."
                        },
                        "VariantValue4": {
                          "type": "string",
                          "description": "Value of variant attribute 4 (e.g. `M`). Max 100 characters."
                        },
                        "VariantValue5": {
                          "type": "string",
                          "description": "Value of variant attribute 5 (e.g. `M`). Max 100 characters."
                        },
                        "VariantValue6": {
                          "type": "string",
                          "description": "Value of variant attribute 6 (e.g. `M`). Max 100 characters."
                        },
                        "ImageUrl": {
                          "type": "string",
                          "description": "Variant image URL. Max 200 characters."
                        },
                        "ImageBase64": {
                          "type": "string",
                          "description": "Used when `ImageUrl` is empty: the image is uploaded to StockMount's image server. Send raw Base64 without a `data:` prefix."
                        },
                        "Code2": {
                          "type": "string",
                          "description": "Secondary variant code. Max 50 characters. If empty, the variant's position in the array (`0`, `1`, `2`…) is stored."
                        },
                        "Mpn": {
                          "type": "string",
                          "description": "Variant manufacturer part number. Max 50 characters."
                        }
                      }
                    },
                    "description": "Variant list. `ProductVariantId`, `CurrencyId`, `MinSalePrice` and `Price2`–`Price5` are ignored."
                  },
                  "Specs": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "Name": {
                          "type": "string",
                          "description": "Spec name (e.g. `Material`). Max 50 characters."
                        },
                        "Value": {
                          "type": "string",
                          "description": "Spec value (e.g. `Cotton`). Max 100 characters."
                        }
                      }
                    },
                    "description": "Product specs (name–value pairs)."
                  },
                  "UpdateProductByCode": {
                    "type": "boolean",
                    "description": "When `true` and `Code` already exists in the source, the existing product is updated instead of returning 70004 (upsert). Default `false`."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductSourceId",
                  "Code",
                  "Name",
                  "Category",
                  "Price",
                  "CurrencyId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductSourceId": 1234,
                "Code": "TSHIRT-001",
                "Name": "Basic Pamuklu Tişört",
                "Category": "Tişört",
                "Price": 249.9,
                "MarketPrice": 299.9,
                "CurrencyId": 4,
                "TaxRate": 20,
                "Quantity": 30,
                "Barcode": "8690000000017",
                "Brand": "Örnek Marka",
                "Model": "BSC-01",
                "Description": "<p>%100 pamuk, regular fit.</p>",
                "DispatchPeriod": 2,
                "Volume": 1,
                "VariantName1": "Renk",
                "VariantName2": "Beden",
                "Images": [
                  {
                    "Url": "https://cdn.example.com/tshirt-001-1.jpg"
                  },
                  {
                    "Url": "https://cdn.example.com/tshirt-001-2.jpg"
                  }
                ],
                "Variants": [
                  {
                    "Code": "TSHIRT-001-BLK-M",
                    "Barcode": "8690000000024",
                    "Quantity": 10,
                    "Price": 249.9,
                    "VariantValue1": "Siyah",
                    "VariantValue2": "M"
                  },
                  {
                    "Code": "TSHIRT-001-BLK-L",
                    "Barcode": "8690000000031",
                    "Quantity": 20,
                    "Price": 249.9,
                    "VariantValue1": "Siyah",
                    "VariantValue2": "L"
                  }
                ],
                "Specs": [
                  {
                    "Name": "Materyal",
                    "Value": "Pamuk"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "Response": {
                              "type": "integer",
                              "description": "The new product's `ProductId`. With 70004 it is the ID of the existing product that has the same code."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": 987654
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProduct": {
      "post": {
        "operationId": "UpdateProduct",
        "tags": [
          "Products"
        ],
        "summary": "Update a product",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "ID of the product to update. Required unless `UpdateProductByCode` is `true`; a value below 1 returns 00003 (`ErrorMessage`: `ProductId is missing`)."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "StockMount-type source that holds the product (`GetProductSources`). Returns 70002 if the source is not in your account and 70003 if it is not a StockMount-type source."
                  },
                  "Code": {
                    "type": "string",
                    "description": "The product's current code in the source. It is used to verify the product; you cannot change the code with this call (use `SetProductCode`). Max 50 characters."
                  },
                  "Name": {
                    "type": "string",
                    "description": "Product name. Max 400 characters."
                  },
                  "Category": {
                    "type": "string",
                    "description": "Category name (not an ID). Created automatically if the source does not have it yet. See `GetProductCategories` for existing names."
                  },
                  "Price": {
                    "type": "number",
                    "description": "Sale price. Must be greater than 0, otherwise 00003 (`Price is missing`) is returned. Stored with 2 decimals."
                  },
                  "CurrencyId": {
                    "type": "integer",
                    "description": "Currency ID (`GetCurrencies`; e.g. 4 = TRY, 2 = USD, 3 = EUR). A value below 1 returns 00003. The API does not check that the ID exists, so send a valid one."
                  },
                  "Quantity": {
                    "type": "integer",
                    "description": "Stock quantity. Defaults to 0. Negative values are not rejected. For products with variants, send the total yourself; it is not calculated from variant stock. The status is recalculated from it (below 1 gives 3, otherwise 2)."
                  },
                  "MarketPrice": {
                    "type": "number",
                    "description": "Market (list) price, usually higher than `Price` and used to show a discount. Defaults to 0. In `UpdateProduct`, omitting it resets the value to 0."
                  },
                  "TaxRate": {
                    "type": "number",
                    "description": "VAT rate as a percentage (e.g. `20`). The API does not enforce a list of allowed values. Stored as 0 when omitted. In `UpdateProduct`, omitting it resets the value to 0."
                  },
                  "Barcode": {
                    "type": "string",
                    "description": "Product barcode. Max 30 characters. No format or special-character check is done. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "Brand": {
                    "type": "string",
                    "description": "Brand. Max 30 characters. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "Model": {
                    "type": "string",
                    "description": "Model. Max 30 characters. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "Code2": {
                    "type": "string",
                    "description": "Secondary product code. Max 50 characters. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "Mpn": {
                    "type": "string",
                    "description": "Manufacturer part number (MPN). Max 50 characters. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "Subtitle": {
                    "type": "string",
                    "description": "Subtitle. Max 400 characters. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "Description": {
                    "type": "string",
                    "description": "Product description; may contain HTML. Unsafe HTML (e.g. scripts) is removed. Stored as empty when omitted. If `UpdateProductDescription` is `false`, the stored description is kept."
                  },
                  "UpdateProductDescription": {
                    "type": "boolean",
                    "description": "Send `false` to leave the description unchanged. Default `true`."
                  },
                  "DispatchPeriod": {
                    "type": "integer",
                    "description": "Dispatch (handling) time in days. Defaults to -1 (not set). In `UpdateProduct`, omitting it resets the value to -1."
                  },
                  "Volume": {
                    "type": "number",
                    "description": "Volume / volumetric weight (desi). Defaults to 0. In `UpdateProduct`, omitting it resets the value to 0."
                  },
                  "Width": {
                    "type": "number",
                    "description": "Width. Defaults to 0. In `UpdateProduct`, omitting it resets the value to 0."
                  },
                  "Length": {
                    "type": "number",
                    "description": "Length. Defaults to 0. In `UpdateProduct`, omitting it resets the value to 0."
                  },
                  "Height": {
                    "type": "number",
                    "description": "Height. Defaults to 0. In `UpdateProduct`, omitting it resets the value to 0."
                  },
                  "Weight": {
                    "type": "number",
                    "description": "Weight. Defaults to 0. In `UpdateProduct`, omitting it resets the value to 0."
                  },
                  "SellerNote": {
                    "type": "string",
                    "description": "Seller note. Max 150 characters. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "VariantName1": {
                    "type": "string",
                    "description": "Name of variant attribute 1 (e.g. `Color`). Max 30 characters. Required when any variant has `VariantValue1`; otherwise 00003 (`VariantName1 is missing`) is returned. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "VariantName2": {
                    "type": "string",
                    "description": "Name of variant attribute 2 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue2`; otherwise 00003 (`VariantName2 is missing`) is returned. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "VariantName3": {
                    "type": "string",
                    "description": "Name of variant attribute 3 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue3`; otherwise 00003 (`VariantName3 is missing`) is returned. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "VariantName4": {
                    "type": "string",
                    "description": "Name of variant attribute 4 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue4`; otherwise 00003 (`VariantName4 is missing`) is returned. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "VariantName5": {
                    "type": "string",
                    "description": "Name of variant attribute 5 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue5`; otherwise 00003 (`VariantName5 is missing`) is returned. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "VariantName6": {
                    "type": "string",
                    "description": "Name of variant attribute 6 (e.g. `Size`). Max 30 characters. Required when any variant has `VariantValue6`; otherwise 00003 (`VariantName6 is missing`) is returned. In `UpdateProduct`, omitting it clears the stored value."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Updates match variants by this code, so send a non-empty value that is unique within the product. Max 50 characters."
                        },
                        "Barcode": {
                          "type": "string",
                          "description": "Variant barcode. Leading and trailing spaces are trimmed. Max 30 characters."
                        },
                        "Quantity": {
                          "type": "integer",
                          "description": "Variant stock. Negative values are stored as 0."
                        },
                        "Price": {
                          "type": "number",
                          "description": "Variant price. Stored as 0 when omitted."
                        },
                        "VariantValue1": {
                          "type": "string",
                          "description": "Value of variant attribute 1 (e.g. `Black`). Max 100 characters."
                        },
                        "VariantValue2": {
                          "type": "string",
                          "description": "Value of variant attribute 2 (e.g. `M`). Max 100 characters."
                        },
                        "VariantValue3": {
                          "type": "string",
                          "description": "Value of variant attribute 3 (e.g. `M`). Max 100 characters."
                        },
                        "VariantValue4": {
                          "type": "string",
                          "description": "Value of variant attribute 4 (e.g. `M`). Max 100 characters."
                        },
                        "VariantValue5": {
                          "type": "string",
                          "description": "Value of variant attribute 5 (e.g. `M`). Max 100 characters."
                        },
                        "VariantValue6": {
                          "type": "string",
                          "description": "Value of variant attribute 6 (e.g. `M`). Max 100 characters."
                        },
                        "Code2": {
                          "type": "string",
                          "description": "Secondary variant code. Max 50 characters. If empty, the variant's position in the array (`0`, `1`, `2`…) is stored."
                        },
                        "Mpn": {
                          "type": "string",
                          "description": "Variant manufacturer part number. Max 50 characters."
                        }
                      }
                    },
                    "description": "Variant list. When sent, variants are matched by `Code`: matches are updated, new codes are added without an image, and existing variants missing from the list are made passive. Empty or omitted leaves variants untouched. Image fields (`ImageUrl`, `ImageBase64`) are ignored."
                  },
                  "Specs": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "Name": {
                          "type": "string",
                          "description": "Spec name (e.g. `Material`). Max 50 characters."
                        },
                        "Value": {
                          "type": "string",
                          "description": "Spec value (e.g. `Cotton`). Max 100 characters."
                        }
                      }
                    },
                    "description": "Product specs. When sent, the whole stored spec list is replaced; when omitted, stored specs are kept."
                  },
                  "UpdateProductByCode": {
                    "type": "boolean",
                    "description": "When `true`, `ProductId` is not needed; the product is found by `ProductSourceId` + `Code`. Returns 70005 if not found. Default `false`."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductSourceId",
                  "Code",
                  "Name",
                  "Category",
                  "Price",
                  "CurrencyId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 987654,
                "ProductSourceId": 1234,
                "Code": "TSHIRT-001",
                "Name": "Basic Pamuklu Tişört",
                "Category": "Tişört",
                "Price": 229.9,
                "MarketPrice": 299.9,
                "CurrencyId": 4,
                "TaxRate": 20,
                "Quantity": 25,
                "Barcode": "8690000000017",
                "Brand": "Örnek Marka",
                "Model": "BSC-01",
                "Description": "<p>%100 pamuk, regular fit.</p>",
                "DispatchPeriod": 2,
                "Volume": 1,
                "VariantName1": "Renk",
                "VariantName2": "Beden",
                "Variants": [
                  {
                    "Code": "TSHIRT-001-BLK-M",
                    "Barcode": "8690000000024",
                    "Quantity": 5,
                    "Price": 229.9,
                    "VariantValue1": "Siyah",
                    "VariantValue2": "M"
                  },
                  {
                    "Code": "TSHIRT-001-BLK-L",
                    "Barcode": "8690000000031",
                    "Quantity": 20,
                    "Price": 229.9,
                    "VariantValue1": "Siyah",
                    "VariantValue2": "L"
                  }
                ],
                "Specs": [
                  {
                    "Name": "Materyal",
                    "Value": "Pamuk"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "Response": {
                              "type": "integer",
                              "description": "The updated product's `ProductId`."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": 987654
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/DeleteProduct": {
      "post": {
        "operationId": "DeleteProduct",
        "tags": [
          "Products"
        ],
        "summary": "Delete a product (removed)",
        "description": "**Delete a product (removed)** — This endpoint was removed on 1 July 2025 and returns HTTP 410 for every call.\n\nAs long as the body is valid JSON, HTTP 410 (Gone) is returned without checking `ApiCode` or the package. An empty or malformed body gets the ASP.NET 400 error first. The response body has no `ErrorCode` and the message is Turkish only.\n\nProducts can no longer be deleted through the API. To take a product off sale, use `StopProduct` or send `Quantity: 0` with `UpdateProduct`.\n\n⚠ This endpoint changes real data in your account.\n\nhttps://outsample.stockmount.com/en/api/Product/DeleteProduct",
        "deprecated": true,
        "responses": {
          "410": {
            "description": "Removed"
          }
        }
      }
    },
    "/api/Product/StopProduct": {
      "post": {
        "operationId": "StopProduct",
        "tags": [
          "Products"
        ],
        "summary": "Stop a product",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "ID of the product to stop. A value below 1 returns 00003 (`ErrorMessage`: `ProductId`)."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 987654
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/GetProduct": {
      "post": {
        "operationId": "GetProduct",
        "tags": [
          "Products"
        ],
        "summary": "Get a product",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "Product ID. When sent, the other lookup fields are ignored."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code. Used when `ProductId` is not sent; matched exactly."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "Required when querying by `Code`: the source to search."
                  }
                },
                "required": [
                  "ApiCode"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 987654
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "Product ID."
                            },
                            "ProductSourceId": {
                              "type": "integer",
                              "description": "Source of the product."
                            },
                            "Code": {
                              "type": "string",
                              "description": "Product code."
                            },
                            "Code2": {
                              "type": "string",
                              "description": "Secondary product code."
                            },
                            "Name": {
                              "type": "string",
                              "description": "Product name."
                            },
                            "Subtitle": {
                              "type": "string",
                              "description": "Subtitle."
                            },
                            "Description": {
                              "type": "string",
                              "description": "Description (HTML, cleaned)."
                            },
                            "Barcode": {
                              "type": "string",
                              "description": "Barcode. If a second (integration-level) barcode is set for the product, that one is returned."
                            },
                            "Brand": {
                              "type": "string",
                              "description": "Brand."
                            },
                            "Model": {
                              "type": "string",
                              "description": "Model."
                            },
                            "Category": {
                              "type": "string",
                              "description": "Category name."
                            },
                            "Price": {
                              "type": "number",
                              "description": "Sale price."
                            },
                            "MarketPrice": {
                              "type": "number",
                              "description": "Market (list) price; 0 if none."
                            },
                            "CurrencyId": {
                              "type": "integer",
                              "description": "Currency ID."
                            },
                            "TaxRate": {
                              "type": "number",
                              "description": "VAT rate; 0 if none."
                            },
                            "Quantity": {
                              "type": "integer",
                              "description": "Stock quantity."
                            },
                            "SoldCount": {
                              "type": "integer",
                              "description": "Sold count."
                            },
                            "Status": {
                              "type": "integer",
                              "description": "Product status.\n\n- `0`: Not changed\n- `1`: New (initial status of products added through the API)\n- `2`: Changed (after `UpdateProduct` when stock is above 0)\n- `3`: Stopped / out of stock (`StopProduct`, or stock below 1)\n- `4`: Re-added"
                            },
                            "Volume": {
                              "type": "number",
                              "description": "Volume / desi (the second value if one is set)."
                            },
                            "Width": {
                              "type": "number",
                              "description": "Width."
                            },
                            "Length": {
                              "type": "number",
                              "description": "Length."
                            },
                            "Height": {
                              "type": "number",
                              "description": "Height."
                            },
                            "Weight": {
                              "type": "number",
                              "description": "Always 0 (the stored value is not returned)."
                            },
                            "Url": {
                              "type": "string",
                              "description": "Product page URL; empty if none."
                            },
                            "CreationTime": {
                              "type": "string",
                              "description": "Creation time without a time zone suffix (e.g. `2025-11-05T10:22:31.497`)."
                            },
                            "VariantName1": {
                              "type": "string",
                              "description": "Name of variant attribute 1 (`VariantName2`–`VariantName4` are returned too; 5 and 6 are not)."
                            },
                            "DispatchPeriod": {
                              "type": "integer",
                              "description": "Dispatch time in days; -1 = not set."
                            },
                            "SellerNote": {
                              "type": "string",
                              "description": "Seller note."
                            },
                            "Images": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Order": {
                                    "type": "integer",
                                    "description": "Zero-based position."
                                  },
                                  "Url": {
                                    "type": "string",
                                    "description": "Image URL."
                                  }
                                }
                              },
                              "description": "Images, up to 12."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  },
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "Barcode": {
                                    "type": "string",
                                    "description": "Variant barcode."
                                  },
                                  "Price": {
                                    "type": "number",
                                    "description": "Variant price."
                                  },
                                  "Quantity": {
                                    "type": "integer",
                                    "description": "Variant stock."
                                  },
                                  "ImageUrl": {
                                    "type": "string",
                                    "description": "Variant image URL."
                                  },
                                  "VariantValue1": {
                                    "type": "string",
                                    "description": "Value of variant attribute 1."
                                  },
                                  "VariantValue2": {
                                    "type": "string",
                                    "description": "Value of variant attribute 2."
                                  },
                                  "VariantValue3": {
                                    "type": "string",
                                    "description": "Value of variant attribute 3."
                                  },
                                  "VariantValue4": {
                                    "type": "string",
                                    "description": "Value of variant attribute 4."
                                  },
                                  "CurrencyId": {
                                    "type": "integer",
                                    "description": "Always 0 (not read)."
                                  },
                                  "MinSalePrice": {
                                    "type": "number",
                                    "description": "Always 0 (not read)."
                                  },
                                  "Price2": {
                                    "type": "number",
                                    "description": "Always 0 (so are `Price3`, `Price4`, `Price5`)."
                                  }
                                }
                              },
                              "description": "Variants. Filled only when queried by `ProductId`; passive variants are included."
                            },
                            "Specs": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Name": {
                                    "type": "string",
                                    "description": "Spec name."
                                  },
                                  "Value": {
                                    "type": "string",
                                    "description": "Spec value."
                                  }
                                }
                              },
                              "description": "Specs. Returned only when queried by `ProductId`."
                            },
                            "StoreId": {
                              "type": "integer",
                              "description": "Always 0 (request-only field)."
                            },
                            "Price2": {
                              "type": "number",
                              "description": "Always 0 (so are `Price3`, `Price4`, `Price5`)."
                            },
                            "UpdateProductByCode": {
                              "type": "boolean",
                              "description": "Always `false` (request-only field)."
                            },
                            "SetProductQuantityFromVariants": {
                              "type": "boolean",
                              "description": "Always `false` (request-only field)."
                            },
                            "UpdateProductDescription": {
                              "type": "boolean",
                              "description": "Always `true` (request-only field)."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 987654,
                    "ProductSourceId": 1234,
                    "Description": "<p>%100 pamuk, regular fit.</p>",
                    "Code": "TSHIRT-001",
                    "Code2": "",
                    "Barcode": "8690000000017",
                    "Name": "Basic Pamuklu Tişört",
                    "Subtitle": "",
                    "Price": 249.9,
                    "Quantity": 30,
                    "Brand": "Örnek Marka",
                    "TaxRate": 20.0,
                    "Model": "BSC-01",
                    "Category": "Tişört",
                    "CurrencyId": 4,
                    "Images": [
                      {
                        "Order": 0,
                        "Url": "https://cdn.example.com/tshirt-001-1.jpg"
                      },
                      {
                        "Order": 1,
                        "Url": "https://cdn.example.com/tshirt-001-2.jpg"
                      }
                    ],
                    "MarketPrice": 299.9,
                    "Status": 1,
                    "Volume": 1.0,
                    "Height": 0.0,
                    "Length": 0.0,
                    "Width": 0.0,
                    "VariantName1": "Renk",
                    "VariantName2": "Beden",
                    "Variants": [
                      {
                        "ProductVariantId": 5550001,
                        "Code": "TSHIRT-001-BLK-M",
                        "Price": 249.9,
                        "Price2": 0.0,
                        "Price3": 0.0,
                        "Price4": 0.0,
                        "Price5": 0.0,
                        "Quantity": 10,
                        "Barcode": "8690000000024",
                        "CurrencyId": 0,
                        "ImageUrl": "",
                        "VariantValue1": "Siyah",
                        "VariantValue2": "M",
                        "VariantValue3": "",
                        "VariantValue4": "",
                        "MinSalePrice": 0.0
                      }
                    ],
                    "Specs": [
                      {
                        "Name": "Materyal",
                        "Value": "Pamuk"
                      }
                    ],
                    "Url": "",
                    "StoreId": 0,
                    "Weight": 0.0,
                    "CreationTime": "2025-11-05T10:22:31.497",
                    "UpdateProductByCode": false,
                    "SetProductQuantityFromVariants": false,
                    "DispatchPeriod": 2,
                    "Price2": 0.0,
                    "Price3": 0.0,
                    "Price4": 0.0,
                    "Price5": 0.0,
                    "UpdateProductDescription": true,
                    "SoldCount": 0,
                    "SellerNote": ""
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/GetProducts": {
      "post": {
        "operationId": "GetProducts",
        "tags": [
          "Products"
        ],
        "summary": "List products",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "Source to list. A value below 1 returns 00003 (`ErrorMessage`: `ProductSourceId`)."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "Filter by one product ID. 0 = no filter."
                  },
                  "ProductCode": {
                    "type": "string",
                    "description": "Product code, exact match. Max 50 characters."
                  },
                  "Keywords": {
                    "type": "string",
                    "description": "Search in the product name; spaces act as wildcards."
                  },
                  "ProductCategory": {
                    "type": "string",
                    "description": "Category name, exact match."
                  },
                  "PriceFrom": {
                    "type": "number",
                    "description": "Minimum price (inclusive). 0 = no filter."
                  },
                  "PriceTo": {
                    "type": "number",
                    "description": "Maximum price (inclusive). 0 = no filter."
                  },
                  "QuantityFrom": {
                    "type": "integer",
                    "description": "Minimum stock (inclusive). 0 = no filter."
                  },
                  "QuantityTo": {
                    "type": "integer",
                    "description": "Maximum stock (inclusive). 0 = no filter."
                  },
                  "CurrencyId": {
                    "type": "integer",
                    "description": "Currency ID. 0 = no filter."
                  },
                  "ProductStatus": {
                    "type": "integer",
                    "description": "Product status filter. Default -1 (all).\n\n- `-1`: All (default)\n- `0`: Not changed\n- `1`: New\n- `2`: Changed\n- `3`: Stopped / out of stock\n- `4`: Re-added\n- `99`: All except 3 (products that are not stopped)"
                  },
                  "CreationTimeFrom": {
                    "type": "string",
                    "description": "Created at or after this time. `yyyy-MM-ddTHH:mm:ss`, no time zone suffix. Ignored if the year is 2010 or earlier."
                  },
                  "CreationTimeTo": {
                    "type": "string",
                    "description": "Created at or before this time. Same format and rule as `CreationTimeFrom`."
                  },
                  "PageIndex": {
                    "type": "integer",
                    "description": "Page number, starting at 1. Default 1."
                  },
                  "RowsByPage": {
                    "type": "integer",
                    "description": "Page size. Default 100, max 100."
                  },
                  "OrderBy": {
                    "type": "string",
                    "description": "Sort field. Default `ProductId`.\n\n- `Name`: Product name\n- `ProductId`: Product ID (default)\n- `Category`: Category name\n- `Price`: Price\n- `Quantity`: Stock\n- `Status`: Status\n- `CurrencyId`: Currency"
                  },
                  "OrderDirection": {
                    "type": "string",
                    "description": "Sort direction. Default `ASC`.\n\n- `ASC`: Ascending (default)\n- `DESC`: Descending"
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductSourceId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductSourceId": 1234,
                "Keywords": "tişört",
                "ProductStatus": 99,
                "CreationTimeFrom": "2025-10-01T00:00:00",
                "PageIndex": 1,
                "RowsByPage": 50,
                "OrderBy": "Name",
                "OrderDirection": "ASC"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "TotalProductCount": {
                              "type": "integer",
                              "description": "Total products in the source (ignores filters)."
                            },
                            "FilteredProductCount": {
                              "type": "integer",
                              "description": "Number of products matching the filters."
                            },
                            "Products": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "ProductId": {
                                    "type": "integer",
                                    "description": "Product ID."
                                  },
                                  "ProductSourceId": {
                                    "type": "integer",
                                    "description": "Source ID."
                                  },
                                  "Category": {
                                    "type": "string",
                                    "description": "Category name."
                                  },
                                  "Code": {
                                    "type": "string",
                                    "description": "Product code."
                                  },
                                  "Code2": {
                                    "type": "string",
                                    "description": "Secondary product code; empty if none."
                                  },
                                  "Name": {
                                    "type": "string",
                                    "description": "Product name."
                                  },
                                  "TaxRate": {
                                    "type": "number",
                                    "description": "VAT rate; 0 if none."
                                  },
                                  "Quantity": {
                                    "type": "integer",
                                    "description": "Stock quantity."
                                  },
                                  "SoldCount": {
                                    "type": "integer",
                                    "description": "Sold count."
                                  },
                                  "Price": {
                                    "type": "number",
                                    "description": "Sale price."
                                  },
                                  "Subtitle": {
                                    "type": "string",
                                    "description": "Subtitle."
                                  },
                                  "Volume": {
                                    "type": "number",
                                    "description": "Volume / desi (the second value if one is set)."
                                  },
                                  "Brand": {
                                    "type": "string",
                                    "description": "Brand."
                                  },
                                  "Barcode": {
                                    "type": "string",
                                    "description": "The product's own barcode."
                                  },
                                  "Status": {
                                    "type": "integer",
                                    "description": "Product status.\n\n- `0`: Not changed\n- `1`: New (initial status of products added through the API)\n- `2`: Changed (after `UpdateProduct` when stock is above 0)\n- `3`: Stopped / out of stock (`StopProduct`, or stock below 1)\n- `4`: Re-added"
                                  },
                                  "CreationTime": {
                                    "type": "string",
                                    "description": "Creation time, no time zone suffix."
                                  },
                                  "CurrencyId": {
                                    "type": "integer",
                                    "description": "Currency ID."
                                  },
                                  "MarketPrice": {
                                    "type": "number",
                                    "description": "Market (list) price; 0 if none."
                                  },
                                  "Image": {
                                    "type": "string",
                                    "description": "First image URL; empty if none."
                                  },
                                  "Currency": {
                                    "type": "string",
                                    "description": "Currency code (e.g. `TRY`, `USD`); `NON` is returned as `TRY`."
                                  },
                                  "SellerNote": {
                                    "type": "string",
                                    "description": "Seller note; empty if none."
                                  }
                                }
                              },
                              "description": "Products on this page."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "TotalProductCount": 152,
                    "FilteredProductCount": 1,
                    "Products": [
                      {
                        "ProductId": 987654,
                        "ProductSourceId": 1234,
                        "Category": "Tişört",
                        "Code": "TSHIRT-001",
                        "Code2": "",
                        "Name": "Basic Pamuklu Tişört",
                        "TaxRate": 20.0,
                        "Quantity": 30,
                        "SoldCount": 4,
                        "Price": 249.9,
                        "Subtitle": "",
                        "Volume": 1.0,
                        "Brand": "Örnek Marka",
                        "Barcode": "8690000000017",
                        "Status": 1,
                        "CreationTime": "2025-11-05T10:22:31.497",
                        "CurrencyId": 4,
                        "MarketPrice": 299.9,
                        "Image": "https://cdn.example.com/tshirt-001-1.jpg",
                        "Currency": "TRY",
                        "SellerNote": ""
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/GetProductSummary": {
      "post": {
        "operationId": "GetProductSummary",
        "tags": [
          "Products"
        ],
        "summary": "Get the product summary",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "Source ID. A value below 1 returns 00003 (`ErrorMessage`: `ProductSourceId`)."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductSourceId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductSourceId": 1234
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "TotalProductCount": {
                              "type": "integer",
                              "description": "Number of returned products."
                            },
                            "FilteredProductCount": {
                              "type": "integer",
                              "description": "Same as `TotalProductCount`."
                            },
                            "Products": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "ProductId": {
                                    "type": "integer",
                                    "description": "Product ID."
                                  },
                                  "ProductSourceId": {
                                    "type": "integer",
                                    "description": "Source ID."
                                  },
                                  "Code": {
                                    "type": "string",
                                    "description": "Product code."
                                  },
                                  "Name": {
                                    "type": "string",
                                    "description": "Product name."
                                  },
                                  "Barcode": {
                                    "type": "string",
                                    "description": "Barcode; empty string if none."
                                  },
                                  "Status": {
                                    "type": "integer",
                                    "description": "Product status.\n\n- `0`: Not changed\n- `1`: New (initial status of products added through the API)\n- `2`: Changed (after `UpdateProduct` when stock is above 0)\n- `3`: Stopped / out of stock (`StopProduct`, or stock below 1)\n- `4`: Re-added"
                                  }
                                }
                              },
                              "description": "All products in the source."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "TotalProductCount": 2,
                    "FilteredProductCount": 2,
                    "Products": [
                      {
                        "ProductId": 987654,
                        "ProductSourceId": 1234,
                        "Code": "TSHIRT-001",
                        "Name": "Basic Pamuklu Tişört",
                        "Barcode": "8690000000017",
                        "Status": 2
                      },
                      {
                        "ProductId": 987655,
                        "ProductSourceId": 1234,
                        "Code": "PANT-002",
                        "Name": "Chino Pantolon",
                        "Barcode": "8690000000048",
                        "Status": 3
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/SetProductCode": {
      "post": {
        "operationId": "SetProductCode",
        "tags": [
          "Products"
        ],
        "summary": "Change a product code",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "ID of the product whose code changes. A value below 1 returns 00003 (`ErrorMessage`: `ProductId`)."
                  },
                  "Code": {
                    "type": "string",
                    "description": "New product code. Max 50 characters. Empty returns 00003 (`ErrorMessage`: `Code`)."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductId",
                  "Code"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 987654,
                "Code": "TSHIRT-001-V2"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductPrice": {
      "post": {
        "operationId": "UpdateProductPrice",
        "tags": [
          "Products"
        ],
        "summary": "Update product price (by ProductId)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "StockMount product ID. The product must belong to your account. `Code` is ignored by this endpoint."
                  },
                  "Price": {
                    "type": "number",
                    "description": "Sale price of the product. Stored with 2 decimal places. If omitted, `0` is written."
                  },
                  "MarketPrice": {
                    "type": "number",
                    "description": "Market (list) price. If omitted, `0` is written."
                  },
                  "Price2": {
                    "type": "number",
                    "description": "Product additional price 2. If omitted, `0` is written."
                  },
                  "Price3": {
                    "type": "number",
                    "description": "Product additional price 3. If omitted, `0` is written."
                  },
                  "Price4": {
                    "type": "number",
                    "description": "Product additional price 4. If omitted, `0` is written."
                  },
                  "Price5": {
                    "type": "number",
                    "description": "Product additional price 5. If omitted, `0` is written."
                  },
                  "CurrencyId": {
                    "type": "integer",
                    "description": "Currency ID (`GetCurrencies`). If greater than 0, the currency of the product and of the updated variants is set to this value. If omitted or `0`, the currency is unchanged."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Code`."
                        },
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Used for matching when `ProductVariantId` is not set."
                        },
                        "Price": {
                          "type": "number",
                          "description": "Variant sale price. If omitted, `0` is written."
                        },
                        "Price2": {
                          "type": "number",
                          "description": "Variant additional price 2. If omitted, `0` is written."
                        },
                        "Price3": {
                          "type": "number",
                          "description": "Variant additional price 3. If omitted, `0` is written."
                        },
                        "Price4": {
                          "type": "number",
                          "description": "Variant additional price 4. If omitted, `0` is written."
                        },
                        "Price5": {
                          "type": "number",
                          "description": "Variant additional price 5. If omitted, `0` is written."
                        }
                      }
                    },
                    "description": "Variants to update. Only listed variants change; entries that do not match are skipped without an error."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 184522,
                "Price": 349.9,
                "MarketPrice": 449.9,
                "Price2": 329.9,
                "Price3": 0,
                "Price4": 0,
                "Price5": 0,
                "Variants": [
                  {
                    "ProductVariantId": 9120344,
                    "Price": 349.9,
                    "Price2": 329.9
                  },
                  {
                    "Code": "TSHIRT-RED-L",
                    "Price": 359.9,
                    "Price2": 339.9
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": [
                      {
                        "Code": "TSHIRT-RED-M",
                        "ProductVariantId": 9120344
                      },
                      {
                        "Code": "TSHIRT-RED-L",
                        "ProductVariantId": 9120345
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductPriceByCode": {
      "post": {
        "operationId": "UpdateProductPriceByCode",
        "tags": [
          "Products"
        ],
        "summary": "Update product price (by product code)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code (SKU), up to 50 characters. The product is looked up by `Code` together with `ProductSourceId`. `ProductId` is ignored by this endpoint."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "ID of the product source the product belongs to (`GetProductSources`). `Code` is looked up within this source."
                  },
                  "Price": {
                    "type": "number",
                    "description": "Sale price of the product. Stored with 2 decimal places. If omitted, `0` is written."
                  },
                  "MarketPrice": {
                    "type": "number",
                    "description": "Market (list) price. If omitted, `0` is written."
                  },
                  "Price2": {
                    "type": "number",
                    "description": "Product additional price 2. If omitted, `0` is written."
                  },
                  "Price3": {
                    "type": "number",
                    "description": "Product additional price 3. If omitted, `0` is written."
                  },
                  "Price4": {
                    "type": "number",
                    "description": "Product additional price 4. If omitted, `0` is written."
                  },
                  "Price5": {
                    "type": "number",
                    "description": "Product additional price 5. If omitted, `0` is written."
                  },
                  "CurrencyId": {
                    "type": "integer",
                    "description": "Currency ID (`GetCurrencies`). If greater than 0, the currency of the product and of the updated variants is set to this value. If omitted or `0`, the currency is unchanged."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Code`."
                        },
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Used for matching when `ProductVariantId` is not set."
                        },
                        "Price": {
                          "type": "number",
                          "description": "Variant sale price. If omitted, `0` is written."
                        },
                        "Price2": {
                          "type": "number",
                          "description": "Variant additional price 2. If omitted, `0` is written."
                        },
                        "Price3": {
                          "type": "number",
                          "description": "Variant additional price 3. If omitted, `0` is written."
                        },
                        "Price4": {
                          "type": "number",
                          "description": "Variant additional price 4. If omitted, `0` is written."
                        },
                        "Price5": {
                          "type": "number",
                          "description": "Variant additional price 5. If omitted, `0` is written."
                        }
                      }
                    },
                    "description": "Variants to update. Only listed variants change; entries that do not match are skipped without an error."
                  }
                },
                "required": [
                  "ApiCode",
                  "Code",
                  "ProductSourceId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "Code": "TSHIRT-RED",
                "ProductSourceId": 3051,
                "Price": 349.9,
                "MarketPrice": 449.9,
                "Price2": 329.9,
                "Price3": 0,
                "Price4": 0,
                "Price5": 0,
                "Variants": [
                  {
                    "ProductVariantId": 9120344,
                    "Price": 349.9,
                    "Price2": 329.9
                  },
                  {
                    "Code": "TSHIRT-RED-L",
                    "Price": 359.9,
                    "Price2": 339.9
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": [
                      {
                        "Code": "TSHIRT-RED-M",
                        "ProductVariantId": 9120344
                      },
                      {
                        "Code": "TSHIRT-RED-L",
                        "ProductVariantId": 9120345
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductQuantity": {
      "post": {
        "operationId": "UpdateProductQuantity",
        "tags": [
          "Products"
        ],
        "summary": "Update product stock (by ProductId)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "StockMount product ID. The product must belong to your account. `Code` is ignored by this endpoint."
                  },
                  "Quantity": {
                    "type": "integer",
                    "description": "New stock quantity of the product. If omitted, `0` is written. Ignored when `SetProductQuantityFromVariants` is `true` and `Variants` has at least one item. Negative values are not rejected."
                  },
                  "SetProductQuantityFromVariants": {
                    "type": "boolean",
                    "description": "If `true`, the product stock is computed as the sum of its active variants: the new quantity for variants in the list, the current available stock for the other variants. Has no effect when `Variants` is empty. Default `false`."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Code`."
                        },
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Used for matching when `ProductVariantId` is not set."
                        },
                        "Quantity": {
                          "type": "integer",
                          "description": "New stock quantity of the variant. If omitted, `0` is written. Negative values are not rejected."
                        }
                      }
                    },
                    "description": "Variants to update. Only listed variants change; entries that do not match are skipped without an error."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 184522,
                "SetProductQuantityFromVariants": true,
                "Variants": [
                  {
                    "ProductVariantId": 9120344,
                    "Quantity": 15
                  },
                  {
                    "Code": "TSHIRT-RED-L",
                    "Quantity": 0
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": [
                      {
                        "Code": "TSHIRT-RED-M",
                        "ProductVariantId": 9120344
                      },
                      {
                        "Code": "TSHIRT-RED-L",
                        "ProductVariantId": 9120345
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductQuantityByCode": {
      "post": {
        "operationId": "UpdateProductQuantityByCode",
        "tags": [
          "Products"
        ],
        "summary": "Update product stock (by product code)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code (SKU), up to 50 characters. The product is looked up by `Code` together with `ProductSourceId`. `ProductId` is ignored by this endpoint."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "ID of the product source the product belongs to (`GetProductSources`). `Code` is looked up within this source."
                  },
                  "Quantity": {
                    "type": "integer",
                    "description": "New stock quantity of the product. If omitted, `0` is written. Ignored when `SetProductQuantityFromVariants` is `true` and `Variants` has at least one item. Negative values are not rejected."
                  },
                  "SetProductQuantityFromVariants": {
                    "type": "boolean",
                    "description": "If `true`, the product stock is computed as the sum of its active variants: the new quantity for variants in the list, the current available stock for the other variants. Has no effect when `Variants` is empty. Default `false`."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Code`."
                        },
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Used for matching when `ProductVariantId` is not set."
                        },
                        "Quantity": {
                          "type": "integer",
                          "description": "New stock quantity of the variant. If omitted, `0` is written. Negative values are not rejected."
                        }
                      }
                    },
                    "description": "Variants to update. Only listed variants change; entries that do not match are skipped without an error."
                  }
                },
                "required": [
                  "ApiCode",
                  "Code",
                  "ProductSourceId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "Code": "TSHIRT-RED",
                "ProductSourceId": 3051,
                "SetProductQuantityFromVariants": true,
                "Variants": [
                  {
                    "ProductVariantId": 9120344,
                    "Quantity": 15
                  },
                  {
                    "Code": "TSHIRT-RED-L",
                    "Quantity": 0
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": [
                      {
                        "Code": "TSHIRT-RED-M",
                        "ProductVariantId": 9120344
                      },
                      {
                        "Code": "TSHIRT-RED-L",
                        "ProductVariantId": 9120345
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductQuantityByBarcode": {
      "post": {
        "operationId": "UpdateProductQuantityByBarcode",
        "tags": [
          "Products"
        ],
        "summary": "Update variant stock by barcode",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code (SKU), up to 50 characters. The product is looked up by `Code` together with `ProductSourceId`. `ProductId` is ignored by this endpoint."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "ID of the product source the product belongs to (`GetProductSources`). `Code` is looked up within this source."
                  },
                  "Quantity": {
                    "type": "integer",
                    "description": "New stock quantity of the product. If omitted, `0` is written. Ignored when `SetProductQuantityFromVariants` is `true` and `Variants` has at least one item. Negative values are not rejected."
                  },
                  "SetProductQuantityFromVariants": {
                    "type": "boolean",
                    "description": "If `true`, the product stock is computed as the sum of its variants: the new quantity for active variants in the list, the current available stock for all other variants (passive ones included). Has no effect when `Variants` is empty. Default `false`."
                  },
                  "Price2": {
                    "type": "number",
                    "description": "Product additional price 2. Although this is a stock endpoint, it writes this field to the product; if omitted it becomes `0`. Send the current value."
                  },
                  "Price3": {
                    "type": "number",
                    "description": "Product additional price 3. Although this is a stock endpoint, it writes this field to the product; if omitted it becomes `0`. Send the current value."
                  },
                  "Price4": {
                    "type": "number",
                    "description": "Product additional price 4. Although this is a stock endpoint, it writes this field to the product; if omitted it becomes `0`. Send the current value."
                  },
                  "Price5": {
                    "type": "number",
                    "description": "Product additional price 5. Although this is a stock endpoint, it writes this field to the product; if omitted it becomes `0`. Send the current value."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Barcode`."
                        },
                        "Barcode": {
                          "type": "string",
                          "description": "Variant barcode. When `ProductVariantId` is not set, the variant is looked up by this barcode among this product's variants only. Leading and trailing spaces are trimmed."
                        },
                        "Quantity": {
                          "type": "integer",
                          "description": "New stock quantity of the variant. If omitted, `0` is written. Negative values are not rejected."
                        }
                      }
                    },
                    "description": "Variants to update. Only listed variants change; entries that do not match are skipped without an error."
                  }
                },
                "required": [
                  "ApiCode",
                  "Code",
                  "ProductSourceId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "Code": "TSHIRT-RED",
                "ProductSourceId": 3051,
                "SetProductQuantityFromVariants": true,
                "Price2": 329.9,
                "Price3": 0,
                "Price4": 0,
                "Price5": 0,
                "Variants": [
                  {
                    "Barcode": "8690000000017",
                    "Quantity": 15
                  },
                  {
                    "Barcode": "8690000000024",
                    "Quantity": 0
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": [
                      {
                        "Code": "TSHIRT-RED-M",
                        "ProductVariantId": 9120344
                      },
                      {
                        "Code": "TSHIRT-RED-L",
                        "ProductVariantId": 9120345
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductQuantityAndPrice": {
      "post": {
        "operationId": "UpdateProductQuantityAndPrice",
        "tags": [
          "Products"
        ],
        "summary": "Update product stock and price (by ProductId)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "StockMount product ID. The product must belong to your account. `Code` is ignored by this endpoint."
                  },
                  "Quantity": {
                    "type": "integer",
                    "description": "New stock quantity of the product. If omitted, `0` is written. Ignored when `SetProductQuantityFromVariants` is `true` and `Variants` has at least one item. Negative values are not rejected."
                  },
                  "SetProductQuantityFromVariants": {
                    "type": "boolean",
                    "description": "If `true`, the product stock is computed as the sum of its active variants: the new quantity for variants in the list, the current available stock for the other variants. Has no effect when `Variants` is empty. Default `false`."
                  },
                  "Price": {
                    "type": "number",
                    "description": "Sale price of the product. Stored with 2 decimal places. If omitted, `0` is written."
                  },
                  "MarketPrice": {
                    "type": "number",
                    "description": "Market (list) price. If omitted, `0` is written."
                  },
                  "Price2": {
                    "type": "number",
                    "description": "Product additional price 2. If omitted, `0` is written."
                  },
                  "Price3": {
                    "type": "number",
                    "description": "Product additional price 3. If omitted, `0` is written."
                  },
                  "Price4": {
                    "type": "number",
                    "description": "Product additional price 4. If omitted, `0` is written."
                  },
                  "Price5": {
                    "type": "number",
                    "description": "Product additional price 5. If omitted, `0` is written."
                  },
                  "CurrencyId": {
                    "type": "integer",
                    "description": "Currency ID (`GetCurrencies`). If greater than 0, the currency of the product and of the updated variants is set to this value. If omitted or `0`, the currency is unchanged."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Code`."
                        },
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Used for matching when `ProductVariantId` is not set."
                        },
                        "Quantity": {
                          "type": "integer",
                          "description": "New stock quantity of the variant. If omitted, `0` is written. Negative values are not rejected."
                        },
                        "Price": {
                          "type": "number",
                          "description": "Variant sale price. If omitted, `0` is written."
                        },
                        "Price2": {
                          "type": "number",
                          "description": "Variant additional price 2. If omitted, `0` is written."
                        },
                        "Price3": {
                          "type": "number",
                          "description": "Variant additional price 3. If omitted, `0` is written."
                        },
                        "Price4": {
                          "type": "number",
                          "description": "Variant additional price 4. If omitted, `0` is written."
                        },
                        "Price5": {
                          "type": "number",
                          "description": "Variant additional price 5. If omitted, `0` is written."
                        }
                      }
                    },
                    "description": "Variants to update. Only listed variants change; entries that do not match are skipped without an error."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 184522,
                "SetProductQuantityFromVariants": true,
                "Price": 349.9,
                "MarketPrice": 449.9,
                "Price2": 329.9,
                "Price3": 0,
                "Price4": 0,
                "Price5": 0,
                "Variants": [
                  {
                    "ProductVariantId": 9120344,
                    "Quantity": 15,
                    "Price": 349.9,
                    "Price2": 329.9
                  },
                  {
                    "Code": "TSHIRT-RED-L",
                    "Quantity": 0,
                    "Price": 359.9,
                    "Price2": 339.9
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": [
                      {
                        "Code": "TSHIRT-RED-M",
                        "ProductVariantId": 9120344
                      },
                      {
                        "Code": "TSHIRT-RED-L",
                        "ProductVariantId": 9120345
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductQuantityAndPriceByCode": {
      "post": {
        "operationId": "UpdateProductQuantityAndPriceByCode",
        "tags": [
          "Products"
        ],
        "summary": "Update product stock and price (by product code)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code (SKU), up to 50 characters. The product is looked up by `Code` together with `ProductSourceId`. `ProductId` is ignored by this endpoint."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "ID of the product source the product belongs to (`GetProductSources`). `Code` is looked up within this source."
                  },
                  "Quantity": {
                    "type": "integer",
                    "description": "New stock quantity of the product. If omitted, `0` is written. Ignored when `SetProductQuantityFromVariants` is `true` and `Variants` has at least one item. Negative values are not rejected."
                  },
                  "SetProductQuantityFromVariants": {
                    "type": "boolean",
                    "description": "If `true`, the product stock is computed as the sum of its active variants: the new quantity for variants in the list, the current available stock for the other variants. Has no effect when `Variants` is empty. Default `false`."
                  },
                  "Price": {
                    "type": "number",
                    "description": "Sale price of the product. Stored with 2 decimal places. If omitted, `0` is written."
                  },
                  "MarketPrice": {
                    "type": "number",
                    "description": "Market (list) price. If omitted, `0` is written."
                  },
                  "Price2": {
                    "type": "number",
                    "description": "Product additional price 2. If omitted, `0` is written."
                  },
                  "Price3": {
                    "type": "number",
                    "description": "Product additional price 3. If omitted, `0` is written."
                  },
                  "Price4": {
                    "type": "number",
                    "description": "Product additional price 4. If omitted, `0` is written."
                  },
                  "Price5": {
                    "type": "number",
                    "description": "Product additional price 5. If omitted, `0` is written."
                  },
                  "CurrencyId": {
                    "type": "integer",
                    "description": "Currency ID (`GetCurrencies`). If greater than 0, the currency of the product and of the updated variants is set to this value. If omitted or `0`, the currency is unchanged."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Code`."
                        },
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Used for matching when `ProductVariantId` is not set."
                        },
                        "Quantity": {
                          "type": "integer",
                          "description": "New stock quantity of the variant. If omitted, `0` is written. Negative values are not rejected."
                        },
                        "Price": {
                          "type": "number",
                          "description": "Variant sale price. If omitted, `0` is written."
                        },
                        "Price2": {
                          "type": "number",
                          "description": "Variant additional price 2. If omitted, `0` is written."
                        },
                        "Price3": {
                          "type": "number",
                          "description": "Variant additional price 3. If omitted, `0` is written."
                        },
                        "Price4": {
                          "type": "number",
                          "description": "Variant additional price 4. If omitted, `0` is written."
                        },
                        "Price5": {
                          "type": "number",
                          "description": "Variant additional price 5. If omitted, `0` is written."
                        }
                      }
                    },
                    "description": "Variants to update. Only listed variants change; entries that do not match are skipped without an error."
                  }
                },
                "required": [
                  "ApiCode",
                  "Code",
                  "ProductSourceId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "Code": "TSHIRT-RED",
                "ProductSourceId": 3051,
                "SetProductQuantityFromVariants": true,
                "Price": 349.9,
                "MarketPrice": 449.9,
                "Price2": 329.9,
                "Price3": 0,
                "Price4": 0,
                "Price5": 0,
                "Variants": [
                  {
                    "ProductVariantId": 9120344,
                    "Quantity": 15,
                    "Price": 349.9,
                    "Price2": 329.9
                  },
                  {
                    "Code": "TSHIRT-RED-L",
                    "Quantity": 0,
                    "Price": 359.9,
                    "Price2": 339.9
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": [
                      {
                        "Code": "TSHIRT-RED-M",
                        "ProductVariantId": 9120344
                      },
                      {
                        "Code": "TSHIRT-RED-L",
                        "ProductVariantId": 9120345
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductName": {
      "post": {
        "operationId": "UpdateProductName",
        "tags": [
          "Products"
        ],
        "summary": "Update product name (by ProductId)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "StockMount product ID. The product must belong to your account. `Code` is ignored by this endpoint."
                  },
                  "Name": {
                    "type": "string",
                    "description": "New product name. Must not be empty. Values longer than 400 characters are truncated."
                  }
                },
                "required": [
                  "ApiCode",
                  "ProductId",
                  "Name"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 184522,
                "Name": "Pamuklu Basic T-Shirt Kırmızı"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductNameByCode": {
      "post": {
        "operationId": "UpdateProductNameByCode",
        "tags": [
          "Products"
        ],
        "summary": "Update product name (by product code)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code (SKU), up to 50 characters. The product is looked up by `Code` together with `ProductSourceId`. `ProductId` is ignored by this endpoint."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "ID of the product source the product belongs to (`GetProductSources`). `Code` is looked up within this source."
                  },
                  "Name": {
                    "type": "string",
                    "description": "New product name. Must not be empty. Values longer than 400 characters are truncated."
                  }
                },
                "required": [
                  "ApiCode",
                  "Code",
                  "ProductSourceId",
                  "Name"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "Code": "TSHIRT-RED",
                "ProductSourceId": 3051,
                "Name": "Pamuklu Basic T-Shirt Kırmızı"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "ProductId": {
                              "type": "integer",
                              "description": "ID of the updated product."
                            },
                            "Variants": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "Code": {
                                    "type": "string",
                                    "description": "Variant code."
                                  },
                                  "ProductVariantId": {
                                    "type": "integer",
                                    "description": "Variant ID."
                                  }
                                }
                              },
                              "description": "Variants updated by this call. Empty array if you sent no variants."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "ProductId": 184522,
                    "Variants": []
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductImages": {
      "post": {
        "operationId": "UpdateProductImages",
        "tags": [
          "Products"
        ],
        "summary": "Update product images",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "StockMount product ID. If less than 1, the product is looked up by `Code` + `ProductSourceId`."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code. Required when `ProductId` is not sent."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "Product source ID (`GetProductSources`). Required when looking up by `Code`."
                  },
                  "Images": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "Url": {
                          "type": "string",
                          "description": "Image URL, up to 512 characters. If it starts with `//`, `http:` is prepended. Format and protocol are not checked by this call."
                        },
                        "Base64": {
                          "type": "string",
                          "description": "Used when `Url` is empty. Raw Base64 image data without a `data:` prefix. PNG and JPEG are recognised; anything else is saved with a `.png` extension."
                        }
                      }
                    },
                    "description": "The product's new image list. At least one item is required and the first item must have `Url` or `Base64`. At most 12 images are used; the rest are ignored. Order is the array order; the first image is the main image. The `Order` field on items is not read."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Code`."
                        },
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Used for matching when `ProductVariantId` is not set."
                        },
                        "ImageUrl": {
                          "type": "string",
                          "description": "Variant image URL, up to 512 characters. If it contains XML-special characters such as `&` or `<`, the variant image is not saved and no error is returned."
                        },
                        "ImageBase64": {
                          "type": "string",
                          "description": "Used when `ImageUrl` is empty. Raw Base64 image data without a `data:` prefix."
                        }
                      }
                    },
                    "description": "Optional variant images. A listed variant with no image gets its image cleared. Variants not in the list are not touched."
                  }
                },
                "required": [
                  "ApiCode",
                  "Images"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "ProductId": 184522,
                "Images": [
                  {
                    "Url": "https://cdn.example.com/p/184522-1.jpg"
                  },
                  {
                    "Url": "https://cdn.example.com/p/184522-2.jpg"
                  }
                ],
                "Variants": [
                  {
                    "Code": "TSHIRT-RED-M",
                    "ImageUrl": "https://cdn.example.com/p/184522-red-m.jpg"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "Response": {
                              "type": "integer",
                              "description": "`Response` is the ID of the updated product itself (a number)."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": 184522
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Product/UpdateProductImagesByCode": {
      "post": {
        "operationId": "UpdateProductImagesByCode",
        "tags": [
          "Products"
        ],
        "summary": "Update product images (by product code)",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "The API code returned by `User/DoLogin`."
                  },
                  "ProductId": {
                    "type": "integer",
                    "description": "StockMount product ID. If less than 1, the product is looked up by `Code` + `ProductSourceId`."
                  },
                  "Code": {
                    "type": "string",
                    "description": "Product code. Required when `ProductId` is not sent."
                  },
                  "ProductSourceId": {
                    "type": "integer",
                    "description": "Product source ID (`GetProductSources`). Required when looking up by `Code`."
                  },
                  "Images": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "Url": {
                          "type": "string",
                          "description": "Image URL, up to 512 characters. If it starts with `//`, `http:` is prepended. Format and protocol are not checked by this call."
                        },
                        "Base64": {
                          "type": "string",
                          "description": "Used when `Url` is empty. Raw Base64 image data without a `data:` prefix. PNG and JPEG are recognised; anything else is saved with a `.png` extension."
                        }
                      }
                    },
                    "description": "The product's new image list. At least one item is required and the first item must have `Url` or `Base64`. At most 12 images are used; the rest are ignored. Order is the array order; the first image is the main image. The `Order` field on items is not read."
                  },
                  "Variants": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "ProductVariantId": {
                          "type": "integer",
                          "description": "Variant ID. If omitted or `0`, the variant is matched by `Code`."
                        },
                        "Code": {
                          "type": "string",
                          "description": "Variant code. Used for matching when `ProductVariantId` is not set."
                        },
                        "ImageUrl": {
                          "type": "string",
                          "description": "Variant image URL, up to 512 characters. If it contains XML-special characters such as `&` or `<`, the variant image is not saved and no error is returned."
                        },
                        "ImageBase64": {
                          "type": "string",
                          "description": "Used when `ImageUrl` is empty. Raw Base64 image data without a `data:` prefix."
                        }
                      }
                    },
                    "description": "Optional variant images. A listed variant with no image gets its image cleared. Variants not in the list are not touched."
                  }
                },
                "required": [
                  "ApiCode",
                  "Images"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "Code": "TSHIRT-RED",
                "ProductSourceId": 3051,
                "Images": [
                  {
                    "Url": "https://cdn.example.com/p/184522-1.jpg"
                  },
                  {
                    "Base64": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
                  }
                ],
                "Variants": [
                  {
                    "ProductVariantId": 9120344,
                    "ImageUrl": "https://cdn.example.com/p/184522-red-m.jpg"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "Response": {
                              "type": "integer",
                              "description": "`Response` is the ID of the updated product itself (a number)."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": 184522
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/General/GetCurrencies": {
      "post": {
        "operationId": "GetCurrencies",
        "tags": [
          "General and lookups"
        ],
        "summary": "List currencies",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  }
                },
                "required": [
                  "ApiCode"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "CurrencyId": {
                                "type": "integer",
                                "description": "Currency ID."
                              },
                              "Code": {
                                "type": "string",
                                "description": "Currency code."
                              },
                              "Name": {
                                "type": "string",
                                "description": "Currency name."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": [
                    {
                      "CurrencyId": 2,
                      "Code": "USD",
                      "Name": "Amerikan Doları"
                    },
                    {
                      "CurrencyId": 3,
                      "Code": "EUR",
                      "Name": "Euro"
                    },
                    {
                      "CurrencyId": 4,
                      "Code": "TRY",
                      "Name": "Türk Lirası"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/GetStores": {
      "post": {
        "operationId": "GetStores",
        "tags": [
          "General and lookups"
        ],
        "summary": "List stores",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "IntegrationId": {
                    "type": "integer",
                    "description": "Optional. Returns only this integration's stores. If omitted or 0, all stores are returned."
                  }
                },
                "required": [
                  "ApiCode"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "IntegrationId": 14
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "StoreId": {
                                "type": "integer",
                                "description": "Store ID."
                              },
                              "StoreName": {
                                "type": "string",
                                "description": "Store name as shown in the panel. Can be empty."
                              },
                              "IntegrationId": {
                                "type": "integer",
                                "description": "ID of the integration the store belongs to."
                              },
                              "IntegrationName": {
                                "type": "string",
                                "description": "Integration name (e.g. `Trendyol`)."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": [
                    {
                      "StoreId": 1234,
                      "StoreName": "Örnek Mağaza",
                      "IntegrationId": 14,
                      "IntegrationName": "Trendyol"
                    },
                    {
                      "StoreId": 1240,
                      "StoreName": "Örnek Mağaza Outlet",
                      "IntegrationId": 14,
                      "IntegrationName": "Trendyol"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/GetIntegrationShipmentCompanies": {
      "post": {
        "operationId": "GetIntegrationShipmentCompanies",
        "tags": [
          "General and lookups"
        ],
        "summary": "List shipment companies",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "IntegrationId": {
                    "type": "integer",
                    "description": "Optional. ID of the integration whose shipment companies you want (`IntegrationId` from `GetStores`). If omitted or 0, all are returned."
                  }
                },
                "required": [
                  "ApiCode"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "IntegrationId": 2
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "IntegrationShipmentId": {
                                "type": "integer",
                                "description": "StockMount ID of the shipment company entry."
                              },
                              "IntegrationId": {
                                "type": "integer",
                                "description": "ID of the integration the company belongs to."
                              },
                              "Code": {
                                "type": "string",
                                "description": "Shipment company code on the marketplace. Send it as `ShipmentCompany` in `SetOrderShipmentInformation`."
                              },
                              "Name": {
                                "type": "string",
                                "description": "Shipment company name."
                              },
                              "ShortName": {
                                "type": "string",
                                "description": "Short name. Can be empty."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": [
                    {
                      "IntegrationShipmentId": 57,
                      "IntegrationId": 2,
                      "Code": "345",
                      "Name": "Aras Kargo",
                      "ShortName": "Aras"
                    },
                    {
                      "IntegrationShipmentId": 61,
                      "IntegrationId": 2,
                      "Code": "349",
                      "Name": "Yurtiçi Kargo",
                      "ShortName": "Yurtiçi"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/GetIntegrationOrderListingStatus": {
      "post": {
        "operationId": "GetIntegrationOrderListingStatus",
        "tags": [
          "General and lookups"
        ],
        "summary": "List order status codes",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "IntegrationId": {
                    "type": "integer",
                    "description": "Optional. Returns only this integration's statuses. Ignored when `StoreId` is set."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "Optional. Returns only this store's statuses (`StoreId` from `GetStores`)."
                  }
                },
                "required": [
                  "ApiCode"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 1234
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "IntegrationId": {
                                "type": "integer",
                                "description": "Integration ID."
                              },
                              "StoreId": {
                                "type": "integer",
                                "description": "Store ID. 0 for an integration-wide list."
                              },
                              "ListingStatuses": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "Code": {
                                      "type": "string",
                                      "description": "Status code."
                                    },
                                    "Description": {
                                      "type": "string",
                                      "description": "Turkish description of the status."
                                    },
                                    "Erp": {
                                      "type": "integer",
                                      "description": "1: orders in this status are eligible for ERP/accounting transfer. 0: not eligible.\n\n- `0`: No ERP transfer\n- `1`: Eligible for ERP transfer"
                                    }
                                  }
                                },
                                "description": "Statuses in this group."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": [
                    {
                      "IntegrationId": 14,
                      "StoreId": 1234,
                      "ListingStatuses": [
                        {
                          "Code": "Created",
                          "Description": "Yeni Sipariş",
                          "Erp": 1
                        },
                        {
                          "Code": "Shipped",
                          "Description": "Kargoya Verildi",
                          "Erp": 1
                        },
                        {
                          "Code": "Cancelled",
                          "Description": "İptal Edildi",
                          "Erp": 0
                        }
                      ]
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/GetOrderDetailStatus": {
      "post": {
        "operationId": "GetOrderDetailStatus",
        "tags": [
          "General and lookups"
        ],
        "summary": "Get order line statuses",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "OrderDetails": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "OrderDetailId": {
                          "type": "integer",
                          "description": "Order line ID (`OrderDetailId` from order responses)."
                        }
                      },
                      "required": [
                        "OrderDetailId"
                      ]
                    },
                    "description": "Order lines to query. At least one item is required."
                  }
                },
                "required": [
                  "ApiCode",
                  "OrderDetails"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "OrderDetails": [
                  {
                    "OrderDetailId": 9876543
                  },
                  {
                    "OrderDetailId": 9876544
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "OrderId": {
                                "type": "integer",
                                "description": "StockMount order ID."
                              },
                              "OrderDetailId": {
                                "type": "integer",
                                "description": "Order line ID."
                              },
                              "StoreId": {
                                "type": "integer",
                                "description": "ID of the store the line belongs to."
                              },
                              "OrderStatus": {
                                "type": "string",
                                "description": "Current status code of the line. Can be empty."
                              }
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": [
                    {
                      "OrderId": 4567890,
                      "OrderDetailId": 9876543,
                      "StoreId": 1234,
                      "OrderStatus": "Shipped"
                    },
                    {
                      "OrderId": 4567890,
                      "OrderDetailId": 9876544,
                      "StoreId": 1234,
                      "OrderStatus": "Created"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/GetUserMessages": {
      "post": {
        "operationId": "GetUserMessages",
        "tags": [
          "Messages"
        ],
        "summary": "List messages",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "ID of the store whose messages you want (`GetStores`)."
                  },
                  "MessageTypeId": {
                    "type": "integer",
                    "description": "Message type.\n\n- `1`: Inbox\n- `2`: Sent\n- `3`: Deleted inbox\n- `4`: Deleted sent"
                  },
                  "SmallestIntegrationMessageId": {
                    "type": "integer",
                    "description": "Optional. Returns only messages whose `UserMessageId` is smaller (older) than this."
                  },
                  "BiggestIntegrationMessageId": {
                    "type": "integer",
                    "description": "Optional. Returns only messages whose `UserMessageId` is larger (newer) than this."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "MessageTypeId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 1234,
                "MessageTypeId": 1,
                "SmallestIntegrationMessageId": 88120
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "MessageCount": {
                              "type": "integer",
                              "description": "Total number of messages matching the filter (not the number returned)."
                            },
                            "Messages": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "UserMessageId": {
                                    "type": "integer",
                                    "description": "StockMount message ID. Used for paging and `SetMessageRead`."
                                  },
                                  "Code": {
                                    "type": "string",
                                    "description": "Message code on the marketplace. For N11 questions it is the question ID; send it as `UserMessageCode` when replying."
                                  },
                                  "Subject": {
                                    "type": "string",
                                    "description": "Message subject."
                                  },
                                  "From": {
                                    "type": "string",
                                    "description": "Sender (for incoming messages, the buyer's marketplace username)."
                                  },
                                  "To": {
                                    "type": "string",
                                    "description": "Recipient."
                                  },
                                  "MessageTypeId": {
                                    "type": "integer",
                                    "description": "Message type.\n\n- `1`: Inbox\n- `2`: Sent\n- `3`: Deleted inbox\n- `4`: Deleted sent"
                                  },
                                  "Avatar": {
                                    "type": "string",
                                    "description": "Buyer's image. Usually empty."
                                  },
                                  "Body": {
                                    "type": "string",
                                    "description": "Message text."
                                  },
                                  "Time": {
                                    "type": "string",
                                    "description": "Message time in UTC, ISO 8601 (e.g. `2026-11-05T08:42:10Z`)."
                                  },
                                  "Unread": {
                                    "type": "boolean",
                                    "description": "`true`: the message is unread."
                                  },
                                  "Surname": {
                                    "type": "string",
                                    "description": "Buyer's last name. Can be empty."
                                  },
                                  "Name": {
                                    "type": "string",
                                    "description": "Buyer's first name. If no first and last name are stored, the full name from the message is returned."
                                  }
                                }
                              },
                              "description": "Messages, newest first."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "MessageCount": 57,
                    "Messages": [
                      {
                        "UserMessageId": 88119,
                        "Code": "301245678",
                        "Subject": "Ürün sorusu",
                        "From": "alici_123",
                        "To": "ornekmagaza",
                        "MessageTypeId": 1,
                        "Avatar": "",
                        "Body": "Bu ürün stokta var mı?",
                        "Time": "2026-11-05T08:42:10Z",
                        "Unread": true,
                        "Surname": "",
                        "Name": "Mehmet K."
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/GetAllUserMessage": {
      "post": {
        "operationId": "GetAllUserMessage",
        "tags": [
          "Messages"
        ],
        "summary": "Get the conversation with a buyer",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "Store ID (`GetStores`)."
                  },
                  "User": {
                    "type": "string",
                    "description": "Buyer's marketplace username (the `From`/`To` value in messages)."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "User"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 1234,
                "User": "alici_123"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "type": "object",
                          "properties": {
                            "MessageCount": {
                              "type": "integer",
                              "description": "Total number of messages matching the filter (not the number returned)."
                            },
                            "Messages": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "UserMessageId": {
                                    "type": "integer",
                                    "description": "StockMount message ID. Used for paging and `SetMessageRead`."
                                  },
                                  "Code": {
                                    "type": "string",
                                    "description": "Message code on the marketplace. For N11 questions it is the question ID; send it as `UserMessageCode` when replying."
                                  },
                                  "Subject": {
                                    "type": "string",
                                    "description": "Message subject."
                                  },
                                  "From": {
                                    "type": "string",
                                    "description": "Sender (for incoming messages, the buyer's marketplace username)."
                                  },
                                  "To": {
                                    "type": "string",
                                    "description": "Recipient."
                                  },
                                  "MessageTypeId": {
                                    "type": "integer",
                                    "description": "Message type.\n\n- `1`: Inbox\n- `2`: Sent\n- `3`: Deleted inbox\n- `4`: Deleted sent"
                                  },
                                  "Avatar": {
                                    "type": "string",
                                    "description": "Buyer's image. Usually empty."
                                  },
                                  "Body": {
                                    "type": "string",
                                    "description": "Message text."
                                  },
                                  "Time": {
                                    "type": "string",
                                    "description": "Message time in UTC, ISO 8601 (e.g. `2026-11-05T08:42:10Z`)."
                                  },
                                  "Unread": {
                                    "type": "boolean",
                                    "description": "`true`: the message is unread."
                                  },
                                  "Surname": {
                                    "type": "string",
                                    "description": "Buyer's last name. Can be empty."
                                  },
                                  "Name": {
                                    "type": "string",
                                    "description": "Buyer's first name. If no first and last name are stored, the full name from the message is returned."
                                  }
                                }
                              },
                              "description": "Messages, newest first."
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true,
                  "Response": {
                    "MessageCount": 2,
                    "Messages": [
                      {
                        "UserMessageId": 88131,
                        "Code": "301245678_ANSWER_14",
                        "Subject": "Ürün sorusu",
                        "From": "ornekmagaza",
                        "To": "alici_123",
                        "MessageTypeId": 2,
                        "Avatar": "",
                        "Body": "Merhaba, ürün stoktadır.",
                        "Time": "2026-11-05T09:10:14Z",
                        "Unread": false,
                        "Surname": "",
                        "Name": "Mehmet K."
                      },
                      {
                        "UserMessageId": 88119,
                        "Code": "301245678",
                        "Subject": "Ürün sorusu",
                        "From": "alici_123",
                        "To": "ornekmagaza",
                        "MessageTypeId": 1,
                        "Avatar": "",
                        "Body": "Bu ürün stokta var mı?",
                        "Time": "2026-11-05T08:42:10Z",
                        "Unread": true,
                        "Surname": "",
                        "Name": "Mehmet K."
                      }
                    ]
                  }
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SetMessageRead": {
      "post": {
        "operationId": "SetMessageRead",
        "tags": [
          "Messages"
        ],
        "summary": "Mark a message as read",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "ID of the store the message belongs to."
                  },
                  "IntegrationId": {
                    "type": "integer",
                    "description": "The store's integration ID. 2 for N11."
                  },
                  "UserMessageId": {
                    "type": "integer",
                    "description": "`UserMessageId` of the message to mark as read. Not validated; if omitted, no message changes but the response is still successful."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "IntegrationId"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 1234,
                "IntegrationId": 2,
                "UserMessageId": 88119
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    },
    "/api/Integration/SendUserMessage": {
      "post": {
        "operationId": "SendUserMessage",
        "tags": [
          "Messages"
        ],
        "summary": "Reply to a message",
        "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",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ApiCode": {
                    "type": "string",
                    "description": "Session code returned by `DoLogin`."
                  },
                  "StoreId": {
                    "type": "integer",
                    "description": "ID of the store the question belongs to."
                  },
                  "IntegrationId": {
                    "type": "integer",
                    "description": "The store's integration ID. 2 for N11."
                  },
                  "UserMessageCode": {
                    "type": "string",
                    "description": "`Code` of the question to answer (N11 question ID, numeric). Required for N11."
                  },
                  "Message": {
                    "type": "string",
                    "description": "Answer text."
                  },
                  "To": {
                    "type": "string",
                    "description": "Buyer's username (the question's `From` value). Stored as the recipient."
                  },
                  "From": {
                    "type": "string",
                    "description": "Value stored as the sender (e.g. your store name). If omitted, storing fails."
                  },
                  "Subject": {
                    "type": "string",
                    "description": "Subject to store (e.g. the question's `Subject`). If omitted, storing fails."
                  },
                  "SetMessageRead": {
                    "type": "boolean",
                    "description": "Optional. If `true`, the question is also marked as read. Default `false`."
                  },
                  "UserMessageId": {
                    "type": "integer",
                    "description": "`UserMessageId` of the question being answered. Used when `SetMessageRead` is `true`."
                  }
                },
                "required": [
                  "ApiCode",
                  "StoreId",
                  "IntegrationId",
                  "UserMessageCode",
                  "Message",
                  "To"
                ]
              },
              "example": {
                "ApiCode": "{{apiCode}}",
                "StoreId": 1234,
                "IntegrationId": 2,
                "UserMessageCode": "301245678",
                "UserMessageId": 88119,
                "To": "alici_123",
                "From": "ornekmagaza",
                "Subject": "Ürün sorusu",
                "Message": "Merhaba, ürün stoktadır.",
                "SetMessageRead": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Business errors also return HTTP 200; check the Result field.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ResultInfo"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "Response": {
                          "nullable": true
                        }
                      }
                    }
                  ]
                },
                "example": {
                  "Result": true
                }
              }
            }
          },
          "400": {
            "description": "The body is not valid JSON (ProblemDetails)."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ResultInfo": {
        "type": "object",
        "properties": {
          "Result": {
            "type": "boolean"
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ErrorMessage": {
            "type": "string",
            "nullable": true
          },
          "ErrorCode": {
            "type": "string",
            "nullable": true
          },
          "Response": {
            "nullable": true
          }
        }
      }
    }
  }
}