{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"db17bcf2-78c8-405d-8d4e-b3153ab7a99e","name":"SoftTouch API docs","description":"## Who is SoftTouch?\n\nSoftTouch was founded in 1999 as a one-man business developing, selling and installing point-of-sale systems. Knowing the market through and through became the basis for the service we offer today. In 2009 the company grew into a new office with ample demonstration space and a larger team. Today SoftTouch combines in-depth know-how of point-of-sale systems with that of the fashion world.\n\n## What does this API do?\n\nThe SoftTouch API is a RESTful JSON API that reads data from, and writes data to, the FasMan database of a client: products and stock, customers, reservations and receipts, cheques, transfers and much more. Web shops, marketplaces, PIM and ERP systems, shipping and accounting integrations all connect through it.\n\n## Getting started\n\n- **Base URL:** `https://api.softtouch.eu/{{apiVersion}}/accounts/{{accountId}}/{{endpoint}}` – version `1` or `2`, followed by the account id of the client.\n- **Authentication:** every call carries the token of the account in the `Authorization` header, with or without the `Bearer ` prefix (the API reads the last space-separated part of the header). Account id and token are provided by SoftTouch (see below).\n- **Format:** send and receive JSON; set `Content-Type: application/json` and `Accept: application/json`.\n- **Paging:** list calls return 100 records by default; `take` raises that to a maximum of 500 and `skip` skips the first n records. `take=500&skip=1500` returns records 1501 to 2000.\n- **display:** most V1 list and detail calls accept `display=full` for the complete record; without it a compact record is returned. V2 calls use `select` instead (`select=*,relation.*`).\n- **Errors:** a validation problem or an unknown model returns HTTP 400 with a `message` and, where useful, a list of `messages`; a missing record returns 404; a conflict (for example a login that already exists) returns 409. Always validate the response before relying on it. HTTP 500 means the API or the client's database was temporarily unavailable (a backup, a network problem): do not fail the customer's order on it, store the call and retry it a few minutes later.\n\n## Keep calls to a minimum\n\nEvery call runs against the live database of the client, the same database their stores use at the till. Developers are required to keep the number of calls to the minimum their integration needs:\n\n- Synchronise incrementally instead of fetching everything again, and cache the models that rarely change (stores, brands, categories, colors, size tables, program variables).\n- Use filters and pages of up to 500 records rather than many small calls; fetch an article with `ids=` rather than size by size.\n- Never poll in a tight loop; follow the schedule in *Keeping a web shop in sync* below.\n\nSoftTouch checks the call volume of every integration weekly. When an integration keeps overloading the API, SoftTouch contacts the developer to bring the number of calls down.\n\n## How to obtain an account id and token\n\nThe client requests an offer for the use of the API. Once the offer is confirmed, SoftTouch provides a test environment. When development is complete and the client has approved the integration, SoftTouch reviews the calls the integration makes and provides the live credentials.\n\nQuestions about this API can be sent to [dev@softtouch.be](mailto:dev@softtouch.be).\n\n## Keeping a web shop in sync\n\nThe API does not push changes to your system: your integration asks for them. The one exception is the confirmation URL the store's web shop module calls when an order is ready (see Receipts, *Web shop orders*). Three simple habits keep a web shop up to date without overloading the client's database.\n\n### Full sync overnight\n\nSynchronise all online products once a night, together with the models they refer to: stores, seasons, brands, categories, colors, size tables and discounts. Set `discount_date` to the coming day when the sync starts the evening before, so the correct discounts are shown. A full sync belongs at night, or on demand when something changed; never in a loop during the day. Note that a backup runs on the server at night, which can briefly lock the data and cause a connection error; validate every response.\n\n### Ten minute sync\n\nDuring the day, fetch only what changed: call the products endpoint every ten minutes and ask for the last fifteen: `updated_since_minutes=15` with `display=full`. The window is deliberately longer than the interval, so a slow call or a clock difference between your server and ours never makes you miss a change; a product that changed in the overlap is simply returned twice, and upserting it twice is harmless. Upsert what comes back, and take a product offline when the online flag of your channel is no longer set. When an unusually large number of products changed (a price import, a season switch), run a full sync instead of paging through thousands of changes. The Products folder describes the exact calls; `detail=stock` remains an option when only the stock matters.\n\n### On click sync\n\nWhen a visitor opens a product page, fetch the article with `ids=` (the 8-digit article id + colour) so every size and store comes back in one call and the available sizes are current; check once more before checkout. A disappointed customer at checkout is better than one who already paid.\n","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"6112973","team":307277,"collectionId":"db17bcf2-78c8-405d-8d4e-b3153ab7a99e","publishedId":"2sBYAytoyw","public":true,"publicUrl":"https://development.softtouch.eu","privateUrl":"https://go.postman.co/documentation/6112973-db17bcf2-78c8-405d-8d4e-b3153ab7a99e","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0071BB"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":"SoftTouch API Documentation"}],"appearance":{"default":"system_default","themes":[{"name":"dark","logo":"https://content.pstmn.io/9cd91331-fea0-44dc-ba53-77bdd1d860d1/bG9nb19zZnRfaG9yaXpvbnRhbF9saWdodC5wbmc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"C0E4DA"}},{"name":"light","logo":"https://content.pstmn.io/1426dd76-bda0-457e-aae3-af45f4bea2c5/bG9nb19zZnRfaG9yaXpvbnRhbF9zbWFsbC5wbmc=","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0071BB"}}]}},"version":"8.12.6","publishDate":"2026-09-14T08:02:08.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"SoftTouch API Documentation","description":""},"logos":{"logoLight":"https://content.pstmn.io/1426dd76-bda0-457e-aae3-af45f4bea2c5/bG9nb19zZnRfaG9yaXpvbnRhbF9zbWFsbC5wbmc=","logoDark":"https://content.pstmn.io/9cd91331-fea0-44dc-ba53-77bdd1d860d1/bG9nb19zZnRfaG9yaXpvbnRhbF9saWdodC5wbmc="}},"statusCode":200},"environments":[{"name":"SoftTouch API docs","id":"c99346b1-b748-45c1-8700-a3960628df18","owner":"5301532","values":[{"key":"token","value":"35ced35a5d98fa4384331a48bb69ab29c841e723","enabled":true,"type":"secret"},{"key":"returnId","value":"","enabled":true,"type":"any"}],"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/edae9862cf4e13f66b466f18ac69c2558da93984908039ed92720b6cf8d258cf","favicon":"https://res.cloudinary.com/postman/image/upload/v1580739743/team/jkzgdr1a6mgruba2pi5b.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":"SoftTouch API docs","value":"5301532-c99346b1-b748-45c1-8700-a3960628df18"}],"canonicalUrl":"https://development.softtouch.eu/view/metadata/2sBYAytoyw"}