{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"938f6793-7f93-44c5-b082-c88924d28041","name":"resOS API (v1.2)","description":"Latest update v1.2 at 2025-07-23\n\nPlease let us know at [hi@resos.com](https://mailto:hi@resos.com) if you have questions or something you need is missing. We are extending the API as needed and per your request.\n\n## Helper libraries\n\n[API wrapper for Ruby](https://rubygems.org/gems/res_os_ruby) by [Tochman](https://rubygems.org/profiles/Tochman) (unofficial)\n\n# Request limiting\n\nAll API requests are rate-limited. The current limit is 100 requests / sec, with a fixed-time reset (i.e. every minute as opposed to a minute from the first request).\n\nAll API responses will include the following headers:\n\n> Retry-After: Time in ms until reset \n  \n\n# Authentication\n\nAuthentication to the resOS API is done using a private API key.\n\nAPI key authentication is done by providing one of your private API keys in the request. You can manage your private API keys from your account settings.\n\n### Finding your API key\n\nFirst ensure that the API app is enabled for your restaurant. If not, you can enable it from sidebar -> **Apps**. When it is enabled, head to your **Settings** page from the sidebar and find **API credentials** under the **Apps** category. On this page, you can view all your existing API keys and generate new ones. If none exist, simply click **Generate key.** The key that appears is your API key, and should be included in all requests / used for the Zapier connection.\n\nYou can also delete old API keys if you wish. Please note that any deleted keys will be invalidated, which means they will not work anymore for API requests or the Zapier integration.\n\n**Remember to keep this secret! Anyone with this key can perform all actions on resOS for your restaurant data. If used for our API, do not include this in front-end / client-side code, handle it all back-end / server-side. If you suspect that your key has been leaked, stolen or otherwise not secret anymore, you can invalidate it by going to your API credentials settings and deleting it.**\n\nThe API key must be provided as the [HTTP Basic Auth](http://en.wikipedia.org/wiki/Basic_access_authentication) username in all requests. No password should be provided. HTTP Basic Auth is performed by sending an Authorization header with value Basic base64(':').\n\nE.g. for a private key:\n\n> aIcCpRKQqKPg9zVL0a7-RJt2_zx8jPq8jR20XWp_pZN \n  \n\nthe key is base64 encoded with a tailing \":\":\n\n> base64('aIcCpRKQqKPg9zVL0a7-RJt2_zx8jPq8jR20XWp_pZN:') \n  \n\nresulting in the value:\n\n> YUljQ3BSS1FxS1BnOXpWTDBhNy1SSnQyX3p4OGpQcThqUjIwWFdwX3BaTjo= \n  \n\nThe complete header will be:\n\n> Authorization: Basic YUljQ3BSS1FxS1BnOXpWTDBhNy1SSnQyX3p4OGpQcThqUjIwWFdwX3BaTjo= \n  \n\nTo test base64 encoding the following site can be used [www.base64decode.org](https://www.base64decode.org/)\n\n**If testing via Postman:**\n\nMake sure your API key is not being base64 encoded twice. If you pass your API key via the requests' Authorization tab, the API key should be put as is. This is due to Postman automatically encoding it.\n\n### CORS\n\nRequests to our API will fail from the frontend due to our [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) policy. This is done for security reasons - since requests to our API require an API key, requests from the frontend would need to have your API key embedded in the code of the page, making it trivial for anyone to read and make requests on your behalf.\n\nThe proper way of calling the API from the frontend is to have a backend which relays the request and response, storing only your API key on the server backend.\n\n---\n\n# Making requests\n\n## HTTPS\n\nAll requests must be made using HTTPS for security reasons. Any requests in HTTP will be rejected.\n\n## Request data\n\nAs POST and PUT data we accept application/json content-type. The content-type must be defined in the HTTP header of requests.\n\nFor GET requests query parameters are used e.g. for pagination.\n\n---\n\n## Response data\n\nAll responses will be in JSON.\n\n---\n\n## Pagination\n\nSome list endpoints support pagination using skip and limit query variables, where skip defines the number or records to skip in the result and limit defined the number of records to return.\n\nBy default skip is 0 and limit is 100. Maximum number of records returned is also 100 unless defined otherwise for a specific endpoint.\n\nE.g. to get 10 records at a time, getting records from 20 to 30:\n\n> /bookings?skip=20&limit=10 \n  \n\n---\n\n# Errors\n\nWe use conventional [HTTP response codes](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes) to indicate success or failure of an API request.\n\nIn general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that resulted from the provided information, and codes in the 5xx range indicate an error at resOS.\n\nBesides the status code we include an error description as a text string in the response body.\n\n## HTTP Status Codes\n\nBesides the status code and error text, a hint to the exact problem may be included in the response.\n\n| Status code | Text | Description |\n| --- | --- | --- |\n| 200 | OK | Request was OK |\n| 400 | Bad request | Illegal operation on a resource |\n| 401 | Unauthorized | No valid authentication provided |\n| 404 | Not found | The requested resource or referenced resources could not be found |\n| 405 | Method Not Allowed | The used HTTP method is not allowed on the resource |\n| 422 | Unprocessable Entity | The request could not be interpreted, often missing a required parameter or wrongly formatted parameters |\n| 429 | Too many requests | Exceeded limit of requests in timeframe |\n| 500 | Server Error | An internal error occurred, please contact [hi@resos.com](https://mailto:hi@resos.com) if the error persists |\n\n# Webhooks\n\nWe are currently working on webhooks. If you have any specific requests, needs or use-cases you'd like to see implemented, please reach out to us at [hi@resos.com](https://mailto:hi@resos.com).\n\n# Sorting results\n\nAll endpoints that return a list can be sorted. This is done by passing a `sort` parameter.\n\nSorting by ascending takes the value `1`. Descending, the value `-1`. All document fields can be used for sorting.\n\nE.g. sorting by date, ascending: `createdAt:1` or descending `createdAt:-1`.\n\nMultiple sorting parameters can be passed, with a comma as the delimiter. The results are sorted in priority with regards to the order in which the parameters are passed. E.g. `createdAt:1,updatedAt:-1`.\n\n# Search expressions\n\nSearch expressions provide a powerful way to further refine the search results from the API. It supports filtering for any one or more fields as needed.\n\nAll dates should be in UTC (Coordinated Universal Time).\n\nA search expression is passed as a header in the HTTP request. Each parameter is split by a comma.\n\nSearch expressions support the following operators:\n\n| Operator | Name | Description | Supported types |\n| --- | --- | --- | --- |\n| < | Lesser than | Values must be lesser than value passed | Number, Date |\n| \\> | Greater than | Values must be greater than value passed | Number, Date |\n| : | Equals | Values must be equal to value passed | String, Boolean, Date, Number |\n| ; | Contains | Values must contain value passed | String |\n\nExamples:\n\nMore than 2 people, approved status\n\n`customQuery=people>2,status:\"approved\"`\n\nEarlier than date, source contains google\n\n`customQuery=date<\"2021-09-18\",source;\"google\"`\n\nAny document fields are searchable in this manner.  \nNote - for phone numbers, the country code must be included as the first 2 digits. The + sign is not required. For example:  \n`customQuery=guest.phone:\"4511111111\"`","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"3308304","team":1137039,"collectionId":"938f6793-7f93-44c5-b082-c88924d28041","publishedId":"SzzehLGp","public":true,"publicUrl":"https://documenter-api.postman.tech/view/3308304/SzzehLGp","privateUrl":"https://go.postman.co/documentation/3308304-938f6793-7f93-44c5-b082-c88924d28041","customColor":{"top-bar":"2B233A","right-sidebar":"18151F","highlight":"3A8E5C"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2020-06-18T08:19:36.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"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/2c5d47592a56058c72bc598b73181cdcf489bed6470e528380884029ed5cc42f","favicon":""},"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://documenter.gw.postman.com/view/metadata/SzzehLGp"}