{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"8cc1312d-f38c-484b-a80d-51ceb1ca8547","name":"Rally API docs","description":"Welcome to Rally documentation\n==============================\n\nRally’s APIs let you build apps and various integrations on top of Rally. If you want to create Rally-powered applications, this is the best way to proceed\n\n**Rally** offers a wide range of APIs to provide functionality at every stage of a store's operation. For help selecting which APIs and resources you need for your app, see Selecting APIs for your app.\n\n<br />\n\nHow does the platform connection work?\n======================================\n\nIn simple terms, you can think of a Rally Connector as the middle part that transforms data into Rally understandable, and Platform understandable formats. Additionally, the connector should store the Platform authentication values per Merchant/installation, and do as little processing as possible to ensure it is not a bottle neck in operations.\n\n![](https://d4p1qvmaj55ce.cloudfront.net/flow-2.png)\n\n<br />\n\nPrerequisites\n=============\n\n*   [Rally API Docs](https://api-docs.rallyon.com/)\n    \n*   Platform API docs (e.g. BigCommerce API, or similar)\n    \n<br />\n\nHigh level Steps\n================\n\nTo build a connector between Rally and any Platform, there aren’t many steps you have to take. Below are listed the high level steps you need to take to successfully integrate a Platform:\n\n1.  Create a Partner Organization in Rally’s Admin  \n    _This will allow you to create a new App of Category “Platform Connector” and receive the API KEY and SECRETS required for Authentication and HMAC calculation_\n    \n2.  Integrate a cart button to your storefront  \n    _The button includes a JS SDK that allows you to initialise a checkout session, which you can then forward a platform specific cart session, or line items directly. Once the button has the necessary data, it will redirect to the Merchant’s URLs by (behind the scenes) communicating directly to Rally’s API when the shopper hits the Checkout button. The button is highly customisable and styleable_\n    \n3.  Build a connector into the Platform  \n    _In short, the connector acts as a transformer/adapter between Rally’s API and the Platform bidirectionally. This means that it requires both incoming data (e.g. Product data, WebHooks, …), and outgoing data (e.g. syncing Orders into the Platform)_\n    \n<br />\n\nCreate a Platform Organization in Rally's Admin\n===============================================\n\n*Work In Progress*\n\n<br />\n\n\nIntegrate a cart button to your storefront\n========================================== \n\n<br />\n\n### **Add code snippet to a page**\n\n  \nThis code snippet loads our frontend assets and allows for the use of our Javascript SDK. It should be present wherever the markup for the actual button will be used.\n\n```javascript\n!function(e,t){e.Rally=e.Rally||{},e.Rally.init=e.Rally.init||function(t,n){(e.Rally.q=e.Rally.q||[]).push({action:\"init\",clientId:t,configuration:n})};var n=t.createElement(\"script\");n.async=!0,n.noModule=!0,n.src=\"https://develop.js.onrally.dev/checkout-button/elements-es5.js\";var l=t.createElement(\"script\");l.async=!0,l.setAttribute(\"type\",\"module\"),l.src=\"https://develop.js.onrally.dev/checkout-button/elements-es2015.js\";var o=t.getElementsByTagName(\"script\")[0];o.parentNode.insertBefore(n,o),o.parentNode.insertBefore(l,o)}(window,document);\n```\n\n<br /> \n\n\n### **Place the HTML markup to the template**\n\n  \nThe markup is what renders the actual “Checkout” button. This custom element is highly customisable through the use of `Rally.init` and `configuration` properties described in the next point.\n\n```html\n<rally-checkout-button></rally-checkout-button>\n```\n\n<br /> \n\n\n### **Initialise session**\n\n  \nFor session initialisation we need to execute the following code block _(this implementation allows the invocation of the functions before the script is loaded)_.\n\n```javascript\nwindow.platform.getCartId() // should be defined by the platform connector - see bellow\n  .then(function (cartId) {\n    var configuration = {\n      redirect: true, // Should be set to false in case of a manual redirect - defaults to true\n      lineItems: lineItems, // In case of custom cart the line items should be provided - see part Custom line items structure\n      cartId: cartId, // When integrated with a platform the cart id should be provided  \n      // Add a failsafe with the fallbackUrl or fallbackButtonSelector options - this will allow your checkout pages to continue to work in case of our system failure\n      fallbackButtonSelector: '[href=\"/checkout\"]',\n      fallbackUrl: 'https://rallycommerce.com/checkout'\n    };\n      Rally.init('clientId', configuration);\n  });\n```\n\n<br /> \n\n\n### Platform specific part of retrieving line items\n\n<br /> \n\n\na.  **Retrieve the platform specific cart id** \nUse a code snippet corresponding to the platform you’re using and make sure to include it before calling Rally init method  \n          \n_Example (un-minified)_\n\n```json\n(function (win, doc) {\n  win.platform = {};\n\n  win.platform.getCartId = function () {\n    return fetch('apiUrlForRetrievingCartId',\n      { credentials: 'same-origin' })\n      .then(function (response) { return response.json(); })\n      .then(function (cart) { return cart && cart.length > 0 ? cart[0].id : null; });\n  }\n})(window, document);\n```\n\n\nb. **Custom line items structure** _(not supported yet)_ \n\nYou can inject custom line items instead of the cart session, by specifying a structure like this:\n        \n```json\n[\n  {\n    \"title\": \"My amazing product\",\n    \"product_id\": \"1234\",\n    \"image\": \"https://www.google.com/image.png\",\n    \"inventory_management\": \"P\",\n    \"inventory_quantity\": 500,\n    \"variants\": [\n      {\n        \"title\": \"My amazing variant 1\",\n        \"image\": \"https://www.google.com/image1.png\",\n        \"positon\": 0,\n        \"variant_id\": \"5678\",\n        \"inventory_quantity\": null,\n        \"requires_shipping\": true,\n        \"price\": 30,\n        \"discounted_price\": 20,\n        \"quantity\": 2,\n        \"taxable\": true\n      },\n      {\n        \"title\": \"My amazing variant 2\",\n        \"image\": \"https://www.google.com/image2.png\",\n        \"positon\": 0,\n        \"variant_id\": \"5679\",\n        \"inventory_quantity\": null,\n        \"requires_shipping\": true,\n        \"price\": 35,\n        \"discounted_price\": 25,\n        \"quantity\": 5,\n        \"taxable\": true\n      }\n    ]\n  }\n]\n```\n        \n\n<br />\n\nBuild a connector for the platform\n==================================\n \n<br /> \n\n\nBuild oAuth flow per Merchant\n-----------------------------\n\nAPI docs can be found [here](https://api-docs.rallyon.com/#fa66adbe-a86e-4a22-aa0b-64e29e32bd59).\n\nWhen you register a new Rally Application, that is defined as Category “Platform”, and once publicly listed, it will be available in Rally’s onboarding Admin dropdown. Because this is a multi platform flow for oAuth, there are a few additional steps to complete to ensure the flow is successfully finished between both Rally API <> Rally Connector, and Rally Connector <> Platform.  \n  \n<br />\n\n**The full oAuth flow looks like this:**\n\n![](https://d4p1qvmaj55ce.cloudfront.net/diagram.png)\n\n<br />\n  \n**High level, few things need to happen, as described in the diagram above:**\n\n1.  Merchant selects the platform from the Admin dropdown that they wish to install.\n    \n2.  Rally’s Admin will show the necessary install scopes. These are preconfigured in the Partners dashboard for that specific App/Extension and explain to the Merchant what scopes (what data access) the Extension is requesting access to\n    \n3.  Once the Merchant confirms the Extension installation, they will be redirected to the pre-specified `install_url` in the Application/Extension page.\n    \n4.  The partner app / platform connector should then:\n    \n    1.  obtain the temporary token from first redirect GET request query params (`code`)\n        \n    2.  Create any additional flows to obtain the Platform credentials and store them on the connector directly\n        \n    3.  Exchange the temporary code for `access` and `refresh` tokens by calling the `Authorize` endpoint [here](https://api-docs.rallyon.com/#4ccc0486-4118-4d76-af39-72609e68994f)\n        \n        1.  The token currently lasts 15 days, so make sure to implement the refresh endpoint found [here](https://api-docs.rallyon.com/#56532977-8081-43a8-8fcb-6713b7b3e3e9)\n            \n    4.  Once things are finalised and stored, redirect back to the `Admin` url as noted [here](https://api-docs.rallyon.com/#cde268b4-7bfa-4cba-980c-3ee06fec58b8)\n        \n\n<br />\n\nSpecify and subscribe to necessary hooks\n----------------------------------------\n\n<br /> \n\n\n### **What are hooks**\n \n<br /> \n\n  \nHooks are great way for our API systems to get data from an external system. You can tell our APIs where to call for specific information. For example, what do we call when we need a product? Or taxes? Or discounts?  \n\nThey are similar to WebHooks, but compared to WebHooks which are a one way optimistic mechanism, hooks require a response as well, and are therefore bidirectional. You might ask - well isn’t that a normal API request ↔︎ response you’re describing? The answer is no. This mechanism works in reverse, where the API (publisher) requests data from a subscribed URL (subscriber).  \n\nAs we can see, the main connection piece is between our **publisher** and the **subscriber.** Subscriber tells the publisher what URL to ping, and how the data **publisher** sends will look like. The **subscriber** will then respond with a predefined structure (based on these API docs/per hook) with the data requested/expected.\n\n<br /> \n\n### Hooks in a Flow Diagram\n\n<br /> \n\nFor demonstration purposes, the diagram below has an example external connector from where it fetches its data:\n\n![](https://d4p1qvmaj55ce.cloudfront.net/flow-1.png)\n\n<br /> \n\n### Hook implementation\n\n<br /> \n\nThe hook URLs are specified only once inside of the App/extensions management page in the partners dashboard.\n\nHook API Docs\n\n1.  You can find the API documentation for Rally hooks [here](https://api-docs.rallyon.com/#a8cdee3c-5ce5-4fe2-95cb-7df2ebdc7356)\n    \n    1.  Please note that in the API docs, the example URLs are pointing to the API, but should in reality point to the platform connector endpoints.\n        \n2.  The incoming request to your Rally Hook URL is **always signed with an HMAC** and sent as a header of topic `X-HMAC-SHA256` so you can verify and validate the authenticity of the incoming requests. The formula for decoding and calculating HMACs is described in a separate topic bellow.\n    \n    1.  Our API expects the response + payload to also be encoded and signed with the same HMAC header `X-HMAC-SHA256`, with the newly calculated HMAC. This prevents any man in the middle attacks.\n        \n\n<br /> \n\nSubscribe to necessary WebHooks in connector as noted in docs [here](https://api-docs.rallyon.com/#ec174dba-7340-47d9-a8f6-70b425ed22e2)\n----------------------------------------------------------------------------------------------------------------------------------------\n\n  \nWebHooks can be high load tasks. At specific cases, for examples like product updates, fulfilment, or similar apps might trigger thousands, or tens of thousands of WebHooks at once.  \n  \nFor that reason, to be as scalable as possible within the connector, it is highly recommended to:\n\n1.  **Connector:** Accept the incoming WebHook from the Platform and respond with a 2xx immediately and dispatch a pre-processing Job\n    \n2.  **Connector:** Once you have the payload reformatted to fit Rally’s data formats / expected payloads, as noted in our API docs, just forward them over to appropriate URLs to Rally’s API’s.\n    \n    1.  We expect these requests to be signed with a `X-HMAC-SHA256` header, to prove authenticity.\n        \n3.  Because Rally does all the payment processing, also make sure to implement any refund webhooks and pass them over to Rally for Refund issuance as noted [here](https://api-docs.rallyon.com/#bcfa4fc4-b8c4-41d9-8464-bc006ba1c511).\n    \n<br />\n\nHMAC Calculation\n================\n\n<br /> \n\nImplementation\n--------------\n\nWe’re using simple HMAC implementation [https://www.php.net/manual/en/ref.hash.php](https://www.php.net/manual/en/ref.hash.php) .\n\n```\nbase64_encode(hash_hmac('sha256', string $data, string $secret, true));\n```\n\n<br /> \n\n### **Key creation**\n\nIn order to create the signature we need an `Api-Secret` to be able to sign a payload (request/response). We use a random 40 char `secret` from App → OAuth Client which `id` also doubles as `Api-Key`. OAuth client is automatically created for each new App.\n\n<br /> \n\n### Key transmission\n\nKeys are NOT transmitted to a connector, they should be copy pasted manually by the App developer. Both `Api-Key` and `Api-Secret` are be available in the App/Extensions App area in the Partners dashboard.\n\n<br /> \n\n### Signing Requests\n\nThe HTTP client signs the request by adding the following HTTP headers:\n\n```\nX-HMAC-SHA256 : <HMAC>\n```\n\nAn alternative method is to add the hash to query params. The key will be named `hmac`. Therefore to verify the `hmac` that is placed in query params, you need to exclude it from\n\nThe HMAC is **base64\\_encoded** string\n\n<br />\n\nParameters legend\n=================\n\n*   `external_id` - ID relating to the resource of the platform, depending on the resource.\n    \n    *   For example if this is the Product resource, this would be the ID of the Product as noted in the Platform.\n        \n*   `line_item.subtotal`\\- Price of line item, minus discounts, taxes excluded\n    \n*   `line_item.total`\\- Price of line item, minus discounts, taxes included\n    \n*   `order.subtotal`\\- sum of all line items, before taxes, minus discounts, without shipping\n    \n*   `order.total` - sum of all line items, after taxes, minus discounts, with shipping included\n\n<br />\n\nREST APIs\n=================","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"12361623","team":1213658,"collectionId":"8cc1312d-f38c-484b-a80d-51ceb1ca8547","publishedId":"TzJsge56","public":true,"publicUrl":"https://api-docs.rallyon.com","privateUrl":"https://go.postman.co/documentation/12361623-8cc1312d-f38c-484b-a80d-51ceb1ca8547","customColor":{"top-bar":"FFFFFF","right-sidebar":"221F20","highlight":"26CC93"},"documentationLayout":"classic-double-column","customisation":null,"version":"8.10.1","publishDate":"2021-05-05T09:29:34.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{},"logos":{}},"statusCode":200},"environments":[{"name":"Dev Rally API 🔵   [api.develop.rallyon.dev]","id":"3073398a-e1db-4d6b-8b30-8cccc17a46f7","owner":"12351272","values":[{"key":"base_url","value":"https://develop.api.onrally.dev","enabled":true},{"key":"access_token","value":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvZGV2ZWxvcC5hcGktY2hlY2tvdXQub25yYWxseS5kZXYiLCJpYXQiOjE2MzYxNDQ2NTMsIm5iZiI6MTYzNjE0NDY1MywiZXhwIjoxNjM2MjMxMDUzLCJjbCI6ImNhNmJhMDMyLTFlZDUtNDYzNy1hNjQ1LTFmMGY4Y2IyMjUxMSIsImNoIjoiNzhhNWZhYjUtNmYxYy00YWQ5LWIzZjYtMzhlYmEzMTQ4YjQ4In0.qH8pmLXQ0jL8FjC40ASj9V_tFC6pIrSJMXOMaW-A6XA","enabled":true},{"key":"refresh_token","value":"def50200b62409d695f4072861ac0de37fac37f0e39aaa3001205448e7a194064041d46111254da408d636fbabe63823eeef9120e89511c80cf70e4cdaeb4c7aee2e94bfc5e8e64de30a06976d167d29ccb732bef4e20cc3f9a23613ead20f8167b6235f9f51593fe47116d492819f30d574af1f07b232a1d569252bfb33df1dc1917b0fb904b9e706d5f66d62ca02c84e0e0325618cdd1fc74cd37ae42fa33c54aa7a0beabed5b6caa37ca9077636eee514289cee3f5249415cdf7c308d42b0055af2973965ed7d0d0dd641a783da060e909318be33192b20b9a701d581b2364f6550b0e7d15479d1f0a759d9ab3d72a8c3caa38373f90bff02f958aced0bf936bba5ce45b2a4b07a1822031f3be72ae15e1b43b64aac4d077ad16f12babaa343eaba9bf8040c9b34c1bbbe65b4c2e03db1fa3a9e19109cdc3be17f46e1fa44a34a78f06601a526bb78003915f3c25f42b57c8a8f765c429d00187e0c00bba8f549f5b4daeaabf5b3e5415899cb0475a2fda8566abadf720fa35563895ee8f4f51e8782b261b2","enabled":true},{"key":"client_id","value":"915649b0-a426-4d24-8460-66365dd7a123","enabled":true},{"key":"client_secret","value":"gaXm2zO3ZmQs7HBvQRlAf6aL6mbW2GlLPguMUEUu","enabled":true},{"key":"checkout_client_id","value":"ca6ba032-1ed5-4637-a645-1f0f8cb22511","enabled":true},{"key":"code_grant_client_id","value":"918d181a-feaf-4e40-8aa4-9fd1123b5d73","enabled":true},{"key":"code_verifier","value":"6tw18bBXjVGzFeDyJLMrQBb14JPcIJn20SmB050J05KxQ3gQZxNwVeGYqmFF9p5PXUC4AZ6eHTFY2HPwAdABM98hlnrzuwx3EjeIhzGHUsWvBaqngDWxRTCiRuPoBCNO","enabled":true},{"key":"code","value":"","enabled":true},{"key":"checkout_token","value":"{{checkout_token}}","enabled":true},{"key":"checkout_session_id","value":"1b6a3170-a136-401d-8c63-2aa33675281b","enabled":true},{"key":"user_email","value":"qa-ui_postman_1630074082@test.com","enabled":true},{"key":"user_token","value":"1YLGlM4hTh3WFeRCD0YLpQhQuvZU7LnuTmHhywke","enabled":true},{"key":"testEmail","value":"","enabled":true},{"key":"userToken","value":"","enabled":true},{"key":"access_token_org","value":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiI5NGI5NzM1Ny04Y2I2LTQyZGItYjg3Zi1jODA4YzIxYzgyYWYiLCJqdGkiOiI0YjNlMmQ4ZTUyNGNjMDA1MTliZTMxMDVmNGY1MWE4ZTU3Yzc0YjcxMTgwZWIzNjMxMmYyNjU2NWY1MjUxYTUzZWVjZjllZDc2ZDE3ZmU0YyIsImlhdCI6MTYzNjEyNDcwMS43ODEwMTQsIm5iZiI6MTYzNjEyNDcwMS43ODEwMTgsImV4cCI6MTYzNzQyMDcwMS40Mjc1MTUsInN1YiI6IjMiLCJzY29wZXMiOlsiKiJdLCJvcmciOjEwMH0.s5Kayce9QNyxe3ur6WTs0Rjw8NMkrg4sB_ZmX4439p25Sc5pL4VsNfweZfheYQ6btsvQqh3JsLtgQuqIzs0V_VTohAwB8C5y8NA3k56VI3mZt8hq5sQfRIaNxUQbQfcZ0mdVoiOWzNAE1GJQXA0_hZTFJOAEgOHfQlZW3d4L6T9saz5jwGXaJAbxeSDbi-Ac41h9IykvvOFxdfHcPKJoqt0ycx7m0WR9liDI5duUZkmAB05BgEm6yf3EYsSYPGPtjDEV8w8VjkW78Sh6DbWp7BtxAuXomcPr7lgW-IuoPauHl7jF0LO5R9q0H-g-nsP6Obnq8hmI8-5pMaKcXmeJ9iGPNA4i4WXyhesyXYh1qXk4QaMy2h9kB8G2FUP5LW3veh_2SPkEG6IZ_2jcIClFDEzMTzeZxjLVtL2h-bXqVBZiWbJvwtmb-iCTKTmZbTOlElIzlpxoIJVDhKe0UTiY3wz_cEbF75vgkGReuPURN4CopCeJBRfBJUWxTkwGVNSRK9csWZEZwlXzcEEaQLdsY1HS_ukJ9xRSdinuAZD2AP5A8HaQK4GeRTA1EPCDE8i-Jn7gC3Ct7wi8zz4HttqT44tZ0DVVzRZa08_Kk-Yk3Kt5W-Frat3V6yMpxI7t35SDc9-_xuXb7IvPP75_QzB8uyF2eW68BDPlM0p8dVl92ss","enabled":true},{"key":"refresh_token_org","value":"def502003ab40ee2c92467d181143000b4daf0c774716619f421ac90cb488993375ed2945f9b3b89f7c95b558c6956fddc0153535ba1e1e731d19ceae1fe0fd0c6b5b081bd8559bd6917e97e7523300713965208ccb8305b5c709ae6093a328471299e713eef3c64a0cd9ecea8b494958c036027eb19423ac137620fdc777e5765d24dcd539e7045608efeca0bdd2f277c7567dd2338519aeac74006c5cbb6e72db39d266345650e047cdd6e0ab087e64d4f888b52b14cd259a86a4b64c4753de841085782c1a7625caf00e18058a2851c4f17a089d58fb45ba34291c2515365332f0447495b73ad52638127726896f9d766d18ef735430c32f8e126eb2cb710e337dcb2a99046b470174bf8219d840650ce617ac24eae85620ee7fa8216a72ce591d03f4157482726071ad5b2230cc1822891e7ace430f91f1868bf62fe1657318dab2d2eb9d3c9c70ede2cb8ce04af5b83257778740ef6dc8fed8dab036f9a5b2dda94817ed6ecce53392773578039b9ecb95b00aab2440e7d7ab0d603da4b3aeff621164bdf","enabled":true},{"key":"order_id","value":"ord_zpp","enabled":true},{"key":"cartId","value":"97a005db-bc20-4c08-be79-a297cb27a81e","enabled":true},{"key":"vgs_card_tokens","value":"{\"cvc\":\"tok_sandbox_k5ovGEzz8eHMXMV2jUFipV\",\"exp_month\":\"3\",\"exp_year\":\"2024\",\"name\":\"Tiago Gomes\",\"number\":\"tok_sandbox_3VGpYrFCSP8DPPw6M2XkfF\"}","enabled":true},{"key":"vgs_url","value":"https://tntrsqyvcg5.SANDBOX.verygoodproxy.com","enabled":true},{"key":"vgs_vault","value":"tntrsqyvcg5","enabled":true},{"key":"platform_id","value":"app_N9j","enabled":true},{"key":"app_id","value":"app_dME","enabled":true},{"key":"authorization_grant_code","value":"def5020043efda952f9b9a5d70a0c48ff68e3db825343dc6ae24e7fd8371bf486db9f00bad740ab763509967914e99fb9b144de004787f202d7082d2db4a521e5e29f4e42ba06a8ee5e1993b47bad6bfb0355269d68fef591a2e2c0bae0a0dda2ed01f1a54acac3a5d58c6b676c0ee9589c7823d267f16c9d9824ce3fa988c4742299f44053d81e5d0148573e6ac2dc29fe8a8b375240d754f53838e50914d8ca61bcdfcc2331a0c40bd00a412a7a6b9c2f956620ffdd1065f7c1e789289f5541d4919ce524b269f9d95696212c20575b4ea6636008bacbd6c8570d491d4fe15eb845ef21a2c409ba5e167cb5b7849f4d6addecb880df89074a6fc70b6e74a8ec62488209e0b3b43ebb111ad16df3dddc70b27f2adb3e4245d1e6b1561c892ad92b9aafe11645e7800252e636bb80b4dbe36af66ce8fc79dcbd3199a97c0869ec6dab52fe69b03dfb7d4b27dbbafda474108e26cf49c6329cba021f3f771784aab89a1c9bc1e56fca8d6a4780ecb04e25d660c189695fa06470c1e54dd7609bbc46f8fbb3590795c7ca800ae75f24023e3854f467eab153090594099aebe7acefb8be006d4eb1bc270adfa7e1eedf3ef8de81dce15a78fc8ecb546de015d54781bf10d252b07e382618db084590239dd13823e5faaf9cb0424300fe8c605e0bfb4","enabled":true},{"key":"organization_id","value":"org_Z0y","enabled":true},{"key":"qa_client_id","value":"2ecc9990-7227-4d19-8921-4cd8d5b8a827","enabled":true},{"key":"hmac","value":"Lwm0/pkGrVluL141eHfGQG2Y57O0j2BIEZU2Bjokx6k=","enabled":true},{"key":"asset_id","value":"apa_XBM","enabled":true},{"key":"merchant_id","value":"","enabled":true},{"key":"product_id","value":"prd_Z6V","enabled":true},{"key":"page_id","value":"pg_aOq","enabled":true},{"key":"page_template_id","value":"pgt_aOq","enabled":true},{"key":"rally_pay_token","value":"","enabled":true},{"key":"app_access_token","value":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJhdWQiOiI2MmU0MjRiNS01YmZhLTRiODYtOGU5OS02OTU0MzU3N2VjZmQiLCJqdGkiOiIwZjk5MDg4ODU4Y2M5ZGFkYWJjMjBjMDk5ZmRjMzY2YzQyNmM4Y2ZkZTM3MzI4OGI3NzAzZWNjYjA0NjE3YjFmYTBhZThjYjA5OTcxZjhiOCIsImlhdCI6MTYyOTIxOTUxOS4xMTAzMzMsIm5iZiI6MTYyOTIxOTUxOS4xMTAzMzcsImV4cCI6MTYzMDUxNTUxOS4wNDM2Mywic3ViIjoiNCIsInNjb3BlcyI6WyJtZXJjaGFudHMucmVhZCIsImFzc2V0cy5yZWFkIl19.RZc75nxazex60fhD_5yxLqdvWxpiRYrsIKrKjA9ftcWx1U6ZJuuyF-WtYogh373M6RlhBiw18bGmVcNf8fXpJtovBItirJAIEyo9Ve0jxGPXMDoNb9MBR99VKq55DOahiQvQNjkHaoFeTGSSWnb_EMfYRzVypK6ixvu6K-pHMfSnG4pC8HQj1i1n7zR-u2r_lchMTHllK62cAdVfDFUzSFPT1ffF5KzGxdrot_vOBCkUPEHzl0JJ8RdXoP2OhLPMGnVQ2WVsZ2JCh62b-WMaSH_4dLsoynJUCCBA_DzOTn_gVpT3qOqLOKUJinlGvbEe3hVqihKTX-Kx3brlKWwtw4i8dOg7l6rbdt12eMZYsXNDEhzfsIDi4Po6W2os1QeCI_rjygYBX4_DLMfoewU3imnhSxuSlzj4LaOYUf-aRxxh_rVcxJuO8IuQpVmRJB37D37JHSwOX65-_sY2znwYBXyIIdWljb1RCvrUoSWoLNmwU6PlhZRG0LACQ-X9xuoNrE_w3D_4oVaCJIORH-P4F61wz9CD7p2Wj5g6fxxQgQtcGkdve3dg_WEIRPNN8hizOFWwV19oGyW16retTUc6lbISZmgMNtuNn_SAXZIs1xTr_Enml6Cjfi0uoNdvTOlHSkSzwNs6IZ3e5XYupdDwISJ0ifuOMRKKF-t6_FxYUS4","enabled":true},{"key":"webhook_id","value":"","enabled":true},{"key":"qa2_client_id","value":"ca6ba032-1ed5-4637-a645-1f0f8cb22511","enabled":true},{"key":"vgs_card_number","value":"","enabled":true},{"key":"vgs_card_cvs","value":"","enabled":true},{"key":"swell_client_id","value":"rally-dev","enabled":true},{"key":"swell_client_key","value":"82JjvvkrjRkhOf4xYAVLsCLDn9rmL8uv","enabled":true},{"key":"swell_product_id","value":"5e19feb6f0295d688e8fa1ca","enabled":true},{"key":"swell_checkout_id","value":"9472f2a7-9418-4404-97b0-b71afd6bd10c","enabled":true},{"key":"api_key_clent_id","value":"dac83f8f-7a01-4647-bf4a-731537a3cd67","enabled":true},{"key":"api_key_merchant_client","value":"98f3d1b7-8ac5-4932-9946-e33f00c19841","enabled":true},{"key":"existing_app_id","value":"","enabled":true},{"key":"bc_shop","value":"roks-rocks","enabled":true},{"key":"funnel_id","value":"","enabled":true},{"key":"offer_id","value":"","enabled":true},{"key":"productId","value":"","enabled":true,"type":"any"},{"key":"bc_shop_url","value":"roks-rocks.mybigcommerce.com","enabled":true,"type":"default"},{"key":"bc_token","value":"9s1xee4mtzw53gssa13116r9vmb1obe","enabled":true,"type":"any"},{"key":"checkout_session_token","value":"","enabled":true,"type":"any"},{"key":"swell_checkout_client_id","value":"e48d5af1-fd36-40f1-8056-896852f64a9a","enabled":true,"type":"default"},{"key":"authorize_token","value":"","enabled":true,"type":"any"},{"key":"commercetools_access_token","value":"","enabled":true,"type":"any"},{"key":"commercetools_project_key","value":"rally-dev-1","enabled":true,"type":"default"},{"key":"commercetools_client_id","value":"lUK4tilSbu2wZaSG2e4d4cN6","enabled":true,"type":"default"},{"key":"commercetools_client_secret","value":"PTcoFeisV0ENplSWVA3pEV5eLfBZG9yD","enabled":true,"type":"default"},{"key":"bc_store_hash","value":"6m3mcoha7z","enabled":true,"type":"default"},{"key":"cheap_product_id","value":"","enabled":true,"type":"any"},{"key":"current_login_attempt","value":"0","enabled":true,"type":"default"},{"key":"template_id","value":"","enabled":true,"type":"any"},{"key":"offer_name","value":"","enabled":true,"type":"any"},{"key":"magento_shop_url","value":"https://magento-develop.onrally.dev","enabled":true,"type":"default"},{"key":"magento_shop_id","value":"aHR0cHM6Ly9tYWdlbnRvLWRldmVsb3Aub25yYWxseS5kZXYv","enabled":true,"type":"default"},{"key":"AUTHORIZATION","value":"","enabled":true,"type":"any"},{"key":"store_hash","value":"6m3mcoha7z","enabled":true}],"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/21eb144f90cb1ea877ced1b44602e8819230e8c0f16f4880e5dc60f74df4e94f","favicon":"https://res.cloudinary.com/postman/image/upload/v1618824499/team/ob4ra4tplbvpajepdkwq.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":"Dev Rally API 🔵   [api.develop.rallyon.dev]","value":"12351272-3073398a-e1db-4d6b-8b30-8cccc17a46f7"}],"canonicalUrl":"https://api-docs.rallyon.com/view/metadata/TzJsge56"}