{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"7e603301-9543-4700-aa3a-6f69a6a973c8","name":"HungryHub Full API Integration Documentation","description":"## **Getting Started Guide**\n\nThis documentation will guide you towards integrating your application with the HungryHub Vendor API.\n\n## **Authentication**\n\nTo authenticate your request, you are required to send a signature to our server for every API call.\n\n> 💡 A unique **Signature Hash** has to be generated for **EVERY** API call at the time of making such call. \n  \n\nThe signature should be in the following format:\n\n> SIGNATURE = HmacSHA256ToHex(&lt;TIMESTAMP&gt;\\\\\\\\r\\\\\\\\n&lt;HTTP_VERB&gt;\\\\\\\\r\\\\\\\\n&lt;PATH&gt;\\\\\\\\r\\\\\\\\n\\\\\\\\r\\\\\\\\n&lt;BODY&gt;, &lt;SECRET&gt;) \n  \n\n`SIGNATURE` is in **lowercase** hex (base 16) encoding.\n\nThe following table explains the variables used in the signature:\n\n| **Variable** | **Description** |\n| --- | --- |\n| SECRET | Your API key secret. |\n| TIMESTAMP | Unix timestamp in milliseconds. For example, 1545880607433 |\n| METHOD | Method (GET, POST, PUT, DELETE, PATCH, etc) of the specific API call |\n| PATH | The pathname of the specific API call including version. For example, `/api/vendor/v1/xxxx/xxx/xxx.json` |\n| BODY | The request body in JSON string |\n\n### Authorization\n\nThe HungryHub server will read the signature from token sent via HTTP Headers\n\nHere is the token format:\n\n> TOKEN = hmac &lt;KEY&gt;:&lt;TIMESTAMP&gt;:&lt;SIGNATURE&gt; \n  \n\nThe following table explains the variables used in the token:\n\n| **Variable** | **Description** |\n| --- | --- |\n| KEY | Your API key. |\n| TIMESTAMP | MUST be identical to TIMESTAMP in your signature |\n| SIGNATURE | In lowercase hex (base 16) |\n\nYou need to include that token as Authorization headers in the API call  \n`\"Authorization\": \"{{TOKEN}}\"`\n\nexample  \n`Authorization: hmac 914c9e52e6414d9494e299708d176a41:1545880607433:5133946c6a0ba25932cc18fa3aa1b5c3dfa2c7f99de0f8599b28c2da88ed9d42`\n\nHere's an example how to generate the signature in JavaScript:\n\n``` javascript\nconst SECRET = 'your_api_key_secret';\nconst time = new Date().getTime().toString(); // => `1545880607433`\nconst method = 'POST';\nconst path = '/v3/quotations';\nconst body = JSON.stringify({...}); // => the whole body for '/v3/quotations'\nconst rawSignature = `${time}\\\\\\\\r\\\\\\\\n${method}\\\\\\\\r\\\\\\\\n${path}\\\\\\\\r\\\\\\\\n\\\\\\\\r\\\\\\\\n${body}`;\n// const rawSignature = `${time}\\\\\\\\r\\\\\\\\n${method}\\\\\\\\r\\\\\\\\n${path}\\\\\\\\r\\\\\\\\n\\\\\\\\r\\\\\\\\n`; if the http method is GET\n// => '1546222219293\\\\\\\\r\\\\\\\\nPOST\\\\\\\\r\\\\\\\\n/v3/quotations\\\\\\\\r\\\\\\\\n\\\\\\\\r\\\\\\\\n{\\\\\\\\n\"data\":{...}'\nconst SIGNATURE = CryptoJS.HmacSHA256(rawSignature, SECRET).toString();\n// => '5133946c6a0ba25932cc18fa3aa1b5c3dfa2c7f99de0f8599b28c2da88ed9d42'\n\n ```\n\n## Reservations\n\nCheck the `days_in_advance` attribute on the restaurant level before implementing the reservation process. This attribute specifies how many days in advance the restaurant can accept the reservation. If the user books outside the allowed range, the booking will be rejected.\n\n#### Reservation Status\n\n| **Status** | **Descriptions** |\n| --- | --- |\n| waiting_for_payment | Waiting Payment from Customer |\n| no_show | Customer not attend the reservation |\n| arrived | Reservation Success (Customer arrived at Restaurant) |\n| cancelled | Reservation cancelled |\n| rejected | Reservation is rejected by Restaurant |\n| cancel_modified | Cancelled reservation was modified |\n| refund | Customer cancel & refund the reservation (_for payment method shoope pay only_) |\n| pending_confirmation | Waiting confirmation from Restaurant |\n| order_being_prepared | Restaurant preparing the order |\n| pending_arrival | Reservation success and waiting Customer attend |\n\n## Packages\n\n#### Dine In Package Type\n\n| **Package Name** | **Descriptions** |\n| --- | --- |\n| All You Can Eat (ayce) | For ayce you can pay 1 package for 1 person. Ayce have multiple price that means the prices when user buy for 1 person it can be different from when they buy for 2 or more person. |\n| Party Packs (pp) | For party packs package 1 package can be enjoyed for more than 1 person, the menu you can choose whatever you want with amount limit, some package offers 5 set menu per person. |\n| Xperience (xp) | Xperience package contains Dining menu with Hotel room. Every xperience package use pricing per pack. |\n| Hungry Lunch (hs) | Hungry lunch is similar to Party Packs but for 1 person. So customer paid per package not per person. |\n| Buffet Plus (bfp) | Buffet plus package is similar to ayce package so when customer order buffet plus package it will count how many customer not per package. |\n\n**Here is the comparasion of each packages**\n\n<img src=\"https://content.pstmn.io/d8083e32-75bc-41f4-9328-2c048b1fc92c/aW1hZ2UucG5n\" width=\"734\" height=\"210\">\n\n## References\n\n- [Examples of creating base64 hashes using HMAC SHA256 in different languages](https://www.jokecamp.com/blog/examples-of-creating-base64-hashes-using-hmac-sha256-in-different-languages/)\n    \n- [SHA256 HMAC in different languages (both hex &amp; base64 encoding)](https://github.com/danharper/hmac-examples)\n    \n\n## **Need some help?**\n\nIf you have any questions or issues that you need help with, please don't hesitate to contact our technical support team at [engineering@hungryhub.com](https://mailto:support@lalamove.com). We are always here to help you!  \nReference","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"27128735","collectionId":"7e603301-9543-4700-aa3a-6f69a6a973c8","publishedId":"2s93eU2ZKm","public":true,"publicUrl":"https://documenter-api.postman.tech/view/27128735/2s93eU2ZKm","privateUrl":"https://go.postman.co/documentation/27128735-7e603301-9543-4700-aa3a-6f69a6a973c8","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"This documentation will guide you toward integrating your application with the HungryHub Vendor API."},{"name":"title","value":""}],"appearance":{"default":"system_default","themes":[{"name":"dark","logo":"https://content.pstmn.io/4fddcd60-0d48-46d7-a1fa-707306d487eb/aGhfbG9nby5wbmc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":"https://content.pstmn.io/4fddcd60-0d48-46d7-a1fa-707306d487eb/aGhfbG9nby5wbmc=","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.1","publishDate":"2023-08-31T11:50:13.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":"This documentation will guide you toward integrating your application with the HungryHub Vendor API."},"logos":{"logoLight":"https://content.pstmn.io/4fddcd60-0d48-46d7-a1fa-707306d487eb/aGhfbG9nby5wbmc=","logoDark":"https://content.pstmn.io/4fddcd60-0d48-46d7-a1fa-707306d487eb/aGhfbG9nby5wbmc="}},"statusCode":200},"environments":[{"name":"[Vendor API] Staging","id":"209cc0ef-73a7-47c6-88a3-0653d51b5399","owner":"24560204","values":[{"key":"base_url","value":"https://hh-ballbot.my.id","enabled":true,"type":"default"},{"key":"API_KEY","value":"6QLcyy796XgSdSRMTn0rzbOCx7F6FH9P-V4PYg9orAc","enabled":true,"type":"default"},{"key":"API_SECRET_KEY","value":"P9n4A9ZfmpzSAn4kgw0Rk-FH_uftwxDC0meB1Gka2HA","enabled":true,"type":"secret"},{"key":"API_TOKEN","value":"","enabled":true,"type":"default"},{"key":"minor_version","value":"3","enabled":true,"type":"default"},{"key":"request_body","value":"","enabled":true,"type":"any"},{"key":"baseUrl","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/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","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"},{"label":"[Vendor API] Staging","value":"24560204-209cc0ef-73a7-47c6-88a3-0653d51b5399"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2s93eU2ZKm"}