{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"f1cbbc70-42a9-4ce0-b27b-64e4cac9983c","name":"Optiply Public API","description":"The Optiply Public API is available for subscribed users. It loosely follows the JSONAPI spec.\n\nThe API can be used to read, create, update and delete resources.\n\nIf you have any questions about usage or suggestions, please contact\n\n<a href=\"mailto:integrations@optiply.nl\">integrations@optiply.nl.</a>\n\n---\n\n# Usage\n\nThe header `Content-Type: application/vnd.api+json` **must** be included with every request.\n\n---\n\n# Filtering\n\nUsing any of the object's attributes in the requests filter is possible:\n\n- **Pagination Limit**: To specify the number of items to retrieve per page, you can use `page[limit]=100`. This controls the page size. The maximum limit is 100 and the default is 50.\n    \n- **Pagination Offset**: To specify the starting point for data retrieval (for pagination), you can use `page[offset]=50`. This is commonly used to skip a certain number of records when fetching data. The offset must be a multiple of the page size.\n    \n- **Equal**: To filter for records where the \"id\" attribute is equal to 12345. You can use either `filter[id][EQ]=12345` or the shorter `filter[id]=12345`.\n    \n- **Not Equal / Different**: To filter for records where the \"id\" attribute is not equal to 12345, you can use `filter[id][NEQ]=12345`.\n    \n- **Similar (String Matching)**: To perform a partial string match, you can use `filter[id][LIKE]=12345`. This is typically used for string fields.\n    \n- **Strictly Smaller / Less Than**: To filter for records where the \"id\" attribute is strictly less than 12345, you can use `filter[id][LT]=12345`.\n    \n- **Smaller or Equal to**: To filter for records where the \"id\" attribute is less than or equal to 12345, you can use `filter[id][LE]=12345`.\n    \n- **Strictly Bigger / Greater Than**: To filter for records where the \"id\" attribute is strictly greater than 12345, you can use `filter[id][GT]=12345`.\n    \n- **Bigger or Equal to**: To filter for records where the \"id\" attribute is greater than or equal to 12345, you can use `filter[id][GE]=12345`.\n    \n- **Status Enabled/Disabled**: To filter for records with a specific status, such as \"ENABLED,\" you can use `filter[status]=ENABLED`.\n    \n- **Sorting Ascending**: To sort the results in ascending order based on the \"id\" attribute, you can use `sort=id`.\n    \n- **Sorting Descending**: To sort the results in descending order based on the \"id\" attribute, you can use `sort=-id`.\n    \n\n---\n\n# Changelog\n\n2026-03-20:\n\n- Added currency to `suppliers`\n    \n- Added costPrice, discountPrice, economicOrderQuantity and secondaryCurrencyPrice to `supplierProducts`\n    \n\n2026-01-13:\n\n- Removed support of invalid values in the `suppliers` entity, properties `deliveryTime`,and userReplenishmentPeriod. These must now always be either null or between 1 and 365, inclusive\n    \n\n2025-05-28:\n\n- `buyOrderLines`now cascade deletes onto `receiptLines`. This also affects deletes initially cascaded from `buyOrders` into `buyOrderLines`\n    \n- Added cascade details to delete descriptions on revelant types\n    \n\n2025-05-26:\n\n- Added uuid version of all relationship ids, in preparation for API v2: Example, `buyOrderLines` now have readable `productUuid` in addition to `productId`\n    \n\n2025-01-08:\n\n- Added `products.stockMeasurementUnit`\n    \n- Removed resourceId and added uuid on all endpoints; We are currently hard at work on a new and more robust version of our API, which will use the uuid field as it's identifier.\n    \n\n2024-12-11:\n\n- Added `suppliers.type`\n    \n\n2024-11-05:\n\n- Added `buyOrders.assembly`\n    \n\n2024-09-03:\n\n- Added `products.maximumStock`\n    \n\n2024-08-08:\n\n- Added `products.manualServiceLevel` and `products.createdAtRemote`\n    \n\n2024-03-05:\n\n- Added calculation on `buyOrders.expectedDeliveryDate`. When omitted from a POST request it will be calculated as `buyOrders.placed` + `suppliers.deliveryTime` of the related `supplier`\n    \n- Added `buyOrderLines.expectedDeliveryDate`. When omitted, this field will behave in two possible ways:\n    \n    - If POSTed embedded on a `buyOrder` , through the `buyOrders` POST endpoint, it will be inherited from the `buyOrder`\n        \n    - If POSTed through the `buyOrderLines` endpoint then it will check the for a `supplierProduct` existing between the `buyOrder`'s supplier and the `buyOrderLine`'s product:\n        \n        - If said `supplierProduct` exists, then the resulting `buyOrderLines.expectedDeliveryDate` will be calculated as `buyOrders.placed` + `supplierProducts.deliveryTime`.\n            \n        - If said `supplierProduct` cannot be found then the `buyOrderLine` will inherit `buyOrder.expectedDeliveryDate`\n            \n- Removed support of invalid values in the `suppliers` entity, properties `lostSalesReaction`, `lostSalesMovReaction`, `backorderThreshold` and `backordersReaction`. These must now always take a value of either 0 or 1\n    \n- Fixed a bug that caused rounding on decimal values in the `supplierProducts` endpoints to not always be supported\n    \n\n2024-01-18:\n\n- Reverted changes that caused POST/PATCH requests to error out when more than 2 decimal places were sent on decimal values. We again support any amount of decimal places and round them down to 2\n    \n\n2024-01-11:\n\n- Improved error display on `supplierProducts` and `productCompositions` POST requests when `supplier/product` id pair or `composedProduct/partProduct` id pair, respectively, already exist. These cases will now return status 409.\n    \n- Added `supplierProducts.preferred` to POST requests.\n    \n- General documentation clean-up\n    \n\n2023-10-11:\n\n- Added `products.novel` on GET requests.\n    \n- Added `availability` and `availability_date` on `supplierProducts` GET and POST requests.\n    \n\n2023-04-14:\n\n- added `suppliers.globalLocationNumber` and `accounts.globalLocationNumber`\n    \n- added \"close_out\" as an `upliftType` on `promotions` and `promotionProducts`\n    \n\n2023-03-23:\n\n- Restricted `supplierProducts.lotSize` and `supplierProducts.minimumPurchaseQuantity` to `null` OR >= 1.\n    \n\n2023-01-03:\n\n- Restricted `supplierProducts.deliveryTime` to null OR >= 1.\n    \n\n2022-12-21:\n\n- Removed deprecated `warehouse` endpoints\n    \n\n2022-11-10:\n\n- Added `products.ignored`\n    \n- Restricted `productCompositions.partQuantity` to >= 1\n    \n\n2022-09-21:\n\n- Added `supplierProducts.deliveryTime`\n    \n\n2022-07-11:\n\n- Added delete scope to all users as default\n    \n- Updated Scopes section\n    \n\n2022-06-15:\n\n- Added DELETE endpoint to all object types except `accounts` and `warehouses`\n    \n- Added `buyOrders.expectedDeliveryDate`\n    \n- Added Scopes section\n    \n- General bug fixes\n    \n\n2022-05-4:\n\n- Added `supplierProducts.weight` and `supplierProducts.volume`\n    \n- Added `products.minimumStock`\n    \n- Added `suppliers` `maxLoadCapacity` and `containerVolume`\n    \n\n2022-02-17:\n\n- Finished `promotions` and `promotionProducts` data types\n    \n\n2022-02-11:\n\n- Added `promotions` and `promotionProducts` data types(WIP)\n    \n\n2021-22-24:\n\n- Added `supplierProducts.freeStock`\n    \n\n2021-10-19:\n\n- Removed `products.minimumPurchaseQuantity` and `products.lotSize`","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"24616523","team":4247145,"collectionId":"f1cbbc70-42a9-4ce0-b27b-64e4cac9983c","publishedId":"2s8Z6u5acg","public":true,"publicUrl":"https://api-documentation.optiply.com","privateUrl":"https://go.postman.co/documentation/24616523-f1cbbc70-42a9-4ce0-b27b-64e4cac9983c","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"EF5B25"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2023-01-06T17:02:04.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[{"name":"Public API","id":"ae676bc2-98df-4908-8d8f-682c1d998303","owner":"24616523","values":[{"key":"username","value":"","enabled":true,"type":"default"},{"key":"password","value":"","enabled":true,"type":"default"},{"key":"account_id","value":"","enabled":true,"type":"default"},{"key":"client_id","value":"","enabled":true,"type":"default"},{"key":"client_secret","value":"","enabled":true,"type":"default"},{"key":"refresh_token","value":"","enabled":true,"type":"default"},{"key":"api_url","value":"https://api.optiply.com/v1","enabled":true,"type":"default"},{"key":"dashboard_url","value":"https://dashboard.optiply.nl/api","enabled":true,"type":"default"},{"key":"access_token","value":"","enabled":true,"type":"default"}],"published":true}],"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/50507df5b4c54787f0654505cdafe9469e9cb64f8bdaf17f4aa4ff740fbae539","favicon":"https://optiply.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"},{"label":"Public API","value":"24616523-ae676bc2-98df-4908-8d8f-682c1d998303"}],"canonicalUrl":"https://api-documentation.optiply.com/view/metadata/2s8Z6u5acg"}