{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"edbaed38-ed54-4011-995a-e50cc7310b37","name":"HAKRO CONNECT","description":"<img src=\"https://content.pstmn.io/d3a786dd-4243-4e9c-9068-74a6f07e6230/SGFrcm8tQ29ubmVjdC1UZWFzZXIucG5n\">\n\nIntegrate your system with HAKRO through our REST-API to access real-time product information, including images, descriptions, and availability. Place orders directly from your system using our secure, efficient API. We ensure data security using OAuth2 and OpenID Connect, transmitting data in JSON format for quick and easy processing.\n\nWith our Export API, you can access current inventory data from the HAKRO catalog with a single query, including restock information when items are out of stock. Export data in JSON, CSV, or XML formats for smooth integration and efficient transfer, minimizing manual processes and improving inventory management accuracy.\n\nOur API offers comprehensive functionalities tailored for developers:\n\n- Create inbound sales orders with a single request\n    \n- Retrieve and filter price groups, and identify prices\n    \n- Access shipping types for specific destination countries and retrieve the list of countries where shipping is available\n    \n- Retrieve and filter shop items, including stock quantities and detailed item information\n    \n- Retrieve stock quantities and availabilities of multiple shop items\n    \n- Access detailed model information and filter models based on your criteria\n    \n\nLeverage the HAKRO API to streamline your business processes, enhance efficiency, and maintain accurate inventory management with minimal manual intervention. If you have specific requirements, need customizations, or require support, please contact us.\n\n# API Servers\n\nThere are two API servers, one for development and one for production.\n\n| Server | URL |\n| --- | --- |\n| Development | [https://dev.portal-backend.hakro.com](https://dev.portal-backend.hakro.com) |\n| Production | [https://portal-backend.hakro.com](https://portal-backend.hakro.com) |\n\n# REST requests\n\n- The API version **must** be set using the header `x-bee-api-version`.\n    \n\n``` plaintext\nx-bee-api-version: 2020-06-01\n\n ```\n\n- The content types supported by the client **must** be set using the `Accept` header.\n    \n\n``` plaintext\nAccept: application/json \n\n ```\n\n- The user agent **must** be set using the `User-Agent` header.\n    \n\n``` plaintext\nUser-Agent: <your-application-name>/<your-application-version>\n\n ```\n\nExample:\n\n``` plaintext\nUser-Agent: my-great-application/1.2.3\n\n ```\n\n##### Important\n\n`User-Agent` names of general purpose HTTP clients and SDKs like `curl` are subject to be blocked. Please use the name and version of your own client application.\n\n- Timestamps **must** be formatted according to [ISO 8601](https://de.wikipedia.org/wiki/ISO_8601): `2020-04-23T18:25:43.511Z`\n    \n- The header `Accept-Encoding` **should** be set for specifying compression algorithms supported by the client. **This can improve the performance of API calls significantly.** The preferred compression algorithm is **Brotli** (`br`).\n    \n- The header `Accept-Encoding` **should** be set for specifying compression algorithms. For API calls returning large amounts of data, it **must** be set; otherwise the HTTP status code `406 Not Acceptable` is returned. Supported algorithms are `br` and `gzip`, whereby `br` (Brotli) is preferred. Using compression improves the performance of API calls significantly.\n    \n\n``` plaintext\nAccept-Encoding: br\n\n ```\n\n##### Important\n\nSpecify the `Accept-Encoding` header for improved performance. Some APIs require compression and return `406 Not Acceptable` if the header is not set.\n\n- The header `Accept-Language` **should** be set for localization. If no `Accept-Language` header is specified, the default language is returned.\n    \n\n``` plaintext\nAccept-Language: de,en-US;q=0.7,en;q=0.3\n\n ```\n\n```\nLocalization codes follow the pattern: `-`. Examples are: `de-DE`, `en-US` or just `de` (see [ISO 639-1](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and [ISO 3166-1](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). The header `Accept-Language` adjusts the language per request. As a result, for example, the returned data is in the requested language. In case the requested language is not available, data is returned in the default language.\n\n ```\n\n#### Example\n\nThe example request queries the stock quantity of three items.\n\n##### Request\n\n``` plaintext\nPOST /api/ShopItems/StockQuantity HTTP/1.1\nHost: dev.portal-backend.hakro.com\nUser-Agent: <your-application-name>/<your-application-version>\nAuthorization: Bearer ...\nAccept-Encoding: br\nAccept-Language: de,en-US;q=0.7,en;q=0.3\nAccept: application/json\nContent-Type: application/json; charset=utf-8\nx-bee-api-version: 2020-06-01\n{\n    \"ItemCodes\": [\n        \"0800005005\",\n        \"0800005003\",\n        \"0800005004\"\n    ]\n}\n\n ```\n\n##### Response\n\n##### Note\n\nAll strings in responses may contain [<b>Markdown</b>](https://en.wikipedia.org/wiki/Markdown).\n\n``` plaintext\nHTTP/1.1 200 OK\nContent-Type: application/json; charset=utf-8\n[\n    {\n        \"Key\": \"0800005003\",\n        \"Value\": 393.0\n    },\n    {\n        \"Key\": \"0800005004\",\n        \"Value\": 1734.0\n    },\n    {\n        \"Key\": \"0800005005\",\n        \"Value\": 4993.0\n    }\n]\n\n ```\n\n# HTTP status code usage\n\nHTTP status codes are used to report whether an operation was successful or not. Please see an operation's documentation for its applicable status codes.\n\n##### Note\n\nThe server may return status code 503 (Service Unavailable) to indicate temporary unavailability. Clients must handle this condition and communicate it to the user where appropriate.\n\n# Detailed error descriptions\n\nIn case of an error an object of type `ProblemDetails` formatted as JSON is transmitted via the body. This object contains detailed information about the error and is transmitted, independently of a function's return value or type.\n\nExample `ProblemDetails` object:\n\n``` json\n{\n    \"correlationId\": \"e5e1b1c8-0b33-401b-844c-a212d4fc8edd\",\n    \"errorCode\": \"0x1234567890\",\n    \"title\": \"A validation error occured.\",\n    \"detail\": \"The detailed error description (if any).\",\n    \"type\": \"https://beesnes.com/prb/some-error\",\n    \"validationErrors\": [{\n        \"Name\": \"LastName\",\n        \"Message\": [ \"Must not be empty.\" ]\n    }]\n}\n\n ```\n\n# Paging\n\nSome resources allow a navigation through the list of results. Example:\n\n`/api/ShopItems/Filter?count=10&skip=20`\n\nThe parameter `count` specifies how many results shall be returned. The parameter `skip` specifies how many elements shall be skipped.\n\n##### Important\n\nThe maximum value of `count` is 250.\n\nFor these resources requests result in responses of type `PagedResult`. A `PagedResult` contains the requested elements and in addition the total count of all elements. For the example above the total count of elements would be the number of all items and the corresponding `PagedResult` would be of type `PagedResultOfItem`:\n\n``` json\n{\n    \"TotalCount\": 9949,\n    \"Elements\": [\n        {\n            \"Attributes\": {\n                \"ManualStockState\": \"None\",\n                \"SizeCode\": \"009\",\n                \"SizeName\": \"3XL\",\n                \"ColorCode\": \"005\",\n                \"ColorName\": \"schwarz\",\n                \"ColorDescription\": \"05 schwarz\",\n                \"BackColorCode\": \"08141F\",\n                \"ForeColorCode\": null,\n                \"WashingTemperature\": \"40 °C\",\n                \"UnitAreaWeight\": \"120 g / m²\",\n                \"Mixture\": \"Gewebe aus 100 % Baumwolle , 120 g/m²\",\n                \"OnSale\": \"0\"\n            },\n            \"ItemCode\": \"0105005009\",\n            \"ModelCode\": \"0105\",\n            \"Description\": \"HAKRO Hemd Business Regular\",\n            \"QuantityUnit\": null,\n            \"PriceGroupCode\": \"0105AX\",\n            \"Gtin\": \"4045981055812\",\n            \"HarmonizedCode\": null,\n            \"Weight\": 0.0,\n            \"CountryOfOrigin\": null\n        },\n        {\n            \"Attributes\": {\n                \"ManualStockState\": \"None\",\n                \"SizeCode\": \"003\",\n                \"SizeName\": \"XS\",\n                \"ColorCode\": \"025\",\n                \"ColorName\": \"himmelblau\",\n                \"ColorDescription\": \"25 himmelblau\",\n                \"BackColorCode\": \"C1CFEC\",\n                \"ForeColorCode\": null,\n                \"WashingTemperature\": \"40 °C\",\n                \"UnitAreaWeight\": \"120 g / m²\",\n                \"Mixture\": \"Gewebe aus 100 % Baumwolle , 120 g/m²\",\n                \"OnSale\": \"0\"\n            },\n            \"ItemCode\": \"0105025003\",\n            \"ModelCode\": \"0105\",\n            \"Description\": \"HAKRO Hemd Business Regular\",\n            \"QuantityUnit\": null,\n            \"PriceGroupCode\": \"0105AS\",\n            \"Gtin\": \"4045981089657\",\n            \"HarmonizedCode\": null,\n            \"Weight\": 0.0,\n            \"CountryOfOrigin\": null\n        }\n    ]\n}\n\n ```\n\n# Filtering\n\nFor some resources there exists a filter functionality which allows to request subsets of elements. Filters are maps with filter attributes as keys and a list of values as values. A filter attribute specifies what shall be filtered and the list specifies the values by which shall be filtered.\n\nIn case a filter attribute is specified the corresponding value my not be `null` nor an empty list. Moreover, the corresponding list may not contain empty elements nor `null`. The maximum length of a list of values is 250.\n\n#### Example\n\nModels can be filtered by gender. The filter attribute is then `Gender` and the list of values could contain `men` and `unisex`:\n\n##### Request\n\n`/api/ShopModels/Filter`\n\nExample `ModelFilterInput` object:\n\n``` json\n{\n    \"Filter\": {\n        \"Gender\": [\"men\", \"unisex\"]\n    },\n    \"OrderBy\": \"NameAsc\"\n}\n\n ```\n\n##### Response\n\nThe return value is the `PagedResult` for models: `PagedResultOfModel`\n\n# Authentication\n\nAuthentication is done via OAuth/OpenID Connect. For this purpose two servers are available, the development server and the production server.\n\n| Server | Authority/Issuer | Metadata Endpoint |\n| --- | --- | --- |\n| Development | [https://idp.dev.hakro.com/auth](https://idp.dev.hakro.com/auth) | [https://idp.dev.hakro.com/auth/.well-known/openid-configuration](https://idp.dev.hakro.com/auth/.well-known/openid-configuration) |\n| Production | [https://idp.hakro.com/auth](https://idp.hakro.com/auth) | [https://idp.hakro.com/auth/.well-known/openid-configuration](https://idp.hakro.com/auth/.well-known/openid-configuration) |\n\n# Client authentication via OAuth 2.0\n\nA bearer token is obtained using the OAuth _Client Credentials Flow_ (grant type: `client_credentials`). For more information see [RFC 6749](https://tools.ietf.org/html/rfc6749#section-4.4.2).\n\nThe authentication request must contain the audience of the API.\n\n| Server | Audience |\n| --- | --- |\n| Development | `https://hakro.com/portal-backend-dev` |\n| Production | `https://hakro.com/portal-backend` |\n\nThe authentication request must contain the API scope.\n\n| Server | Scope |\n| --- | --- |\n| Development | `https://hakro.com/portal-backend-dev/api` |\n| Production | `https://hakro.com/portal-backend/api` |\n\n**Example request:**\n\n``` plaintext\nPOST /auth/connect/token HTTP/1.1\nHost: idp.dev.hakro.com\nAuthorization: Basic <Base64 String>\nUser-Agent: <your-application-name>/<your-application-version>\nContent-Type: application/x-www-form-urlencoded\nAccept: */*\ngrant_type=client_credentials&audience=https://hakro.com/portal-backend-dev&scope=https://hakro.com/portal-backend-dev/api\n\n ```\n\n##### Important\n\nThe obtained bearer token is valid for a certain amount of time. Cache and reuse the token as long as it is valid. **DO NOT** request a new token for every API call you make. Rate limits may apply.\n\n##### Note\n\n- Use the token endpoint URL that is returned by the metadata endpoint.\n    \n- The client is authenticated using the `Authorization` header with `Basic` authentication scheme as defined in [RFC-7617](https://tools.ietf.org/html/rfc7617#section-2). In a nutshell, basic-credentials are obtained by concatenating the client ID and client secret with a `:` and encoding it to Base64.\n    \n\n# Retrieving pricing information\n\nThe client must evaluate which price applies to an item. The pricing information for items is always based on price groups. An item's price group is defined by a price group code (see the property `PriceGroupCode` of `Item`). The price group refers to a set of prices. Each price of a price group is associated with a minimum quantity (see the property `ValidFromQuantity` of `Price`). The minimum quantity defines the minimal amount with which an item has to be purchased such that the price may be applied for the item. The pricing information for a price group can be retrieved by three operations:\n\n- `Retrieving price group`\n    \n- `Filter price groups`\n    \n- `Identify prices`\n    \n\nThe prices belonging to a price group are returned as `PriceGroupPrices` object:\n\n- The property `Pricing` contains the resale prices of the price group applicable for the customer with regard to the individual price conditions of the customer.\n    \n- The `PriceInfo` (see `PriceInfo`) of `PriceGroupPrices` contains all resale and retail prices that exist for the price group regardless of the customer's individual price conditions. This property contains the `SalePrice` which is relevant for price evaluation if an item is **on sale**.\n    \n\n**Please note**: For an item's price evaluation the properties `Pricing` in and `SalePrice` need to be regarded.\n\n# Price identification\n\nAs described above the prices relevant for price evaluation are contained in the property `Pricing` of a `PriceGroupPrices` object and `SalePrice` in the `PriceInfo` (see `PriceInfo`) of a `PriceGroupPrices` object. Using this information the lowest price for an item based on it's price group, purchasing quantity and the **on sale** property must be identified.\n\nIn most cases an item's price of the specified price group can be determined by searching the applicable quantity category defined by the property `ValidFromQuantity` of a `Price` using the quantity with which the item shall be purchased. The lowest price of the matching order quantity is valid. In case the item is **on sale** the prices may be reduced by the respective discount rate (see the property `DiscountRate` of `Price`). In case the item is **on sale**, in addition, it must be checked whether the sale price is set (see the property `SalePrice` in `PriceInfo`). Please note, that, the sale price also has the property `DiscountRate` (the sale price is also of type `Price`) by which the sale price may be reduced if it is set to a value higher than `0.0`.\n\nFollowing the instructions above, the lowest price found for an item may be applied.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"18220651","team":4108955,"collectionId":"edbaed38-ed54-4011-995a-e50cc7310b37","publishedId":"2sAYX6ogYp","public":true,"publicUrl":"https://apidocs.connect.hakro.com","privateUrl":"https://go.postman.co/documentation/18220651-edbaed38-ed54-4011-995a-e50cc7310b37","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"e4032e"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":"HAKRO Connect"}],"appearance":{"default":"system_default","themes":[{"name":"dark","logo":"https://content.pstmn.io/30f2a553-bc7c-49c4-b52a-3d718e645672/MUVsZW1lbnQgMzQucG5n","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"e4032e"}},{"name":"light","logo":"https://content.pstmn.io/c511593e-519a-4d63-9a28-b178375c2510/MUVsZW1lbnQgMjQucG5n","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"e4032e"}}]}},"version":"8.10.0","publishDate":"2025-02-12T20:23:49.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"HAKRO Connect","description":""},"logos":{"logoLight":"https://content.pstmn.io/c511593e-519a-4d63-9a28-b178375c2510/MUVsZW1lbnQgMjQucG5n","logoDark":"https://content.pstmn.io/30f2a553-bc7c-49c4-b52a-3d718e645672/MUVsZW1lbnQgMzQucG5n"}},"statusCode":200},"environments":[],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/07031cc2f5b728dbd2cb34ae8600854535cf362285efcd0058940723e6d23cfb","favicon":"https://hakro.com/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"}],"canonicalUrl":"https://apidocs.connect.hakro.com/view/metadata/2sAYX6ogYp"}