{"__v":6,"_id":"56d0f300b2cb7013004de867","api":{"auth":"required","params":[],"results":{"codes":[]},"settings":"","url":""},"body":"**SnowShoe stamps can be uniquely identified by smartphones.**\nWith them, you can verify a purchase, distribute exclusive music or video content, opt into a marketing campaign, confirm a user’s identity, and more.\n\n**100% trackable**\nStamps are uniquely identifiable, making tracking users, redemptions and engagement easier than ever.\n\n**Works on iOS + Android**\nStamps work on both iOS and Android devices, in mobile websites and native applications.\n\n**Magical experience**\nDeliver new experiences to your customer that they will actually enjoy.\n\n*How it Works*\nStamps work using the capacitance of your body and touchscreen. When a stamp comes into full contact with the screen, the mobile device sees \"5-fingers\" in a very specific pattern. We use this pattern to authenticate which stamp is in-use, and then return this info to you. At that point, you make the magic happen!\n\nBecause your body is an electrical conductor, providing much of the energy for the interaction, it's important that you hold the phone while stamping for best results.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/CUADYXqqTNSNbClEvaZe_how_snowshoe_works.jpg\",\n        \"how_snowshoe_works.jpg\",\n        \"1280\",\n        \"400\",\n        \"#d79a8b\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nAnd SnowShoe software is easy to integrate. We love easy-to-implement, well documented API's. Our aim is to provided you concise, relevant documentation to get you and your team up and stamping with SnowShoe with as little effort as possible.\n\nWe would love to hear from you. Please send any comments, suggestions or San Francisco food recommendations to [support@snow.sh](mailto:support@snow.sh).","category":"5512f24ef5056719008df200","createdAt":"2016-02-27T00:51:12.646Z","excerpt":"Welcome to the home of SnowShoe Documentation","githubsync":"","hidden":false,"link_external":false,"link_url":"","order":0,"project":"55087b0f6065ed17002643ce","slug":"what-is-snowshoe","sync_unique":"","title":"What is SnowShoe?","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

What is SnowShoe?

Welcome to the home of SnowShoe Documentation

**SnowShoe stamps can be uniquely identified by smartphones.** With them, you can verify a purchase, distribute exclusive music or video content, opt into a marketing campaign, confirm a user’s identity, and more. **100% trackable** Stamps are uniquely identifiable, making tracking users, redemptions and engagement easier than ever. **Works on iOS + Android** Stamps work on both iOS and Android devices, in mobile websites and native applications. **Magical experience** Deliver new experiences to your customer that they will actually enjoy. *How it Works* Stamps work using the capacitance of your body and touchscreen. When a stamp comes into full contact with the screen, the mobile device sees "5-fingers" in a very specific pattern. We use this pattern to authenticate which stamp is in-use, and then return this info to you. At that point, you make the magic happen! Because your body is an electrical conductor, providing much of the energy for the interaction, it's important that you hold the phone while stamping for best results. [block:image] { "images": [ { "image": [ "https://files.readme.io/CUADYXqqTNSNbClEvaZe_how_snowshoe_works.jpg", "how_snowshoe_works.jpg", "1280", "400", "#d79a8b", "" ] } ] } [/block] And SnowShoe software is easy to integrate. We love easy-to-implement, well documented API's. Our aim is to provided you concise, relevant documentation to get you and your team up and stamping with SnowShoe with as little effort as possible. We would love to hear from you. Please send any comments, suggestions or San Francisco food recommendations to [support@snow.sh](mailto:support@snow.sh).
**SnowShoe stamps can be uniquely identified by smartphones.** With them, you can verify a purchase, distribute exclusive music or video content, opt into a marketing campaign, confirm a user’s identity, and more. **100% trackable** Stamps are uniquely identifiable, making tracking users, redemptions and engagement easier than ever. **Works on iOS + Android** Stamps work on both iOS and Android devices, in mobile websites and native applications. **Magical experience** Deliver new experiences to your customer that they will actually enjoy. *How it Works* Stamps work using the capacitance of your body and touchscreen. When a stamp comes into full contact with the screen, the mobile device sees "5-fingers" in a very specific pattern. We use this pattern to authenticate which stamp is in-use, and then return this info to you. At that point, you make the magic happen! Because your body is an electrical conductor, providing much of the energy for the interaction, it's important that you hold the phone while stamping for best results. [block:image] { "images": [ { "image": [ "https://files.readme.io/CUADYXqqTNSNbClEvaZe_how_snowshoe_works.jpg", "how_snowshoe_works.jpg", "1280", "400", "#d79a8b", "" ] } ] } [/block] And SnowShoe software is easy to integrate. We love easy-to-implement, well documented API's. Our aim is to provided you concise, relevant documentation to get you and your team up and stamping with SnowShoe with as little effort as possible. We would love to hear from you. Please send any comments, suggestions or San Francisco food recommendations to [support@snow.sh](mailto:support@snow.sh).
{"__v":3,"_id":"56d0f1f07c2e100b000afa2e","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"[block:callout]\n{\n  \"type\": \"success\",\n  \"title\": \"Updated SnowShoe jQuery Library\",\n  \"body\": \"Our jQuery library has been updated to v0.3.0. It included fixes for the Chrome browser on Android. You can find more information on its [README](https://github.com/snowshoestamp/snowshoe_jquery).\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"success\",\n  \"title\": \"User Training & Help Messaging\",\n  \"body\": \"Our jQuery library supports the idea of User Training -- helpful messaging instructing your users on how to use the stamp most effectively. Read more [here](https://snowshoe.readme.io/docs/api-references-overview#help-messages).\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"success\",\n  \"title\": \"A Full Example\",\n  \"body\": \"Check out a simple, but complete SnowShoe example in Node/Express + jQuery [here](https://github.com/snowshoestamp/snowshoe-examples/tree/master/express).\"\n}\n[/block]","category":"5512f24ef5056719008df200","createdAt":"2016-02-27T00:46:40.911Z","excerpt":"","githubsync":"","hidden":false,"link_external":false,"link_url":"","order":2,"project":"55087b0f6065ed17002643ce","slug":"whats-new","sync_unique":"","title":"What's New","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

What's New


[block:callout] { "type": "success", "title": "Updated SnowShoe jQuery Library", "body": "Our jQuery library has been updated to v0.3.0. It included fixes for the Chrome browser on Android. You can find more information on its [README](https://github.com/snowshoestamp/snowshoe_jquery)." } [/block] [block:callout] { "type": "success", "title": "User Training & Help Messaging", "body": "Our jQuery library supports the idea of User Training -- helpful messaging instructing your users on how to use the stamp most effectively. Read more [here](https://snowshoe.readme.io/docs/api-references-overview#help-messages)." } [/block] [block:callout] { "type": "success", "title": "A Full Example", "body": "Check out a simple, but complete SnowShoe example in Node/Express + jQuery [here](https://github.com/snowshoestamp/snowshoe-examples/tree/master/express)." } [/block]
[block:callout] { "type": "success", "title": "Updated SnowShoe jQuery Library", "body": "Our jQuery library has been updated to v0.3.0. It included fixes for the Chrome browser on Android. You can find more information on its [README](https://github.com/snowshoestamp/snowshoe_jquery)." } [/block] [block:callout] { "type": "success", "title": "User Training & Help Messaging", "body": "Our jQuery library supports the idea of User Training -- helpful messaging instructing your users on how to use the stamp most effectively. Read more [here](https://snowshoe.readme.io/docs/api-references-overview#help-messages)." } [/block] [block:callout] { "type": "success", "title": "A Full Example", "body": "Check out a simple, but complete SnowShoe example in Node/Express + jQuery [here](https://github.com/snowshoestamp/snowshoe-examples/tree/master/express)." } [/block]
{"__v":32,"_id":"55133d37f382620d0082e0bb","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"**Front-end:**\n- [SnowShoe jQuery Module](https://github.com/snowshoestamp/snowshoe_jquery/)\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"SnowShoe CDN\",\n  \"body\": \"SnowShoe jQuery Module:\\n-- v0.3.0: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.0/jquery.snowshoe.js\\n-- v0.3.0 minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.0/jquery.snowshoe.min.js\",\n  \"sidebar\": true\n}\n[/block]\n**Server-side:**\n- [SnowShoe Ruby Gem](https://github.com/snowshoestamp/snowshoe_ruby/)\n- [SnowShoe Node.js Package](https://github.com/snowshoestamp/snowshoe_node/)\n- [SnowShoe Wordpress Plugin](https://github.com/snowshoestamp/snowshoe_wordpress)\n\nOptionally, SnowShoe also provides two SDK's for download:\n- Python\n  - [Python SDK](http://beta.snowshoestamp.com/static/api/zip/python.zip)\n  - [Python SDK Quickstart Guide](https://medium.com/p/f623bb162f4e)\n\n- PHP\n  - [PHP SDK](http://beta.snowshoestamp.com/static/api/zip/php.zip)\n  - [PHP SDK Quickstart Guide](https://medium.com/p/1a5b2db67f21)\n\n**Native mobile:**\n- [iOS Swift 2 SDK](https://github.com/snowshoestamp/snowshoe-swift)\n- [Android SDK](https://github.com/snowshoestamp/snowshoe-android-v2)\n\nAlso, check out these libraries that may help in your SnowShoe development thanks to our fantastic community of developers like you.\n\n- [iOS SDK](https://github.com/mluedke2/snowshoe)\n- [Android SDK](https://github.com/mluedke2/snowshoe-android)\n- [Java SDK](https://beta.snowshoestamp.com/static/api/zip/java.zip)","category":"5512f24ef5056719008df200","createdAt":"2015-03-25T22:56:55.352Z","excerpt":"Here's a list of the SnowShoe maintained libraries. These make pages in your app stampable. Planning to use the SnowShoe-hosted stamp screen? If so, check out our how-to [here](doc:hello-world). Otherwise, \n\n**For web applications**, you'll need to use both our \n   1. **_Front-end library_** (to recognize the stamp and submit this data to your app's backend)\n   2. **_One of our server-side libraries_** (to package this data up and submit it to the SnowShoe API for recognition).\n\n**For Wordpress sites**, you'll need to use both our\n   1. **_Front-end library_** (to recognize the stamp and submit this data to your Wordpress backend)\n   2. **_Our Wordpress Plugin_** (to automatically setup an endpoint on your Wordpress backend, package the stamp data up and submit it to the SnowShoe API for recognition).\n\n**For native applications**, you'll just use **_one of our Native mobile libraries_**. These contain the code to both recognize data from the stamp and submit this data to the SnowShoe API for recognition.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":3,"project":"55087b0f6065ed17002643ce","slug":"maintained-libraries","sync_unique":"","title":"Libraries","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Libraries

Here's a list of the SnowShoe maintained libraries. These make pages in your app stampable. Planning to use the SnowShoe-hosted stamp screen? If so, check out our how-to [here](doc:hello-world). Otherwise, **For web applications**, you'll need to use both our 1. **_Front-end library_** (to recognize the stamp and submit this data to your app's backend) 2. **_One of our server-side libraries_** (to package this data up and submit it to the SnowShoe API for recognition). **For Wordpress sites**, you'll need to use both our 1. **_Front-end library_** (to recognize the stamp and submit this data to your Wordpress backend) 2. **_Our Wordpress Plugin_** (to automatically setup an endpoint on your Wordpress backend, package the stamp data up and submit it to the SnowShoe API for recognition). **For native applications**, you'll just use **_one of our Native mobile libraries_**. These contain the code to both recognize data from the stamp and submit this data to the SnowShoe API for recognition.

**Front-end:** - [SnowShoe jQuery Module](https://github.com/snowshoestamp/snowshoe_jquery/) [block:callout] { "type": "info", "title": "SnowShoe CDN", "body": "SnowShoe jQuery Module:\n-- v0.3.0: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.0/jquery.snowshoe.js\n-- v0.3.0 minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.0/jquery.snowshoe.min.js", "sidebar": true } [/block] **Server-side:** - [SnowShoe Ruby Gem](https://github.com/snowshoestamp/snowshoe_ruby/) - [SnowShoe Node.js Package](https://github.com/snowshoestamp/snowshoe_node/) - [SnowShoe Wordpress Plugin](https://github.com/snowshoestamp/snowshoe_wordpress) Optionally, SnowShoe also provides two SDK's for download: - Python - [Python SDK](http://beta.snowshoestamp.com/static/api/zip/python.zip) - [Python SDK Quickstart Guide](https://medium.com/p/f623bb162f4e) - PHP - [PHP SDK](http://beta.snowshoestamp.com/static/api/zip/php.zip) - [PHP SDK Quickstart Guide](https://medium.com/p/1a5b2db67f21) **Native mobile:** - [iOS Swift 2 SDK](https://github.com/snowshoestamp/snowshoe-swift) - [Android SDK](https://github.com/snowshoestamp/snowshoe-android-v2) Also, check out these libraries that may help in your SnowShoe development thanks to our fantastic community of developers like you. - [iOS SDK](https://github.com/mluedke2/snowshoe) - [Android SDK](https://github.com/mluedke2/snowshoe-android) - [Java SDK](https://beta.snowshoestamp.com/static/api/zip/java.zip)
**Front-end:** - [SnowShoe jQuery Module](https://github.com/snowshoestamp/snowshoe_jquery/) [block:callout] { "type": "info", "title": "SnowShoe CDN", "body": "SnowShoe jQuery Module:\n-- v0.3.0: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.0/jquery.snowshoe.js\n-- v0.3.0 minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.0/jquery.snowshoe.min.js", "sidebar": true } [/block] **Server-side:** - [SnowShoe Ruby Gem](https://github.com/snowshoestamp/snowshoe_ruby/) - [SnowShoe Node.js Package](https://github.com/snowshoestamp/snowshoe_node/) - [SnowShoe Wordpress Plugin](https://github.com/snowshoestamp/snowshoe_wordpress) Optionally, SnowShoe also provides two SDK's for download: - Python - [Python SDK](http://beta.snowshoestamp.com/static/api/zip/python.zip) - [Python SDK Quickstart Guide](https://medium.com/p/f623bb162f4e) - PHP - [PHP SDK](http://beta.snowshoestamp.com/static/api/zip/php.zip) - [PHP SDK Quickstart Guide](https://medium.com/p/1a5b2db67f21) **Native mobile:** - [iOS Swift 2 SDK](https://github.com/snowshoestamp/snowshoe-swift) - [Android SDK](https://github.com/snowshoestamp/snowshoe-android-v2) Also, check out these libraries that may help in your SnowShoe development thanks to our fantastic community of developers like you. - [iOS SDK](https://github.com/mluedke2/snowshoe) - [Android SDK](https://github.com/mluedke2/snowshoe-android) - [Java SDK](https://beta.snowshoestamp.com/static/api/zip/java.zip)
{"__v":25,"_id":"5512fc2d4d7e7417002a3af7","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"This section will get you up and running quickly with a fully functional SnowShoe project.  But we suggest you read the [best practices guide](doc:snowshoe-jquery-extras)  to ensure an optimal experience for your users.  After getting your keys and secrets by [creating an application on SnowShoe's platform](doc:creating-a-snowshoe-application), a full integration with the SnowShoe API usually involves three parts:\n- **Part 1:** Gather the stamp data from a mobile device after a user \"stamps\" the screen and submit it to your backend server\n- **Part 2:** Have your backend server send the data to the SnowShoe API for authentication as an OAuth wrapped ``POST`` request.\n- **Part 3:** Handle the API response (either a success or error) and do something unique for the user (like, deliver a secret asset!).\n\nFor Part 3, success/errors can be handled either in your front-end (via AJAX and a callback) or, more typically, in your backend after the response is received.\n\nIf you have yet to create an account or SnowShoe application, please visit [Creating A SnowShoe Application](doc:creating-a-snowshoe-application).\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"SnowShoe Experience Builder\",\n  \"body\": \"If you are not a developer and want to create a demo, please see our article [Create a Demo Application Without Coding](doc:create-a-demo-application-without-coding).\"\n}\n[/block]","category":"56d0f236b2cb7013004de864","createdAt":"2015-03-25T18:19:25.166Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":0,"project":"55087b0f6065ed17002643ce","slug":"developer-guides-overview","sync_unique":"","title":"Getting Started: Overview","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Getting Started: Overview


This section will get you up and running quickly with a fully functional SnowShoe project. But we suggest you read the [best practices guide](doc:snowshoe-jquery-extras) to ensure an optimal experience for your users. After getting your keys and secrets by [creating an application on SnowShoe's platform](doc:creating-a-snowshoe-application), a full integration with the SnowShoe API usually involves three parts: - **Part 1:** Gather the stamp data from a mobile device after a user "stamps" the screen and submit it to your backend server - **Part 2:** Have your backend server send the data to the SnowShoe API for authentication as an OAuth wrapped ``POST`` request. - **Part 3:** Handle the API response (either a success or error) and do something unique for the user (like, deliver a secret asset!). For Part 3, success/errors can be handled either in your front-end (via AJAX and a callback) or, more typically, in your backend after the response is received. If you have yet to create an account or SnowShoe application, please visit [Creating A SnowShoe Application](doc:creating-a-snowshoe-application). [block:callout] { "type": "info", "title": "SnowShoe Experience Builder", "body": "If you are not a developer and want to create a demo, please see our article [Create a Demo Application Without Coding](doc:create-a-demo-application-without-coding)." } [/block]
This section will get you up and running quickly with a fully functional SnowShoe project. But we suggest you read the [best practices guide](doc:snowshoe-jquery-extras) to ensure an optimal experience for your users. After getting your keys and secrets by [creating an application on SnowShoe's platform](doc:creating-a-snowshoe-application), a full integration with the SnowShoe API usually involves three parts: - **Part 1:** Gather the stamp data from a mobile device after a user "stamps" the screen and submit it to your backend server - **Part 2:** Have your backend server send the data to the SnowShoe API for authentication as an OAuth wrapped ``POST`` request. - **Part 3:** Handle the API response (either a success or error) and do something unique for the user (like, deliver a secret asset!). For Part 3, success/errors can be handled either in your front-end (via AJAX and a callback) or, more typically, in your backend after the response is received. If you have yet to create an account or SnowShoe application, please visit [Creating A SnowShoe Application](doc:creating-a-snowshoe-application). [block:callout] { "type": "info", "title": "SnowShoe Experience Builder", "body": "If you are not a developer and want to create a demo, please see our article [Create a Demo Application Without Coding](doc:create-a-demo-application-without-coding)." } [/block]
{"__v":6,"_id":"5519a6022f1af40d00cff62f","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Before we begin, head to [snow.sh](http://snow.sh/applications/application/list) and log in or signup.\n\nOnce logged in, you should see your dashboard. The dashboard is your one-stop-shop for creating, modifying and monitoring all of your SnowShoe applications. It should look something like this:\n[block:image]\n{\n  \"images\": [\n    {\n      \"caption\": \"\",\n      \"image\": [\n        \"https://files.readme.io/TzlYabUQmitprhtjKv5w_1*CORwJWYiDEb41d5CXanl6g.jpeg\",\n        \"1*CORwJWYiDEb41d5CXanl6g.jpeg\",\n        \"1612\",\n        \"828\",\n        \"#3579a7\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nThe applications view lists all of your SnowShoe apps. If you followed our [First App Wizard](http://snow.sh/wiz), the app you created should be listed here.\n\nClick the blue “New App” button. This will bring up an “App Details” page:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/LrY2PaIlRSaFnl5puYOX_1*YZKKNvY-e_dH93CO7FmvLg.jpeg\",\n        \"1*YZKKNvY-e_dH93CO7FmvLg.jpeg\",\n        \"1612\",\n        \"828\",\n        \"#3a92d2\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nAll we need right now is a name. Enter the name of your choice in the top field, scroll to the bottom of the page, and click “save”.\n\nOn a successful save, a new header should have just appeared that displays your new app’s Name, its Application Key and Application Secret. \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/VT4LRZZgSDatSWku2n0p_1*Ann0BO6N-Z_nMdkboPkl-g.jpeg\",\n        \"1*Ann0BO6N-Z_nMdkboPkl-g.jpeg\",\n        \"1612\",\n        \"828\",\n        \"#347e9b\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nNow, with your newly created app and its key and secret you're ready to head to [Part 1: Stamp Screen](doc:part-1-stamp-screen).","category":"56d0f236b2cb7013004de864","createdAt":"2015-03-30T19:37:38.627Z","excerpt":"","githubsync":"","hidden":false,"link_external":false,"link_url":"","order":2,"project":"55087b0f6065ed17002643ce","slug":"creating-a-snowshoe-application","sync_unique":"","title":"Creating A SnowShoe Application","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Creating A SnowShoe Application


Before we begin, head to [snow.sh](http://snow.sh/applications/application/list) and log in or signup. Once logged in, you should see your dashboard. The dashboard is your one-stop-shop for creating, modifying and monitoring all of your SnowShoe applications. It should look something like this: [block:image] { "images": [ { "caption": "", "image": [ "https://files.readme.io/TzlYabUQmitprhtjKv5w_1*CORwJWYiDEb41d5CXanl6g.jpeg", "1*CORwJWYiDEb41d5CXanl6g.jpeg", "1612", "828", "#3579a7", "" ] } ] } [/block] The applications view lists all of your SnowShoe apps. If you followed our [First App Wizard](http://snow.sh/wiz), the app you created should be listed here. Click the blue “New App” button. This will bring up an “App Details” page: [block:image] { "images": [ { "image": [ "https://files.readme.io/LrY2PaIlRSaFnl5puYOX_1*YZKKNvY-e_dH93CO7FmvLg.jpeg", "1*YZKKNvY-e_dH93CO7FmvLg.jpeg", "1612", "828", "#3a92d2", "" ] } ] } [/block] All we need right now is a name. Enter the name of your choice in the top field, scroll to the bottom of the page, and click “save”. On a successful save, a new header should have just appeared that displays your new app’s Name, its Application Key and Application Secret. [block:image] { "images": [ { "image": [ "https://files.readme.io/VT4LRZZgSDatSWku2n0p_1*Ann0BO6N-Z_nMdkboPkl-g.jpeg", "1*Ann0BO6N-Z_nMdkboPkl-g.jpeg", "1612", "828", "#347e9b", "" ] } ] } [/block] Now, with your newly created app and its key and secret you're ready to head to [Part 1: Stamp Screen](doc:part-1-stamp-screen).
Before we begin, head to [snow.sh](http://snow.sh/applications/application/list) and log in or signup. Once logged in, you should see your dashboard. The dashboard is your one-stop-shop for creating, modifying and monitoring all of your SnowShoe applications. It should look something like this: [block:image] { "images": [ { "caption": "", "image": [ "https://files.readme.io/TzlYabUQmitprhtjKv5w_1*CORwJWYiDEb41d5CXanl6g.jpeg", "1*CORwJWYiDEb41d5CXanl6g.jpeg", "1612", "828", "#3579a7", "" ] } ] } [/block] The applications view lists all of your SnowShoe apps. If you followed our [First App Wizard](http://snow.sh/wiz), the app you created should be listed here. Click the blue “New App” button. This will bring up an “App Details” page: [block:image] { "images": [ { "image": [ "https://files.readme.io/LrY2PaIlRSaFnl5puYOX_1*YZKKNvY-e_dH93CO7FmvLg.jpeg", "1*YZKKNvY-e_dH93CO7FmvLg.jpeg", "1612", "828", "#3a92d2", "" ] } ] } [/block] All we need right now is a name. Enter the name of your choice in the top field, scroll to the bottom of the page, and click “save”. On a successful save, a new header should have just appeared that displays your new app’s Name, its Application Key and Application Secret. [block:image] { "images": [ { "image": [ "https://files.readme.io/VT4LRZZgSDatSWku2n0p_1*Ann0BO6N-Z_nMdkboPkl-g.jpeg", "1*Ann0BO6N-Z_nMdkboPkl-g.jpeg", "1612", "828", "#347e9b", "" ] } ] } [/block] Now, with your newly created app and its key and secret you're ready to head to [Part 1: Stamp Screen](doc:part-1-stamp-screen).
{"__v":42,"_id":"5512fc6aa4d48f35004e1bb6","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"There are 2 flavors of stamp screen: *SnowShoe-hosted* or *self-hosted*.\n\n##SnowShoe-Hosted Stamp Screen\nFor directions on implementing this, check out our [Hello, World](doc:hello-world) article.  Your workflow will look like...\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/r5FARnSGS8uYBWx9Y0o2_SSS_API_DIAGRAM_ss-hosted_stamp_screen.png\",\n        \"SSS_API_DIAGRAM_ss-hosted_stamp_screen.png\",\n        \"1416\",\n        \"753\",\n        \"#2d5575\",\n        \"\"\n      ],\n      \"caption\": \"You can find the URL of your SnowShoe-hosted stamp screen on the dashboard page for your application.\"\n    }\n  ]\n}\n[/block]\n##Self-hosted Stamp Screen\nIf you'd like to make an existing page of your web or native app \"stampable,\" you just need to implement our [**jQuery plugin**](https://github.com/snowshoestamp/snowshoe_jquery/).  Your workflow will look like...\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/e9sCbmHQRxulI3rFtKtj_SSS_API_DIAGRAM_customer-hosted_stamp_screen.png\",\n        \"SSS_API_DIAGRAM_customer-hosted_stamp_screen.png\",\n        \"1416\",\n        \"753\",\n        \"#2d5575\",\n        \"\"\n      ],\n      \"caption\": \"Any webpage or native app screen can be made stampable. This is great for \\\"hidden\\\" content, as the page maintains normal button and click functionality unless a stamp is touched to the screen.\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"success\",\n  \"body\": \"The newest version of the SnowShoe jQuery plugin (v0.3.0) fixes a bug for stamp detection in Chrome browsers on Android devices, so we recommend you test it in your apps and upgrade as soon as possible if that is an important client base for your application. It is currently in use on the SnowShoe [homepage](http://www.snowshoestamp.com/) and on all demos and SnowShoe-hosted stamp screens.\"\n}\n[/block]\n1) SnowShoe's jQuery project can be found [here on GitHub](https://github.com/snowshoestamp/snowshoe_jquery/).\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// The jQuery namespace created by\\n// jquery.snowshoe.js\\n$.snowshoe\",\n      \"language\": \"javascript\"\n    }\n  ]\n}\n[/block]\nAt the bottom of any page you want to make \"stampable\", create an object with initialization data and include the Snowshoe jQuery module. ``$.snowshoe`` will construct the necessary touch event listener and client to submit stamp data to your backend.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<canvas id=\\\"stamp-screen\\\"></canvas>\\n.\\n.\\n.\\n<!--  Make sure you have sourced jQuery somewhere above this -->\\n<script>\\n  var stampScreenInitData = {\\n    \\\"postUrl\\\": \\\"http://mydomain.com/stampscreen\\\",\\n    // this is the element id of what you want to make stampable\\n    // this can be on a canvas, div or the body\\n    \\\"stampScreenElmId\\\": \\\"stamp-screen\\\"\\n  }\\n</script>\\n<script src=\\\"jquery.snowshoe.js\\\"></script>\\n\",\n      \"language\": \"html\",\n      \"name\": \"\"\n    }\n  ]\n}\n[/block]\nOptionally, post via AJAX by adding the ``postViaAjax`` property and setting its value to ``true``. Then handle success/failure in the client.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<script>\\n  var stampScreenInitData = {\\n    \\\"postUrl\\\": \\\"http://mydomain.com/stampscreen\\\",\\n    \\\"stampScreenElmId\\\": \\\"stamp-screen\\\",\\n    \\\"postViaAjax\\\": true,\\n    \\\"success\\\": function(response){\\n      // handle success\\n      console.log(\\\"Success!\\\");\\n    },\\n    \\\"error\\\": function(response){\\n      // handle failure\\n      console.log(\\\" :-( \\\");\\n    }\\n  }\\n</script>\\n<script src=\\\"jquery.snowshoe.js\\\"></script>\",\n      \"language\": \"html\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Want to add a loading animation?\",\n  \"body\": \"The SnowShoe jQuery plugin comes prebaked with loading animation functionality. Check out how to use it [here](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#progress-bar-animations).\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Want to add helpful messages to encourage a great user experience?\",\n  \"body\": \"**User training** has been added as of the v0.3.0 release. Train users to stamp correctly by utilizing our new dynamic messaging feature. It allows you to display custom messaging onscreen to guide users toward best stamping practices depending on how they're using the stamp. Check out how to add help messages [here](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#help-messages).\"\n}\n[/block]\nHandling success and errors is covered in depth in [Part 3: Handling API Responses](doc:part-3-handling-api-responses).","category":"56d0f236b2cb7013004de864","createdAt":"2015-03-25T18:20:26.341Z","excerpt":"Making HTML elements \"stampable\"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":3,"project":"55087b0f6065ed17002643ce","slug":"part-1-stamp-screen","sync_unique":"","title":"Part 1: Stamp Screen","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Part 1: Stamp Screen

Making HTML elements "stampable"

There are 2 flavors of stamp screen: *SnowShoe-hosted* or *self-hosted*. ##SnowShoe-Hosted Stamp Screen For directions on implementing this, check out our [Hello, World](doc:hello-world) article. Your workflow will look like... [block:image] { "images": [ { "image": [ "https://files.readme.io/r5FARnSGS8uYBWx9Y0o2_SSS_API_DIAGRAM_ss-hosted_stamp_screen.png", "SSS_API_DIAGRAM_ss-hosted_stamp_screen.png", "1416", "753", "#2d5575", "" ], "caption": "You can find the URL of your SnowShoe-hosted stamp screen on the dashboard page for your application." } ] } [/block] ##Self-hosted Stamp Screen If you'd like to make an existing page of your web or native app "stampable," you just need to implement our [**jQuery plugin**](https://github.com/snowshoestamp/snowshoe_jquery/). Your workflow will look like... [block:image] { "images": [ { "image": [ "https://files.readme.io/e9sCbmHQRxulI3rFtKtj_SSS_API_DIAGRAM_customer-hosted_stamp_screen.png", "SSS_API_DIAGRAM_customer-hosted_stamp_screen.png", "1416", "753", "#2d5575", "" ], "caption": "Any webpage or native app screen can be made stampable. This is great for \"hidden\" content, as the page maintains normal button and click functionality unless a stamp is touched to the screen." } ] } [/block] [block:callout] { "type": "success", "body": "The newest version of the SnowShoe jQuery plugin (v0.3.0) fixes a bug for stamp detection in Chrome browsers on Android devices, so we recommend you test it in your apps and upgrade as soon as possible if that is an important client base for your application. It is currently in use on the SnowShoe [homepage](http://www.snowshoestamp.com/) and on all demos and SnowShoe-hosted stamp screens." } [/block] 1) SnowShoe's jQuery project can be found [here on GitHub](https://github.com/snowshoestamp/snowshoe_jquery/). [block:code] { "codes": [ { "code": "// The jQuery namespace created by\n// jquery.snowshoe.js\n$.snowshoe", "language": "javascript" } ] } [/block] At the bottom of any page you want to make "stampable", create an object with initialization data and include the Snowshoe jQuery module. ``$.snowshoe`` will construct the necessary touch event listener and client to submit stamp data to your backend. [block:code] { "codes": [ { "code": "<canvas id=\"stamp-screen\"></canvas>\n.\n.\n.\n<!-- Make sure you have sourced jQuery somewhere above this -->\n<script>\n var stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n // this is the element id of what you want to make stampable\n // this can be on a canvas, div or the body\n \"stampScreenElmId\": \"stamp-screen\"\n }\n</script>\n<script src=\"jquery.snowshoe.js\"></script>\n", "language": "html", "name": "" } ] } [/block] Optionally, post via AJAX by adding the ``postViaAjax`` property and setting its value to ``true``. Then handle success/failure in the client. [block:code] { "codes": [ { "code": "<script>\n var stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"postViaAjax\": true,\n \"success\": function(response){\n // handle success\n console.log(\"Success!\");\n },\n \"error\": function(response){\n // handle failure\n console.log(\" :-( \");\n }\n }\n</script>\n<script src=\"jquery.snowshoe.js\"></script>", "language": "html" } ] } [/block] [block:callout] { "type": "info", "title": "Want to add a loading animation?", "body": "The SnowShoe jQuery plugin comes prebaked with loading animation functionality. Check out how to use it [here](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#progress-bar-animations)." } [/block] [block:callout] { "type": "info", "title": "Want to add helpful messages to encourage a great user experience?", "body": "**User training** has been added as of the v0.3.0 release. Train users to stamp correctly by utilizing our new dynamic messaging feature. It allows you to display custom messaging onscreen to guide users toward best stamping practices depending on how they're using the stamp. Check out how to add help messages [here](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#help-messages)." } [/block] Handling success and errors is covered in depth in [Part 3: Handling API Responses](doc:part-3-handling-api-responses).
There are 2 flavors of stamp screen: *SnowShoe-hosted* or *self-hosted*. ##SnowShoe-Hosted Stamp Screen For directions on implementing this, check out our [Hello, World](doc:hello-world) article. Your workflow will look like... [block:image] { "images": [ { "image": [ "https://files.readme.io/r5FARnSGS8uYBWx9Y0o2_SSS_API_DIAGRAM_ss-hosted_stamp_screen.png", "SSS_API_DIAGRAM_ss-hosted_stamp_screen.png", "1416", "753", "#2d5575", "" ], "caption": "You can find the URL of your SnowShoe-hosted stamp screen on the dashboard page for your application." } ] } [/block] ##Self-hosted Stamp Screen If you'd like to make an existing page of your web or native app "stampable," you just need to implement our [**jQuery plugin**](https://github.com/snowshoestamp/snowshoe_jquery/). Your workflow will look like... [block:image] { "images": [ { "image": [ "https://files.readme.io/e9sCbmHQRxulI3rFtKtj_SSS_API_DIAGRAM_customer-hosted_stamp_screen.png", "SSS_API_DIAGRAM_customer-hosted_stamp_screen.png", "1416", "753", "#2d5575", "" ], "caption": "Any webpage or native app screen can be made stampable. This is great for \"hidden\" content, as the page maintains normal button and click functionality unless a stamp is touched to the screen." } ] } [/block] [block:callout] { "type": "success", "body": "The newest version of the SnowShoe jQuery plugin (v0.3.0) fixes a bug for stamp detection in Chrome browsers on Android devices, so we recommend you test it in your apps and upgrade as soon as possible if that is an important client base for your application. It is currently in use on the SnowShoe [homepage](http://www.snowshoestamp.com/) and on all demos and SnowShoe-hosted stamp screens." } [/block] 1) SnowShoe's jQuery project can be found [here on GitHub](https://github.com/snowshoestamp/snowshoe_jquery/). [block:code] { "codes": [ { "code": "// The jQuery namespace created by\n// jquery.snowshoe.js\n$.snowshoe", "language": "javascript" } ] } [/block] At the bottom of any page you want to make "stampable", create an object with initialization data and include the Snowshoe jQuery module. ``$.snowshoe`` will construct the necessary touch event listener and client to submit stamp data to your backend. [block:code] { "codes": [ { "code": "<canvas id=\"stamp-screen\"></canvas>\n.\n.\n.\n<!-- Make sure you have sourced jQuery somewhere above this -->\n<script>\n var stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n // this is the element id of what you want to make stampable\n // this can be on a canvas, div or the body\n \"stampScreenElmId\": \"stamp-screen\"\n }\n</script>\n<script src=\"jquery.snowshoe.js\"></script>\n", "language": "html", "name": "" } ] } [/block] Optionally, post via AJAX by adding the ``postViaAjax`` property and setting its value to ``true``. Then handle success/failure in the client. [block:code] { "codes": [ { "code": "<script>\n var stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"postViaAjax\": true,\n \"success\": function(response){\n // handle success\n console.log(\"Success!\");\n },\n \"error\": function(response){\n // handle failure\n console.log(\" :-( \");\n }\n }\n</script>\n<script src=\"jquery.snowshoe.js\"></script>", "language": "html" } ] } [/block] [block:callout] { "type": "info", "title": "Want to add a loading animation?", "body": "The SnowShoe jQuery plugin comes prebaked with loading animation functionality. Check out how to use it [here](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#progress-bar-animations)." } [/block] [block:callout] { "type": "info", "title": "Want to add helpful messages to encourage a great user experience?", "body": "**User training** has been added as of the v0.3.0 release. Train users to stamp correctly by utilizing our new dynamic messaging feature. It allows you to display custom messaging onscreen to guide users toward best stamping practices depending on how they're using the stamp. Check out how to add help messages [here](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#help-messages)." } [/block] Handling success and errors is covered in depth in [Part 3: Handling API Responses](doc:part-3-handling-api-responses).
{"__v":28,"_id":"5512fca22df1b63100555e57","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Currently, SnowShoe maintains Ruby, Node, and Wordpress clients (see [Maintained Libraries](doc:maintained-libraries)).\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Python & PHP SDK's\",\n  \"body\": \"Please see the [Maintained Libraries](doc:maintained-libraries) for download links and Quickstart guides for these SDK's.\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"All our API clients depend on OAuth for constructing the appropriate authentication headers.\",\n  \"title\": \"Required Dependencies\"\n}\n[/block]\n## Installation\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"gem install snowshoe\",\n      \"language\": \"ruby\",\n      \"name\": \"Ruby\"\n    },\n    {\n      \"code\": \"npm install snowshoe\",\n      \"language\": \"javascript\",\n      \"name\": \"Node\"\n    },\n    {\n      \"code\": \"Add the Snowshoe plugin to your Wordpress site by downloading and moving the snowshoe_wordpress folder into your_project/wp-content/plugins, where your site's plugins live.\\n\\nVia your site's admin panel, navigate to the plugins page and activate the Snowshoe plugin.\",\n      \"language\": \"text\",\n      \"name\": \"Wordpress\"\n    }\n  ]\n}\n[/block]\n\n\n\n## Usage: Setting up the client and making a POST\n\nOn instantiation of the SnowShoe client, pass in your SNOWSHOE_APP_KEY & SNOWSHOE_APP_SECRET, respectively.\n\nCurrently, all posts are made to v2 of the API at http://beta.snowshoestamp.com/api/v2/stamp.\n\nThe data object sent to the API is constructed from the point data sent by your front-end stamp screen (see [Part 1: Stamp Screen](doc:implementing-a-stamp-screen)).\n\nThe client will return a JSON parsed object (or hash), containing either the serial of the matched stamp (a success!) or an error.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"client = Snowshoe::Client.new(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\\ndata = { \\\"data\\\" => params[\\\"data\\\"] }\\nresponse = client.post(data)\\n\\nif response.include? \\\"stamp\\\"\\n  # Serve success asset...\\nelse\\n  # Handle errors...\\nend\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"var client = new Snowshoe.client(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\\nvar data = {data: request.body.data}\\n\\n// in order for the callback to behave correctly inside OAuth\\n// you must include the route's response object as the second argument\\nclient.post(data, response, function(error, data, response){\\n  if (error) {\\n    // handle errors\\n  };\\n  // handle success\\n})\",\n      \"language\": \"javascript\",\n      \"name\": \"Node\"\n    },\n    {\n      \"code\": \"/*\\nOpen the file located in your_project/wp-content/plugins/snowshoe_wordpress/snowshoestamp.php and replace your \\\"key\\\" and \\\"secret\\\" in the handle_request function.\\n\\nNow your site has an api endpoint at \\\"yourdomain.com/api/stamp\\\" that you can POST stamp data too. \\n*/\\n\\nprotected function handle_request(){\\n\\t\\tglobal $wp;\\n\\t\\t$stamp = $wp->query_vars['data'];\\n\\t\\tif(!$stamp)\\n\\t\\t\\t$this->send_response('HTTP/1.0 400 Bad request', array(error => \\\"Bad request, no stamp provided\\\"));\\n\\t\\t$app_key = \\\"SNOWSHOE_APP_KEY\\\";\\n\\t\\t$app_secret = \\\"SNOWSHOE_APP_SECRET\\\";\\n\\t\\t$client= new SSSApiClient($app_key, $app_secret);\\n\\t\\t$JSONResponse=$client->processData($stamp);\\n\\t\\t$this->send_response(_, json_decode($JSONResponse));\\n\\t}\\n\\n\\n\\n/*\\nNOTE: Currently, without over-riding the plugin's default behavior, you should be submitting stamp data via AJAX using the SnowShoe jQuery plugin. And therefore, handle the response in the success and error properties of your SnowShoe jQuery initialization object, rather than on the server. See our documentation in Part 1 and 3 to learn how.\\n*/\",\n      \"language\": \"php\",\n      \"name\": \"Wordpress\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Using Express as your back-end API\",\n  \"body\": \"If you are using Express as your API back-end, make sure you are also including bodyParser. bodyParser enables you to accept the incoming point data from the SnowShoe stamp screen.\"\n}\n[/block]\nBelow are examples of success and error JSON responses from the API.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"// Success\\n{\\n  \\\"stamp\\\": {\\n    \\\"serial\\\": \\\"DEVA\\\"\\n  },\\n  \\\"receipt\\\": \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\\",\\n  \\\"secure\\\": false,\\n  \\\"created\\\": \\\"2015-03-24 11:27:33.014149\\\"\\n}\\n\\n// Error\\n{\\n  \\\"error\\\": {\\n    \\\"message\\\": \\\"Stamp not found\\\",\\n    \\\"code\\\": 32\\n  },\\n  \\\"receipt\\\": \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\\",\\n  \\\"secure\\\": false,\\n  \\\"created\\\": \\\"2015-03-24 11:27:48.235046\\\"\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\nHanding success and errors is covered in depth in [Part 3: Handling API Responses](doc:part-3-handling-api-responses).","category":"56d0f236b2cb7013004de864","createdAt":"2015-03-25T18:21:22.039Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":4,"project":"55087b0f6065ed17002643ce","slug":"part-2-api-client","sync_unique":"","title":"Part 2: API Client","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Part 2: API Client


Currently, SnowShoe maintains Ruby, Node, and Wordpress clients (see [Maintained Libraries](doc:maintained-libraries)). [block:callout] { "type": "info", "title": "Python & PHP SDK's", "body": "Please see the [Maintained Libraries](doc:maintained-libraries) for download links and Quickstart guides for these SDK's." } [/block] [block:callout] { "type": "info", "body": "All our API clients depend on OAuth for constructing the appropriate authentication headers.", "title": "Required Dependencies" } [/block] ## Installation [block:code] { "codes": [ { "code": "gem install snowshoe", "language": "ruby", "name": "Ruby" }, { "code": "npm install snowshoe", "language": "javascript", "name": "Node" }, { "code": "Add the Snowshoe plugin to your Wordpress site by downloading and moving the snowshoe_wordpress folder into your_project/wp-content/plugins, where your site's plugins live.\n\nVia your site's admin panel, navigate to the plugins page and activate the Snowshoe plugin.", "language": "text", "name": "Wordpress" } ] } [/block] ## Usage: Setting up the client and making a POST On instantiation of the SnowShoe client, pass in your SNOWSHOE_APP_KEY & SNOWSHOE_APP_SECRET, respectively. Currently, all posts are made to v2 of the API at http://beta.snowshoestamp.com/api/v2/stamp. The data object sent to the API is constructed from the point data sent by your front-end stamp screen (see [Part 1: Stamp Screen](doc:implementing-a-stamp-screen)). The client will return a JSON parsed object (or hash), containing either the serial of the matched stamp (a success!) or an error. [block:code] { "codes": [ { "code": "client = Snowshoe::Client.new(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\ndata = { \"data\" => params[\"data\"] }\nresponse = client.post(data)\n\nif response.include? \"stamp\"\n # Serve success asset...\nelse\n # Handle errors...\nend", "language": "ruby" }, { "code": "var client = new Snowshoe.client(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\nvar data = {data: request.body.data}\n\n// in order for the callback to behave correctly inside OAuth\n// you must include the route's response object as the second argument\nclient.post(data, response, function(error, data, response){\n if (error) {\n // handle errors\n };\n // handle success\n})", "language": "javascript", "name": "Node" }, { "code": "/*\nOpen the file located in your_project/wp-content/plugins/snowshoe_wordpress/snowshoestamp.php and replace your \"key\" and \"secret\" in the handle_request function.\n\nNow your site has an api endpoint at \"yourdomain.com/api/stamp\" that you can POST stamp data too. \n*/\n\nprotected function handle_request(){\n\t\tglobal $wp;\n\t\t$stamp = $wp->query_vars['data'];\n\t\tif(!$stamp)\n\t\t\t$this->send_response('HTTP/1.0 400 Bad request', array(error => \"Bad request, no stamp provided\"));\n\t\t$app_key = \"SNOWSHOE_APP_KEY\";\n\t\t$app_secret = \"SNOWSHOE_APP_SECRET\";\n\t\t$client= new SSSApiClient($app_key, $app_secret);\n\t\t$JSONResponse=$client->processData($stamp);\n\t\t$this->send_response(_, json_decode($JSONResponse));\n\t}\n\n\n\n/*\nNOTE: Currently, without over-riding the plugin's default behavior, you should be submitting stamp data via AJAX using the SnowShoe jQuery plugin. And therefore, handle the response in the success and error properties of your SnowShoe jQuery initialization object, rather than on the server. See our documentation in Part 1 and 3 to learn how.\n*/", "language": "php", "name": "Wordpress" } ] } [/block] [block:callout] { "type": "warning", "title": "Using Express as your back-end API", "body": "If you are using Express as your API back-end, make sure you are also including bodyParser. bodyParser enables you to accept the incoming point data from the SnowShoe stamp screen." } [/block] Below are examples of success and error JSON responses from the API. [block:code] { "codes": [ { "code": "// Success\n{\n \"stamp\": {\n \"serial\": \"DEVA\"\n },\n \"receipt\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n \"secure\": false,\n \"created\": \"2015-03-24 11:27:33.014149\"\n}\n\n// Error\n{\n \"error\": {\n \"message\": \"Stamp not found\",\n \"code\": 32\n },\n \"receipt\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n \"secure\": false,\n \"created\": \"2015-03-24 11:27:48.235046\"\n}", "language": "json" } ] } [/block] Handing success and errors is covered in depth in [Part 3: Handling API Responses](doc:part-3-handling-api-responses).
Currently, SnowShoe maintains Ruby, Node, and Wordpress clients (see [Maintained Libraries](doc:maintained-libraries)). [block:callout] { "type": "info", "title": "Python & PHP SDK's", "body": "Please see the [Maintained Libraries](doc:maintained-libraries) for download links and Quickstart guides for these SDK's." } [/block] [block:callout] { "type": "info", "body": "All our API clients depend on OAuth for constructing the appropriate authentication headers.", "title": "Required Dependencies" } [/block] ## Installation [block:code] { "codes": [ { "code": "gem install snowshoe", "language": "ruby", "name": "Ruby" }, { "code": "npm install snowshoe", "language": "javascript", "name": "Node" }, { "code": "Add the Snowshoe plugin to your Wordpress site by downloading and moving the snowshoe_wordpress folder into your_project/wp-content/plugins, where your site's plugins live.\n\nVia your site's admin panel, navigate to the plugins page and activate the Snowshoe plugin.", "language": "text", "name": "Wordpress" } ] } [/block] ## Usage: Setting up the client and making a POST On instantiation of the SnowShoe client, pass in your SNOWSHOE_APP_KEY & SNOWSHOE_APP_SECRET, respectively. Currently, all posts are made to v2 of the API at http://beta.snowshoestamp.com/api/v2/stamp. The data object sent to the API is constructed from the point data sent by your front-end stamp screen (see [Part 1: Stamp Screen](doc:implementing-a-stamp-screen)). The client will return a JSON parsed object (or hash), containing either the serial of the matched stamp (a success!) or an error. [block:code] { "codes": [ { "code": "client = Snowshoe::Client.new(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\ndata = { \"data\" => params[\"data\"] }\nresponse = client.post(data)\n\nif response.include? \"stamp\"\n # Serve success asset...\nelse\n # Handle errors...\nend", "language": "ruby" }, { "code": "var client = new Snowshoe.client(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\nvar data = {data: request.body.data}\n\n// in order for the callback to behave correctly inside OAuth\n// you must include the route's response object as the second argument\nclient.post(data, response, function(error, data, response){\n if (error) {\n // handle errors\n };\n // handle success\n})", "language": "javascript", "name": "Node" }, { "code": "/*\nOpen the file located in your_project/wp-content/plugins/snowshoe_wordpress/snowshoestamp.php and replace your \"key\" and \"secret\" in the handle_request function.\n\nNow your site has an api endpoint at \"yourdomain.com/api/stamp\" that you can POST stamp data too. \n*/\n\nprotected function handle_request(){\n\t\tglobal $wp;\n\t\t$stamp = $wp->query_vars['data'];\n\t\tif(!$stamp)\n\t\t\t$this->send_response('HTTP/1.0 400 Bad request', array(error => \"Bad request, no stamp provided\"));\n\t\t$app_key = \"SNOWSHOE_APP_KEY\";\n\t\t$app_secret = \"SNOWSHOE_APP_SECRET\";\n\t\t$client= new SSSApiClient($app_key, $app_secret);\n\t\t$JSONResponse=$client->processData($stamp);\n\t\t$this->send_response(_, json_decode($JSONResponse));\n\t}\n\n\n\n/*\nNOTE: Currently, without over-riding the plugin's default behavior, you should be submitting stamp data via AJAX using the SnowShoe jQuery plugin. And therefore, handle the response in the success and error properties of your SnowShoe jQuery initialization object, rather than on the server. See our documentation in Part 1 and 3 to learn how.\n*/", "language": "php", "name": "Wordpress" } ] } [/block] [block:callout] { "type": "warning", "title": "Using Express as your back-end API", "body": "If you are using Express as your API back-end, make sure you are also including bodyParser. bodyParser enables you to accept the incoming point data from the SnowShoe stamp screen." } [/block] Below are examples of success and error JSON responses from the API. [block:code] { "codes": [ { "code": "// Success\n{\n \"stamp\": {\n \"serial\": \"DEVA\"\n },\n \"receipt\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n \"secure\": false,\n \"created\": \"2015-03-24 11:27:33.014149\"\n}\n\n// Error\n{\n \"error\": {\n \"message\": \"Stamp not found\",\n \"code\": 32\n },\n \"receipt\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n \"secure\": false,\n \"created\": \"2015-03-24 11:27:48.235046\"\n}", "language": "json" } ] } [/block] Handing success and errors is covered in depth in [Part 3: Handling API Responses](doc:part-3-handling-api-responses).
{"__v":18,"_id":"551336f5b5e3e33900767bfa","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"How you handle SnowShoe API responses is the second half of the magic experience you're giving your users. There are nearly endless actions you can take once you authenticate a stamp. We'll attempt to cover a few of the more common cases here. \n\nFirst, you'll need to parse the JSON response returned to you from the SnowShoe API. For a more in-depth look at the structure of this response, check out [Example JSON Responses](doc:example-json-responses).\n\nThen, the most common thing to do is serve back an asset url. For now, we'll cover the insecure method, meaning this asset is public (anyone can make a GET request to it) but nonetheless we're using it as part of the user experience.\n\nBuilding off of what we did in [Part 2: API Client](doc:part-2-api-client):\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"# serving back JSON to the front-end client's AJAX request\\n\\nif response.include? \\\"stamp\\\"\\n  render json: '{\\\"magic_asset\\\": \\\"http://mydomain.com/super/cool/asset}'\\nelse\\n  render json: '{\\\"error_asset\\\": \\\"http://mydomain.com/try/again/asset\\\"}'\\nend\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"// serving back JSON to the front-end client's AJAX request\\n\\nif (error) {\\n  var statusCode = error.statusCode,\\n      errorJson = JSON.parse(error.data);\\n  response.status(statusCode).send(errorJson)\\n} else {\\n  response.send(data)\\n}\\n\\n\\n// serving back HTML when using HTTP POST\\n\\nif (stamp in response.data) {\\n  response.render('magic_asset.html', {});\\n} else {\\n  response.render('stamp_not_found.html', {});\\n}\",\n      \"language\": \"javascript\",\n      \"name\": \"Node\"\n    },\n    {\n      \"code\": \"// Because the SnowShoe Wordpress plugin currently requires the use of AJAX, make sure to handle the API response on the frontend using the success and error properties of the SnowShoe jQuery data initialization object. Example success and error responses could look like:\\n\\n<script>\\n  var stampScreenInitData = {\\n    \\\"postUrl\\\": \\\"http://mydomain.com/stampscreen\\\",\\n    \\\"stampScreenElmId\\\": \\\"stamp-screen\\\",\\n    \\\"postViaAjax\\\": true,\\n    \\\"success\\\": function(response){\\n      if (response.hasOwnProperty('stamp')) { window.location.replace(\\\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-recognized/\\\");}\\n    },\\n    \\\"error\\\": function(response){\\n      window.location.replace(\\\"http://www.yourdomain.com/snowshoe-stamp-demo/no-stamp-recognized/\\\");\\n    }\\n  }\\n</script>\",\n      \"language\": \"javascript\",\n      \"name\": \"Wordpress\"\n    }\n  ]\n}\n[/block]\nThat was pretty simple. We just send back to our client the url of our super cool asset for it to display to the user (via jQuery or similar). In the case of a failure, meaning the stamp was not authenticated, we send back the url of an image telling them the stamp was not found + try again.\n\nBuilding on that, let's say our app has two stamps assigned to it: DEVA and DEVB. We can serve back unique assets based on which stamp was used.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"# serving back custom JSON to the front-end client's AJAX request\\n\\nif response.include? \\\"stamp\\\"\\n  case response[\\\"stamp\\\"][\\\"serial\\\"]\\n    when \\\"DEVA\\\"\\n      render json: '{\\\"magic_asset\\\": \\\"http://mydomain.com/super/cool/asset-A}'\\n    when \\\"DEVB\\\"\\n  \\t\\trender json: '{\\\"magic_asset\\\": \\\"http://mydomain.com/super/cool/asset-B}'\\nelse\\n  render json: '{\\\"error_asset\\\": \\\"http://mydomain.com/try/again/asset\\\"}'\\nend\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"// serving back JSON to the front-end client's AJAX request\\n\\nif (error) {\\n  var statusCode = error.statusCode,\\n      errorJson = JSON.parse(error.data);\\n  response.status(statusCode).send(errorJson)\\n} else {\\n  response.send(data)\\n}\\n\\n\\n// serving back stamp-dependent HTML when using HTTP POST\\n\\nif (stamp in response.data) {\\n  if (response.data.stamp == \\\"DEVA\\\"){\\n  \\tresponse.render('magic_asset_1.html', {});\\n  }\\n  else {\\n    response.render('magic_asset_2.html', {});\\n  }\\n} else {\\n  response.render('stamp_not_found.html', {});\\n}\",\n      \"language\": \"javascript\",\n      \"name\": \"Node\"\n    },\n    {\n      \"code\": \"// Because the SnowShoe Wordpress plugin currently requires the use of AJAX, make sure to handle the API response on the frontend using the success and error properties of the SnowShoe jQuery data initialization object. Example success and error responses could look like:\\n\\n<script>\\n  var stampScreenInitData = {\\n    \\\"postUrl\\\": \\\"http://mydomain.com/stampscreen\\\",\\n    \\\"stampScreenElmId\\\": \\\"stamp-screen\\\",\\n    \\\"postViaAjax\\\": true,\\n    \\\"success\\\": function(response){\\n      if (response.stamp.serial == \\\"DEVA\\\") { window.location.replace(\\\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-a-recognized/\\\");} \\n      else { window.location.replace(\\\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-b-recognized/\\\");};\\n    },\\n    \\\"error\\\": function(response){\\n      window.location.replace(\\\"http://www.yourdomain.com/snowshoe-stamp-demo/no-stamp-recognized/\\\");\\n    }\\n  }\\n</script>\",\n      \"language\": \"javascript\",\n      \"name\": \"Wordpress\"\n    }\n  ]\n}\n[/block]","category":"56d0f236b2cb7013004de864","createdAt":"2015-03-25T22:30:13.811Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":5,"project":"55087b0f6065ed17002643ce","slug":"part-3-handling-api-responses","sync_unique":"","title":"Part 3: Handling API Responses","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Part 3: Handling API Responses


How you handle SnowShoe API responses is the second half of the magic experience you're giving your users. There are nearly endless actions you can take once you authenticate a stamp. We'll attempt to cover a few of the more common cases here. First, you'll need to parse the JSON response returned to you from the SnowShoe API. For a more in-depth look at the structure of this response, check out [Example JSON Responses](doc:example-json-responses). Then, the most common thing to do is serve back an asset url. For now, we'll cover the insecure method, meaning this asset is public (anyone can make a GET request to it) but nonetheless we're using it as part of the user experience. Building off of what we did in [Part 2: API Client](doc:part-2-api-client): [block:code] { "codes": [ { "code": "# serving back JSON to the front-end client's AJAX request\n\nif response.include? \"stamp\"\n render json: '{\"magic_asset\": \"http://mydomain.com/super/cool/asset}'\nelse\n render json: '{\"error_asset\": \"http://mydomain.com/try/again/asset\"}'\nend", "language": "ruby" }, { "code": "// serving back JSON to the front-end client's AJAX request\n\nif (error) {\n var statusCode = error.statusCode,\n errorJson = JSON.parse(error.data);\n response.status(statusCode).send(errorJson)\n} else {\n response.send(data)\n}\n\n\n// serving back HTML when using HTTP POST\n\nif (stamp in response.data) {\n response.render('magic_asset.html', {});\n} else {\n response.render('stamp_not_found.html', {});\n}", "language": "javascript", "name": "Node" }, { "code": "// Because the SnowShoe Wordpress plugin currently requires the use of AJAX, make sure to handle the API response on the frontend using the success and error properties of the SnowShoe jQuery data initialization object. Example success and error responses could look like:\n\n<script>\n var stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"postViaAjax\": true,\n \"success\": function(response){\n if (response.hasOwnProperty('stamp')) { window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-recognized/\");}\n },\n \"error\": function(response){\n window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/no-stamp-recognized/\");\n }\n }\n</script>", "language": "javascript", "name": "Wordpress" } ] } [/block] That was pretty simple. We just send back to our client the url of our super cool asset for it to display to the user (via jQuery or similar). In the case of a failure, meaning the stamp was not authenticated, we send back the url of an image telling them the stamp was not found + try again. Building on that, let's say our app has two stamps assigned to it: DEVA and DEVB. We can serve back unique assets based on which stamp was used. [block:code] { "codes": [ { "code": "# serving back custom JSON to the front-end client's AJAX request\n\nif response.include? \"stamp\"\n case response[\"stamp\"][\"serial\"]\n when \"DEVA\"\n render json: '{\"magic_asset\": \"http://mydomain.com/super/cool/asset-A}'\n when \"DEVB\"\n \t\trender json: '{\"magic_asset\": \"http://mydomain.com/super/cool/asset-B}'\nelse\n render json: '{\"error_asset\": \"http://mydomain.com/try/again/asset\"}'\nend", "language": "ruby" }, { "code": "// serving back JSON to the front-end client's AJAX request\n\nif (error) {\n var statusCode = error.statusCode,\n errorJson = JSON.parse(error.data);\n response.status(statusCode).send(errorJson)\n} else {\n response.send(data)\n}\n\n\n// serving back stamp-dependent HTML when using HTTP POST\n\nif (stamp in response.data) {\n if (response.data.stamp == \"DEVA\"){\n \tresponse.render('magic_asset_1.html', {});\n }\n else {\n response.render('magic_asset_2.html', {});\n }\n} else {\n response.render('stamp_not_found.html', {});\n}", "language": "javascript", "name": "Node" }, { "code": "// Because the SnowShoe Wordpress plugin currently requires the use of AJAX, make sure to handle the API response on the frontend using the success and error properties of the SnowShoe jQuery data initialization object. Example success and error responses could look like:\n\n<script>\n var stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"postViaAjax\": true,\n \"success\": function(response){\n if (response.stamp.serial == \"DEVA\") { window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-a-recognized/\");} \n else { window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-b-recognized/\");};\n },\n \"error\": function(response){\n window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/no-stamp-recognized/\");\n }\n }\n</script>", "language": "javascript", "name": "Wordpress" } ] } [/block]
How you handle SnowShoe API responses is the second half of the magic experience you're giving your users. There are nearly endless actions you can take once you authenticate a stamp. We'll attempt to cover a few of the more common cases here. First, you'll need to parse the JSON response returned to you from the SnowShoe API. For a more in-depth look at the structure of this response, check out [Example JSON Responses](doc:example-json-responses). Then, the most common thing to do is serve back an asset url. For now, we'll cover the insecure method, meaning this asset is public (anyone can make a GET request to it) but nonetheless we're using it as part of the user experience. Building off of what we did in [Part 2: API Client](doc:part-2-api-client): [block:code] { "codes": [ { "code": "# serving back JSON to the front-end client's AJAX request\n\nif response.include? \"stamp\"\n render json: '{\"magic_asset\": \"http://mydomain.com/super/cool/asset}'\nelse\n render json: '{\"error_asset\": \"http://mydomain.com/try/again/asset\"}'\nend", "language": "ruby" }, { "code": "// serving back JSON to the front-end client's AJAX request\n\nif (error) {\n var statusCode = error.statusCode,\n errorJson = JSON.parse(error.data);\n response.status(statusCode).send(errorJson)\n} else {\n response.send(data)\n}\n\n\n// serving back HTML when using HTTP POST\n\nif (stamp in response.data) {\n response.render('magic_asset.html', {});\n} else {\n response.render('stamp_not_found.html', {});\n}", "language": "javascript", "name": "Node" }, { "code": "// Because the SnowShoe Wordpress plugin currently requires the use of AJAX, make sure to handle the API response on the frontend using the success and error properties of the SnowShoe jQuery data initialization object. Example success and error responses could look like:\n\n<script>\n var stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"postViaAjax\": true,\n \"success\": function(response){\n if (response.hasOwnProperty('stamp')) { window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-recognized/\");}\n },\n \"error\": function(response){\n window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/no-stamp-recognized/\");\n }\n }\n</script>", "language": "javascript", "name": "Wordpress" } ] } [/block] That was pretty simple. We just send back to our client the url of our super cool asset for it to display to the user (via jQuery or similar). In the case of a failure, meaning the stamp was not authenticated, we send back the url of an image telling them the stamp was not found + try again. Building on that, let's say our app has two stamps assigned to it: DEVA and DEVB. We can serve back unique assets based on which stamp was used. [block:code] { "codes": [ { "code": "# serving back custom JSON to the front-end client's AJAX request\n\nif response.include? \"stamp\"\n case response[\"stamp\"][\"serial\"]\n when \"DEVA\"\n render json: '{\"magic_asset\": \"http://mydomain.com/super/cool/asset-A}'\n when \"DEVB\"\n \t\trender json: '{\"magic_asset\": \"http://mydomain.com/super/cool/asset-B}'\nelse\n render json: '{\"error_asset\": \"http://mydomain.com/try/again/asset\"}'\nend", "language": "ruby" }, { "code": "// serving back JSON to the front-end client's AJAX request\n\nif (error) {\n var statusCode = error.statusCode,\n errorJson = JSON.parse(error.data);\n response.status(statusCode).send(errorJson)\n} else {\n response.send(data)\n}\n\n\n// serving back stamp-dependent HTML when using HTTP POST\n\nif (stamp in response.data) {\n if (response.data.stamp == \"DEVA\"){\n \tresponse.render('magic_asset_1.html', {});\n }\n else {\n response.render('magic_asset_2.html', {});\n }\n} else {\n response.render('stamp_not_found.html', {});\n}", "language": "javascript", "name": "Node" }, { "code": "// Because the SnowShoe Wordpress plugin currently requires the use of AJAX, make sure to handle the API response on the frontend using the success and error properties of the SnowShoe jQuery data initialization object. Example success and error responses could look like:\n\n<script>\n var stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"postViaAjax\": true,\n \"success\": function(response){\n if (response.stamp.serial == \"DEVA\") { window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-a-recognized/\");} \n else { window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/stamp-b-recognized/\");};\n },\n \"error\": function(response){\n window.location.replace(\"http://www.yourdomain.com/snowshoe-stamp-demo/no-stamp-recognized/\");\n }\n }\n</script>", "language": "javascript", "name": "Wordpress" } ] } [/block]
{"__v":14,"_id":"5519948a45b0d80d00152367","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"After you submit a stamp observation to our authentication service, our API returns a JSON response that looks like this:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"stamp\\\": {\\n    \\\"serial\\\": \\\"DEVA\\\"\\n  }, \\n  \\\"receipt\\\": \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\\\",\\n  \\\"secure\\\": false,\\n  \\\"created\\\": \\\"2015-03-24 11:27:33.014149\\\"\\n}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Stamp serials for 3D printed stamps\",\n  \"body\": \"As we said goodbye to 3D printed stamps, so too did we to the serial names with which those stamps were commissioned: \\\"DEV-STAMP\\\" and \\\"DEV-STAMP-B\\\". The developer stamps commissioned to all new Stamp 2.0 apps are named \\\"DEVA\\\" and \\\"DEVB\\\". You can always rename any stamp directly from your app's dashboard.\"\n}\n[/block]\nHere’s an explanation of what we got back:\n```\n“stamp”: {“serial”: “DEVA”}\n```\n\nThe “stamp” element in the JSON contains an object denoting the found stamp’s serial number (if a stamp was found). This is what you should use to determine how your app should proceed.\n\nHad the submitted coordinates not matched up with a stamp associated with your map, the response would have been:\n\n```\n“error”: {“message”: “Stamp not found”, “code”: 32}\n```\nAfter \"stamp\", we see a \"receipt\" property. The “receipt” is a unique identifier that we can use to locate your API call for troubleshooting requests.\n```\n“receipt”: “ABCDEFGHIJKLMNOPQRSTUVWXYZ”\n```\n\nContinuing on, “secure” indicates whether the request was made using https (“true”) or http (“false”).\n```\n“secure”: false\n```\n\nLastly, “created” is the timestamp for the API call.\n```\n“created”: “2015-03-24 11:27:33.014149\"\n```","category":"56d0f236b2cb7013004de864","createdAt":"2015-03-30T18:23:06.041Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":6,"project":"55087b0f6065ed17002643ce","slug":"example-json-responses","sync_unique":"","title":"Example JSON Responses","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Example JSON Responses


After you submit a stamp observation to our authentication service, our API returns a JSON response that looks like this: [block:code] { "codes": [ { "code": "{\n \"stamp\": {\n \"serial\": \"DEVA\"\n }, \n \"receipt\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n \"secure\": false,\n \"created\": \"2015-03-24 11:27:33.014149\"\n}", "language": "json" } ] } [/block] [block:callout] { "type": "warning", "title": "Stamp serials for 3D printed stamps", "body": "As we said goodbye to 3D printed stamps, so too did we to the serial names with which those stamps were commissioned: \"DEV-STAMP\" and \"DEV-STAMP-B\". The developer stamps commissioned to all new Stamp 2.0 apps are named \"DEVA\" and \"DEVB\". You can always rename any stamp directly from your app's dashboard." } [/block] Here’s an explanation of what we got back: ``` “stamp”: {“serial”: “DEVA”} ``` The “stamp” element in the JSON contains an object denoting the found stamp’s serial number (if a stamp was found). This is what you should use to determine how your app should proceed. Had the submitted coordinates not matched up with a stamp associated with your map, the response would have been: ``` “error”: {“message”: “Stamp not found”, “code”: 32} ``` After "stamp", we see a "receipt" property. The “receipt” is a unique identifier that we can use to locate your API call for troubleshooting requests. ``` “receipt”: “ABCDEFGHIJKLMNOPQRSTUVWXYZ” ``` Continuing on, “secure” indicates whether the request was made using https (“true”) or http (“false”). ``` “secure”: false ``` Lastly, “created” is the timestamp for the API call. ``` “created”: “2015-03-24 11:27:33.014149" ```
After you submit a stamp observation to our authentication service, our API returns a JSON response that looks like this: [block:code] { "codes": [ { "code": "{\n \"stamp\": {\n \"serial\": \"DEVA\"\n }, \n \"receipt\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n \"secure\": false,\n \"created\": \"2015-03-24 11:27:33.014149\"\n}", "language": "json" } ] } [/block] [block:callout] { "type": "warning", "title": "Stamp serials for 3D printed stamps", "body": "As we said goodbye to 3D printed stamps, so too did we to the serial names with which those stamps were commissioned: \"DEV-STAMP\" and \"DEV-STAMP-B\". The developer stamps commissioned to all new Stamp 2.0 apps are named \"DEVA\" and \"DEVB\". You can always rename any stamp directly from your app's dashboard." } [/block] Here’s an explanation of what we got back: ``` “stamp”: {“serial”: “DEVA”} ``` The “stamp” element in the JSON contains an object denoting the found stamp’s serial number (if a stamp was found). This is what you should use to determine how your app should proceed. Had the submitted coordinates not matched up with a stamp associated with your map, the response would have been: ``` “error”: {“message”: “Stamp not found”, “code”: 32} ``` After "stamp", we see a "receipt" property. The “receipt” is a unique identifier that we can use to locate your API call for troubleshooting requests. ``` “receipt”: “ABCDEFGHIJKLMNOPQRSTUVWXYZ” ``` Continuing on, “secure” indicates whether the request was made using https (“true”) or http (“false”). ``` “secure”: false ``` Lastly, “created” is the timestamp for the API call. ``` “created”: “2015-03-24 11:27:33.014149" ```
{"__v":12,"_id":"551463e00a0c69170061680b","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Here you'll find a continuously growing collection of articles on all topics SnowShoe.\n- ** [Hello, World](doc:hello-world):** Build a web app from scratch using a SnowShoe-hosted stamp screen and a SnowShoe server-side library of your choice\n\n- **[Create a Demo Application Without Coding](doc:create-a-demo-application-without-coding):** Unfamiliar with code? Build a proof-of-concept app with SnowShoe stamps in just a few quick steps \n\n- **[SnowShoe Best Practices](doc:snowshoe-jquery-extras):** For those using our [front-end jQuery library](https://github.com/snowshoestamp/snowshoe_jquery/) to make an existing webpage stampable, check out a few extra features we've added, like [progress bar animations](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#progress-bar-animations) and [help messaging](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#help-messages).","category":"551462da0a0c691700616802","createdAt":"2015-03-26T19:54:08.002Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":0,"project":"55087b0f6065ed17002643ce","slug":"articles-overview","sync_unique":"","title":"Articles: Overview","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Articles: Overview


Here you'll find a continuously growing collection of articles on all topics SnowShoe. - ** [Hello, World](doc:hello-world):** Build a web app from scratch using a SnowShoe-hosted stamp screen and a SnowShoe server-side library of your choice - **[Create a Demo Application Without Coding](doc:create-a-demo-application-without-coding):** Unfamiliar with code? Build a proof-of-concept app with SnowShoe stamps in just a few quick steps - **[SnowShoe Best Practices](doc:snowshoe-jquery-extras):** For those using our [front-end jQuery library](https://github.com/snowshoestamp/snowshoe_jquery/) to make an existing webpage stampable, check out a few extra features we've added, like [progress bar animations](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#progress-bar-animations) and [help messaging](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#help-messages).
Here you'll find a continuously growing collection of articles on all topics SnowShoe. - ** [Hello, World](doc:hello-world):** Build a web app from scratch using a SnowShoe-hosted stamp screen and a SnowShoe server-side library of your choice - **[Create a Demo Application Without Coding](doc:create-a-demo-application-without-coding):** Unfamiliar with code? Build a proof-of-concept app with SnowShoe stamps in just a few quick steps - **[SnowShoe Best Practices](doc:snowshoe-jquery-extras):** For those using our [front-end jQuery library](https://github.com/snowshoestamp/snowshoe_jquery/) to make an existing webpage stampable, check out a few extra features we've added, like [progress bar animations](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#progress-bar-animations) and [help messaging](https://snowshoe.readme.io/docs/snowshoe-jquery-extras#help-messages).
{"__v":46,"_id":"559c5af74ac6411700d85703","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"You’ve watched the videos. You’ve ordered your [developer kit](http://shop.snowshoestamp.com/). You’ve played with the [demos](http://beta.snowshoestamp.com/demo/) and [registered your app](http://beta.snowshoestamp.com/applications/wizard/app-name/).\n\nNow you are ready to *build* a SnowShoe app of your own.\n\n**But what do you do first?** This guide will take you, step by step, through building a Hello World web app on the Snowshoe platform. When we’re done, you will understand exactly how the Snowshoe system works, and how to integrate it into all of your amazing projects.\n\n#“Hello World”\nLets talk a little bit about what we want our app to do. To demonstrate the most basic functionality of the stamp, let's make an app that, when stamped, displays a hidden message specific to the stamp that was used.\n\nIn the finished product, if you stamp with Stamp A, the app returns “hello world”. If you stamp with Stamp B, you get “hello moon”.\n\nGo to http://snow.sh/helloworld to see the finished product in action.\n\n\n#Step 1: Register your app and get SnowShoe API credentials\nFirst, we need to register our app with SnowShoe’s API. This will generate all of the credentials we will need to interact with the API endpoints.\n\nThe first thing you should do is log into the snowshoe [developer portal](https://beta.snowshoestamp.com/applications/application/list/). This is your one-stop-shop for creating, modifying and monitoring all of your SnowShoe applications. Simply **[log in](https://beta.snowshoestamp.com/applications/application/list/)** with the username and password you chose when you purchased your developer kit.\n\nOnce logged in, you should see something that looks like this:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/MdLP9ip4QaSZMYLkPBTH_1-CORwJWYiDEb41d5CXanl6g.jpeg\",\n        \"1-CORwJWYiDEb41d5CXanl6g.jpeg\",\n        \"2000\",\n        \"1027\",\n        \"#347aa9\",\n        \"\"\n      ],\n      \"caption\": \"The Developer Portal is your one-stop-shop for creating, modifying and monitoring your SnowShoe apps\"\n    }\n  ]\n}\n[/block]\nThe applications view lists all of your SnowShoe apps. If you followed our [First App Wizard](http://beta.snowshoestamp.com/applications/wizard/app-name/), the app you created should be listed here.\n\n**Click** the blue “New App” button. This will bring up an “App Details” page:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/D3qKDsSjRmOyg9bRh7fN_1-YZKKNvY-e_dH93CO7FmvLg.jpeg\",\n        \"1-YZKKNvY-e_dH93CO7FmvLg.jpeg\",\n        \"2000\",\n        \"1027\",\n        \"#3a93d5\",\n        \"\"\n      ],\n      \"caption\": \"Choose a name for your app, scroll down, and click save.\"\n    }\n  ]\n}\n[/block]\nAll we need right now is a name. **Enter the name of your choice** in the top field, scroll to the bottom of the page, and **click** “save”.\n\n\n#Step 2: Getting Comfortable with the Stamp Screen\nA new header should have just appeared that displays your new app’s Name, its App Key, App Secret, and three urls (Stamp Screen, Debug Callback, and Serial Number Identifier):\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/GGSDv6FtTViCtiOJ1kiF_1-Ann0BO6N-Z_nMdkboPkl-g.jpeg\",\n        \"1-Ann0BO6N-Z_nMdkboPkl-g.jpeg\",\n        \"2000\",\n        \"1027\",\n        \"#347e9d\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nThe first thing we are going to look at is the Stamp Screen. The stamp screen is a webpage that observes a stamp interaction and reports the observed touch coordinates back to your app.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/nPTUU8LjRuGn005biGyz_1-Oza7B0iQpAN2gEthHVSfLQ.png\",\n        \"1-Oza7B0iQpAN2gEthHVSfLQ.png\",\n        \"640\",\n        \"1136\",\n        \"#24ac63\",\n        \"\"\n      ],\n      \"caption\": \"Your app’s default stamp screen will look like this. If you don’t like our nifty little animated GIF, you can upload a new stamp screen image on the Application Details page.\"\n    }\n  ]\n}\n[/block]\nWhile you are more than welcome to build and host your own stamp screen (and we have [stamp screen libraries](doc:maintained-libraries) and [step-by-step docs](doc:part-1-stamp-screen) available to get you started), *we host one of these highly optimized stamp screens for each app you build*, and they are certainly the fastest way for you to get an app up and running.\n\nIf you use the stamp screen we host, your app should redirect to this stamp screen url whenever you want your user to use a stamp. Go ahead and **click** on the “send to mobile” button next to your stamp screen url. We will send you an email with a link to your stamp screen. **Open** that link on your mobile device, and you should now see a stamp screen displaying our default green animated GIF.\n\n\n#Step 3: The Callback URL\nNow, at this point, if you stamp your stamp screen with one of your developer stamps, you will just see a JSON output printed to the screen. Thats because we haven’t yet specified a *callback URL*. Your callback url is the endpoint on your server that receives data from the stamp screen.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/4ZNXZejdQleTsKieA2pE_1-40Rht3AZErC3LoBgpiAc9Q.png\",\n        \"1-40Rht3AZErC3LoBgpiAc9Q.png\",\n        \"640\",\n        \"1136\",\n        \"#3f9bfc\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nYou can still stamp your app’s stamp screen without specifying a callback url. Your stamp screen then simply POSTs its data to a default endpoint on our system that calls our API internally and then outputs the API response. That endpoint is your *debug callback*.\n\n**However, you want your stamp screen to post data to YOUR endpoint, or callback, that lives on the server side of YOUR web/native app.**  Then you can call the SnowShoe API yourself and do things with the response.\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/h2uiMO7EQHy1UxzLfP6U_SSS_API_DIAGRAM_ss-hosted_stamp_screen.png\",\n        \"SSS_API_DIAGRAM_ss-hosted_stamp_screen.png\",\n        \"1416\",\n        \"753\",\n        \"#2d5575\",\n        \"\"\n      ],\n      \"caption\": \"Your callback URL should map to a method on Your Server that includes one of SnowShoe's server-side libraries to sign the stamp data and submit it to SnowShoe's API for authentication.\"\n    }\n  ]\n}\n[/block]\n#Step 4: Building your callback.\nRemember, we are building a callback that uses the SnowShoe-hosted stamp screen, so we need to have a server with a publicly-accessible URL.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/Ib4EVcZcRbdxOIQLJLMI_Screen%20Shot%202016-02-29%20at%202.57.42%20PM.png\",\n        \"Screen Shot 2016-02-29 at 2.57.42 PM.png\",\n        \"2476\",\n        \"1400\",\n        \"#37a49d\",\n        \"\"\n      ],\n      \"caption\": \"The data collected from your stamp screen will be sent to this publicly accessible URL that lives on your backend server\"\n    }\n  ]\n}\n[/block]\nThe idea here is that we need a server endpoint that a stamp screen can send data to. The data that the stamp screen is going to POST to this callback is called “data”, so, for instance, in Python you could access it as request.POST[‘data’] . That data then needs to be POSTed to our API using OAuth 1.0a, signed using your app secret, and the response will be JSON containing information about the stamp.\n\n##Posting to the SnowShoe API\n**To post to our API, you need to add one of our backend libraries to the server side of your web/native app.**  For specific directions and example code for parsing the response based on language, we provide the following resources.  We maintain [Ruby](https://github.com/snowshoestamp/snowshoe_ruby/) and [Node.js](https://github.com/snowshoestamp/snowshoe_node/) libraries, a [Python SDK](https://medium.com/@SnowShoeStamp/the-snowshoe-stamp-python-sdk-f623bb162f4e) and a [PHP SDK](https://medium.com/@SnowShoeStamp/the-snowshoe-stamp-php-sdk-1a5b2db67f21) which are easy assets you can use to build the OAuth request. Of course, you can build the OAuth request yourself, or there are a bunch of [community-supported libraries](doc:community-libraries) for languages other than those mentioned above.\n\nThe important part is that you take the data that is posted from the stamp screen to your callback, construct an Oauth 1.0a request around it, sign it with your app secret, and call our API using a POST request. The response from that request will be a JSON object containing information about the stamp event.\n\n**IMPORTANT!** Once you’ve got your callback set up and accessible via a public URL, you need to enter that URL into your app, back in our developer portal. When you get to the app list after logging in, click on your app, scroll down to the Callback URL field, enter your URL that maps to the callback you set up on your app's server, and click Save.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Note\",\n  \"body\": \"If you build and host your own stamp screen, you do not need to enter anything into the Callback URL field.  In this case, you will use our [SnowShoe jQuery library](https://github.com/snowshoestamp/snowshoe_jquery/) to submit stamp coordinate data directly from your stamp screen to the callback you set up on your app's server.\"\n}\n[/block]\n\n#Step 5: Parsing the JSON response\nOur API returns the following JSON if we’ve called it successfully:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{“stamp”: {“serial”: “DEVA”}, “receipt”: “o8FLLwYW7TVjtO4VTUP4IgQvvvI=”, “secure”: false, “created”: “2013-05-24 23:01:23.274865+00:00\\\"}\",\n      \"language\": \"json\"\n    }\n  ]\n}\n[/block]\nYou can see that the first element is a “stamp” object, with a “serial” attribute. That serial is the stamp’s “name”. While all developer stamps have the same serial number, when you move to production stamps, each stamp will have its own special serial number specific to your app.\n\n\n#Step 6: Making the Magic Happen\nSweet! We now know which stamp our user touched to the screen, and we simply need to write some code inside the callback that displays the correct message for each stamp.\n\nHere is the code for your callback in Ruby, Python and PHP:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"require 'snowshoe'\\n\\ndef callback\\n  client = Snowshoe::Client.new(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\\n  data = { \\\"data\\\" => params[\\\"data\\\"] }\\n  response = client.post(data)\\n\\n  if response.include? \\\"stamp\\\"\\n    \\n    if response[\\\"stamp\\\"][\\\"serial\\\"] == \\\"DEVA\\\"\\n      puts \\\"Hello World\\\"\\n    end\\n    if response[\\\"stamp\\\"][\\\"serial\\\"] == \\\"DEVB\\\"\\n      puts \\\"Hello Moon\\\"\\n    end\\n    \\n  else\\n    puts \\\"Stamp not found!\\\"\\n  end\\nend\",\n      \"language\": \"ruby\"\n    },\n    {\n      \"code\": \"from sssapi import Client\\nfrom django.views.decorators.csrf import csrf_exempt\\nfrom django.http import HttpResponse\\n\\n@csrf_exempt\\ndef callback(request): \\n  \\n   client = Client(app_key=\\\"YOUR_APP_KEY\\\", app_secret=\\\"YOUR_APP_SECRET\\\") \\n    \\n   response = client.call({“data”: request.POST[‘data’]})\\n  \\n   if response.has_key(‘stamp’): \\n      \\n      if response[‘stamp’][‘serial’] == “DEVA”:   \\n          return HttpResponse(\\\"Hello World\\\")\\n        \\n      if response['stamp']['serial'] == \\\"DEVB\\\":\\n           return HttpResponse(\\\"Hello Moon\\\")\\n        \\n  else:\\n      return HttpResponse(“Invalid Stamp!”)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"include (\\\"./inc/SSSApiClient.php\\\");\\n$app_key = \\\"YOUR_APP_KEY\\\";\\n$app_secret = \\\"YOUR_APP_SECRET\\\";\\n$data = $_POST[‘data’];\\n$client = new SSSApiClient($app_key, $app_secret);\\n$JSONResponse = $client->processData($data);\\n$response = json_decode($JSONResponse, true);\\n\\nif(array_key_exists(“stamp”, $response)){\\n\\n  $serial = $response[‘stamp’][‘serial’];\\n\\n}else{\\n   $serial = false;\\n}\\nif($serial==”DEVA”){\\n   echo “Hello World”;\\n}\\nif($serial == “DEVB”){\\n   echo “Hello Moon”;\\n}\\nif(!$serial){\\n    echo “Stamp not found!”;\\n}\",\n      \"language\": \"php\"\n    }\n  ]\n}\n[/block]\nThe key is that your callback leverages the serial number of the stamp that was returned to make your app do something special. Here it’s just a “Hello World” message. But the possibilities are limitless.\n\n\n#That was fun, but what’s next?\nThere are a whole bunch of ways you can customize the SnowShoe stamp screen. [Learn more here](https://medium.com/@SnowShoeStamp/modifying-the-snowshoe-stamp-screen-f28e35d5ce62).  You can also associate individual images with particular stamps by following this quick tutorial [here](doc:create-a-demo-application-without-coding).\n\nHave more questions? Check out the rest of our docs or email us at [support@snow.sh](mailto:support@snow.sh).\n\nDon’t have a SnowShoe developer kit? [Order one TODAY!](http://shop.snowshoestamp.com/)","category":"551462da0a0c691700616802","createdAt":"2015-07-07T23:04:23.198Z","excerpt":"A step-by-step guide to building your first SnowShoe app in under 10 minutes.","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":1,"project":"55087b0f6065ed17002643ce","slug":"hello-world","sync_unique":"","title":"Hello, World","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Hello, World

A step-by-step guide to building your first SnowShoe app in under 10 minutes.

You’ve watched the videos. You’ve ordered your [developer kit](http://shop.snowshoestamp.com/). You’ve played with the [demos](http://beta.snowshoestamp.com/demo/) and [registered your app](http://beta.snowshoestamp.com/applications/wizard/app-name/). Now you are ready to *build* a SnowShoe app of your own. **But what do you do first?** This guide will take you, step by step, through building a Hello World web app on the Snowshoe platform. When we’re done, you will understand exactly how the Snowshoe system works, and how to integrate it into all of your amazing projects. #“Hello World” Lets talk a little bit about what we want our app to do. To demonstrate the most basic functionality of the stamp, let's make an app that, when stamped, displays a hidden message specific to the stamp that was used. In the finished product, if you stamp with Stamp A, the app returns “hello world”. If you stamp with Stamp B, you get “hello moon”. Go to http://snow.sh/helloworld to see the finished product in action. #Step 1: Register your app and get SnowShoe API credentials First, we need to register our app with SnowShoe’s API. This will generate all of the credentials we will need to interact with the API endpoints. The first thing you should do is log into the snowshoe [developer portal](https://beta.snowshoestamp.com/applications/application/list/). This is your one-stop-shop for creating, modifying and monitoring all of your SnowShoe applications. Simply **[log in](https://beta.snowshoestamp.com/applications/application/list/)** with the username and password you chose when you purchased your developer kit. Once logged in, you should see something that looks like this: [block:image] { "images": [ { "image": [ "https://files.readme.io/MdLP9ip4QaSZMYLkPBTH_1-CORwJWYiDEb41d5CXanl6g.jpeg", "1-CORwJWYiDEb41d5CXanl6g.jpeg", "2000", "1027", "#347aa9", "" ], "caption": "The Developer Portal is your one-stop-shop for creating, modifying and monitoring your SnowShoe apps" } ] } [/block] The applications view lists all of your SnowShoe apps. If you followed our [First App Wizard](http://beta.snowshoestamp.com/applications/wizard/app-name/), the app you created should be listed here. **Click** the blue “New App” button. This will bring up an “App Details” page: [block:image] { "images": [ { "image": [ "https://files.readme.io/D3qKDsSjRmOyg9bRh7fN_1-YZKKNvY-e_dH93CO7FmvLg.jpeg", "1-YZKKNvY-e_dH93CO7FmvLg.jpeg", "2000", "1027", "#3a93d5", "" ], "caption": "Choose a name for your app, scroll down, and click save." } ] } [/block] All we need right now is a name. **Enter the name of your choice** in the top field, scroll to the bottom of the page, and **click** “save”. #Step 2: Getting Comfortable with the Stamp Screen A new header should have just appeared that displays your new app’s Name, its App Key, App Secret, and three urls (Stamp Screen, Debug Callback, and Serial Number Identifier): [block:image] { "images": [ { "image": [ "https://files.readme.io/GGSDv6FtTViCtiOJ1kiF_1-Ann0BO6N-Z_nMdkboPkl-g.jpeg", "1-Ann0BO6N-Z_nMdkboPkl-g.jpeg", "2000", "1027", "#347e9d", "" ] } ] } [/block] The first thing we are going to look at is the Stamp Screen. The stamp screen is a webpage that observes a stamp interaction and reports the observed touch coordinates back to your app. [block:image] { "images": [ { "image": [ "https://files.readme.io/nPTUU8LjRuGn005biGyz_1-Oza7B0iQpAN2gEthHVSfLQ.png", "1-Oza7B0iQpAN2gEthHVSfLQ.png", "640", "1136", "#24ac63", "" ], "caption": "Your app’s default stamp screen will look like this. If you don’t like our nifty little animated GIF, you can upload a new stamp screen image on the Application Details page." } ] } [/block] While you are more than welcome to build and host your own stamp screen (and we have [stamp screen libraries](doc:maintained-libraries) and [step-by-step docs](doc:part-1-stamp-screen) available to get you started), *we host one of these highly optimized stamp screens for each app you build*, and they are certainly the fastest way for you to get an app up and running. If you use the stamp screen we host, your app should redirect to this stamp screen url whenever you want your user to use a stamp. Go ahead and **click** on the “send to mobile” button next to your stamp screen url. We will send you an email with a link to your stamp screen. **Open** that link on your mobile device, and you should now see a stamp screen displaying our default green animated GIF. #Step 3: The Callback URL Now, at this point, if you stamp your stamp screen with one of your developer stamps, you will just see a JSON output printed to the screen. Thats because we haven’t yet specified a *callback URL*. Your callback url is the endpoint on your server that receives data from the stamp screen. [block:image] { "images": [ { "image": [ "https://files.readme.io/4ZNXZejdQleTsKieA2pE_1-40Rht3AZErC3LoBgpiAc9Q.png", "1-40Rht3AZErC3LoBgpiAc9Q.png", "640", "1136", "#3f9bfc", "" ] } ] } [/block] You can still stamp your app’s stamp screen without specifying a callback url. Your stamp screen then simply POSTs its data to a default endpoint on our system that calls our API internally and then outputs the API response. That endpoint is your *debug callback*. **However, you want your stamp screen to post data to YOUR endpoint, or callback, that lives on the server side of YOUR web/native app.** Then you can call the SnowShoe API yourself and do things with the response. [block:image] { "images": [ { "image": [ "https://files.readme.io/h2uiMO7EQHy1UxzLfP6U_SSS_API_DIAGRAM_ss-hosted_stamp_screen.png", "SSS_API_DIAGRAM_ss-hosted_stamp_screen.png", "1416", "753", "#2d5575", "" ], "caption": "Your callback URL should map to a method on Your Server that includes one of SnowShoe's server-side libraries to sign the stamp data and submit it to SnowShoe's API for authentication." } ] } [/block] #Step 4: Building your callback. Remember, we are building a callback that uses the SnowShoe-hosted stamp screen, so we need to have a server with a publicly-accessible URL. [block:image] { "images": [ { "image": [ "https://files.readme.io/Ib4EVcZcRbdxOIQLJLMI_Screen%20Shot%202016-02-29%20at%202.57.42%20PM.png", "Screen Shot 2016-02-29 at 2.57.42 PM.png", "2476", "1400", "#37a49d", "" ], "caption": "The data collected from your stamp screen will be sent to this publicly accessible URL that lives on your backend server" } ] } [/block] The idea here is that we need a server endpoint that a stamp screen can send data to. The data that the stamp screen is going to POST to this callback is called “data”, so, for instance, in Python you could access it as request.POST[‘data’] . That data then needs to be POSTed to our API using OAuth 1.0a, signed using your app secret, and the response will be JSON containing information about the stamp. ##Posting to the SnowShoe API **To post to our API, you need to add one of our backend libraries to the server side of your web/native app.** For specific directions and example code for parsing the response based on language, we provide the following resources. We maintain [Ruby](https://github.com/snowshoestamp/snowshoe_ruby/) and [Node.js](https://github.com/snowshoestamp/snowshoe_node/) libraries, a [Python SDK](https://medium.com/@SnowShoeStamp/the-snowshoe-stamp-python-sdk-f623bb162f4e) and a [PHP SDK](https://medium.com/@SnowShoeStamp/the-snowshoe-stamp-php-sdk-1a5b2db67f21) which are easy assets you can use to build the OAuth request. Of course, you can build the OAuth request yourself, or there are a bunch of [community-supported libraries](doc:community-libraries) for languages other than those mentioned above. The important part is that you take the data that is posted from the stamp screen to your callback, construct an Oauth 1.0a request around it, sign it with your app secret, and call our API using a POST request. The response from that request will be a JSON object containing information about the stamp event. **IMPORTANT!** Once you’ve got your callback set up and accessible via a public URL, you need to enter that URL into your app, back in our developer portal. When you get to the app list after logging in, click on your app, scroll down to the Callback URL field, enter your URL that maps to the callback you set up on your app's server, and click Save. [block:callout] { "type": "info", "title": "Note", "body": "If you build and host your own stamp screen, you do not need to enter anything into the Callback URL field. In this case, you will use our [SnowShoe jQuery library](https://github.com/snowshoestamp/snowshoe_jquery/) to submit stamp coordinate data directly from your stamp screen to the callback you set up on your app's server." } [/block] #Step 5: Parsing the JSON response Our API returns the following JSON if we’ve called it successfully: [block:code] { "codes": [ { "code": "{“stamp”: {“serial”: “DEVA”}, “receipt”: “o8FLLwYW7TVjtO4VTUP4IgQvvvI=”, “secure”: false, “created”: “2013-05-24 23:01:23.274865+00:00\"}", "language": "json" } ] } [/block] You can see that the first element is a “stamp” object, with a “serial” attribute. That serial is the stamp’s “name”. While all developer stamps have the same serial number, when you move to production stamps, each stamp will have its own special serial number specific to your app. #Step 6: Making the Magic Happen Sweet! We now know which stamp our user touched to the screen, and we simply need to write some code inside the callback that displays the correct message for each stamp. Here is the code for your callback in Ruby, Python and PHP: [block:code] { "codes": [ { "code": "require 'snowshoe'\n\ndef callback\n client = Snowshoe::Client.new(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\n data = { \"data\" => params[\"data\"] }\n response = client.post(data)\n\n if response.include? \"stamp\"\n \n if response[\"stamp\"][\"serial\"] == \"DEVA\"\n puts \"Hello World\"\n end\n if response[\"stamp\"][\"serial\"] == \"DEVB\"\n puts \"Hello Moon\"\n end\n \n else\n puts \"Stamp not found!\"\n end\nend", "language": "ruby" }, { "code": "from sssapi import Client\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.http import HttpResponse\n\n@csrf_exempt\ndef callback(request): \n \n client = Client(app_key=\"YOUR_APP_KEY\", app_secret=\"YOUR_APP_SECRET\") \n \n response = client.call({“data”: request.POST[‘data’]})\n \n if response.has_key(‘stamp’): \n \n if response[‘stamp’][‘serial’] == “DEVA”: \n return HttpResponse(\"Hello World\")\n \n if response['stamp']['serial'] == \"DEVB\":\n return HttpResponse(\"Hello Moon\")\n \n else:\n return HttpResponse(“Invalid Stamp!”)", "language": "python" }, { "code": "include (\"./inc/SSSApiClient.php\");\n$app_key = \"YOUR_APP_KEY\";\n$app_secret = \"YOUR_APP_SECRET\";\n$data = $_POST[‘data’];\n$client = new SSSApiClient($app_key, $app_secret);\n$JSONResponse = $client->processData($data);\n$response = json_decode($JSONResponse, true);\n\nif(array_key_exists(“stamp”, $response)){\n\n $serial = $response[‘stamp’][‘serial’];\n\n}else{\n $serial = false;\n}\nif($serial==”DEVA”){\n echo “Hello World”;\n}\nif($serial == “DEVB”){\n echo “Hello Moon”;\n}\nif(!$serial){\n echo “Stamp not found!”;\n}", "language": "php" } ] } [/block] The key is that your callback leverages the serial number of the stamp that was returned to make your app do something special. Here it’s just a “Hello World” message. But the possibilities are limitless. #That was fun, but what’s next? There are a whole bunch of ways you can customize the SnowShoe stamp screen. [Learn more here](https://medium.com/@SnowShoeStamp/modifying-the-snowshoe-stamp-screen-f28e35d5ce62). You can also associate individual images with particular stamps by following this quick tutorial [here](doc:create-a-demo-application-without-coding). Have more questions? Check out the rest of our docs or email us at [support@snow.sh](mailto:support@snow.sh). Don’t have a SnowShoe developer kit? [Order one TODAY!](http://shop.snowshoestamp.com/)
You’ve watched the videos. You’ve ordered your [developer kit](http://shop.snowshoestamp.com/). You’ve played with the [demos](http://beta.snowshoestamp.com/demo/) and [registered your app](http://beta.snowshoestamp.com/applications/wizard/app-name/). Now you are ready to *build* a SnowShoe app of your own. **But what do you do first?** This guide will take you, step by step, through building a Hello World web app on the Snowshoe platform. When we’re done, you will understand exactly how the Snowshoe system works, and how to integrate it into all of your amazing projects. #“Hello World” Lets talk a little bit about what we want our app to do. To demonstrate the most basic functionality of the stamp, let's make an app that, when stamped, displays a hidden message specific to the stamp that was used. In the finished product, if you stamp with Stamp A, the app returns “hello world”. If you stamp with Stamp B, you get “hello moon”. Go to http://snow.sh/helloworld to see the finished product in action. #Step 1: Register your app and get SnowShoe API credentials First, we need to register our app with SnowShoe’s API. This will generate all of the credentials we will need to interact with the API endpoints. The first thing you should do is log into the snowshoe [developer portal](https://beta.snowshoestamp.com/applications/application/list/). This is your one-stop-shop for creating, modifying and monitoring all of your SnowShoe applications. Simply **[log in](https://beta.snowshoestamp.com/applications/application/list/)** with the username and password you chose when you purchased your developer kit. Once logged in, you should see something that looks like this: [block:image] { "images": [ { "image": [ "https://files.readme.io/MdLP9ip4QaSZMYLkPBTH_1-CORwJWYiDEb41d5CXanl6g.jpeg", "1-CORwJWYiDEb41d5CXanl6g.jpeg", "2000", "1027", "#347aa9", "" ], "caption": "The Developer Portal is your one-stop-shop for creating, modifying and monitoring your SnowShoe apps" } ] } [/block] The applications view lists all of your SnowShoe apps. If you followed our [First App Wizard](http://beta.snowshoestamp.com/applications/wizard/app-name/), the app you created should be listed here. **Click** the blue “New App” button. This will bring up an “App Details” page: [block:image] { "images": [ { "image": [ "https://files.readme.io/D3qKDsSjRmOyg9bRh7fN_1-YZKKNvY-e_dH93CO7FmvLg.jpeg", "1-YZKKNvY-e_dH93CO7FmvLg.jpeg", "2000", "1027", "#3a93d5", "" ], "caption": "Choose a name for your app, scroll down, and click save." } ] } [/block] All we need right now is a name. **Enter the name of your choice** in the top field, scroll to the bottom of the page, and **click** “save”. #Step 2: Getting Comfortable with the Stamp Screen A new header should have just appeared that displays your new app’s Name, its App Key, App Secret, and three urls (Stamp Screen, Debug Callback, and Serial Number Identifier): [block:image] { "images": [ { "image": [ "https://files.readme.io/GGSDv6FtTViCtiOJ1kiF_1-Ann0BO6N-Z_nMdkboPkl-g.jpeg", "1-Ann0BO6N-Z_nMdkboPkl-g.jpeg", "2000", "1027", "#347e9d", "" ] } ] } [/block] The first thing we are going to look at is the Stamp Screen. The stamp screen is a webpage that observes a stamp interaction and reports the observed touch coordinates back to your app. [block:image] { "images": [ { "image": [ "https://files.readme.io/nPTUU8LjRuGn005biGyz_1-Oza7B0iQpAN2gEthHVSfLQ.png", "1-Oza7B0iQpAN2gEthHVSfLQ.png", "640", "1136", "#24ac63", "" ], "caption": "Your app’s default stamp screen will look like this. If you don’t like our nifty little animated GIF, you can upload a new stamp screen image on the Application Details page." } ] } [/block] While you are more than welcome to build and host your own stamp screen (and we have [stamp screen libraries](doc:maintained-libraries) and [step-by-step docs](doc:part-1-stamp-screen) available to get you started), *we host one of these highly optimized stamp screens for each app you build*, and they are certainly the fastest way for you to get an app up and running. If you use the stamp screen we host, your app should redirect to this stamp screen url whenever you want your user to use a stamp. Go ahead and **click** on the “send to mobile” button next to your stamp screen url. We will send you an email with a link to your stamp screen. **Open** that link on your mobile device, and you should now see a stamp screen displaying our default green animated GIF. #Step 3: The Callback URL Now, at this point, if you stamp your stamp screen with one of your developer stamps, you will just see a JSON output printed to the screen. Thats because we haven’t yet specified a *callback URL*. Your callback url is the endpoint on your server that receives data from the stamp screen. [block:image] { "images": [ { "image": [ "https://files.readme.io/4ZNXZejdQleTsKieA2pE_1-40Rht3AZErC3LoBgpiAc9Q.png", "1-40Rht3AZErC3LoBgpiAc9Q.png", "640", "1136", "#3f9bfc", "" ] } ] } [/block] You can still stamp your app’s stamp screen without specifying a callback url. Your stamp screen then simply POSTs its data to a default endpoint on our system that calls our API internally and then outputs the API response. That endpoint is your *debug callback*. **However, you want your stamp screen to post data to YOUR endpoint, or callback, that lives on the server side of YOUR web/native app.** Then you can call the SnowShoe API yourself and do things with the response. [block:image] { "images": [ { "image": [ "https://files.readme.io/h2uiMO7EQHy1UxzLfP6U_SSS_API_DIAGRAM_ss-hosted_stamp_screen.png", "SSS_API_DIAGRAM_ss-hosted_stamp_screen.png", "1416", "753", "#2d5575", "" ], "caption": "Your callback URL should map to a method on Your Server that includes one of SnowShoe's server-side libraries to sign the stamp data and submit it to SnowShoe's API for authentication." } ] } [/block] #Step 4: Building your callback. Remember, we are building a callback that uses the SnowShoe-hosted stamp screen, so we need to have a server with a publicly-accessible URL. [block:image] { "images": [ { "image": [ "https://files.readme.io/Ib4EVcZcRbdxOIQLJLMI_Screen%20Shot%202016-02-29%20at%202.57.42%20PM.png", "Screen Shot 2016-02-29 at 2.57.42 PM.png", "2476", "1400", "#37a49d", "" ], "caption": "The data collected from your stamp screen will be sent to this publicly accessible URL that lives on your backend server" } ] } [/block] The idea here is that we need a server endpoint that a stamp screen can send data to. The data that the stamp screen is going to POST to this callback is called “data”, so, for instance, in Python you could access it as request.POST[‘data’] . That data then needs to be POSTed to our API using OAuth 1.0a, signed using your app secret, and the response will be JSON containing information about the stamp. ##Posting to the SnowShoe API **To post to our API, you need to add one of our backend libraries to the server side of your web/native app.** For specific directions and example code for parsing the response based on language, we provide the following resources. We maintain [Ruby](https://github.com/snowshoestamp/snowshoe_ruby/) and [Node.js](https://github.com/snowshoestamp/snowshoe_node/) libraries, a [Python SDK](https://medium.com/@SnowShoeStamp/the-snowshoe-stamp-python-sdk-f623bb162f4e) and a [PHP SDK](https://medium.com/@SnowShoeStamp/the-snowshoe-stamp-php-sdk-1a5b2db67f21) which are easy assets you can use to build the OAuth request. Of course, you can build the OAuth request yourself, or there are a bunch of [community-supported libraries](doc:community-libraries) for languages other than those mentioned above. The important part is that you take the data that is posted from the stamp screen to your callback, construct an Oauth 1.0a request around it, sign it with your app secret, and call our API using a POST request. The response from that request will be a JSON object containing information about the stamp event. **IMPORTANT!** Once you’ve got your callback set up and accessible via a public URL, you need to enter that URL into your app, back in our developer portal. When you get to the app list after logging in, click on your app, scroll down to the Callback URL field, enter your URL that maps to the callback you set up on your app's server, and click Save. [block:callout] { "type": "info", "title": "Note", "body": "If you build and host your own stamp screen, you do not need to enter anything into the Callback URL field. In this case, you will use our [SnowShoe jQuery library](https://github.com/snowshoestamp/snowshoe_jquery/) to submit stamp coordinate data directly from your stamp screen to the callback you set up on your app's server." } [/block] #Step 5: Parsing the JSON response Our API returns the following JSON if we’ve called it successfully: [block:code] { "codes": [ { "code": "{“stamp”: {“serial”: “DEVA”}, “receipt”: “o8FLLwYW7TVjtO4VTUP4IgQvvvI=”, “secure”: false, “created”: “2013-05-24 23:01:23.274865+00:00\"}", "language": "json" } ] } [/block] You can see that the first element is a “stamp” object, with a “serial” attribute. That serial is the stamp’s “name”. While all developer stamps have the same serial number, when you move to production stamps, each stamp will have its own special serial number specific to your app. #Step 6: Making the Magic Happen Sweet! We now know which stamp our user touched to the screen, and we simply need to write some code inside the callback that displays the correct message for each stamp. Here is the code for your callback in Ruby, Python and PHP: [block:code] { "codes": [ { "code": "require 'snowshoe'\n\ndef callback\n client = Snowshoe::Client.new(SNOWSHOE_APP_KEY, SNOWSHOE_APP_SECRET)\n data = { \"data\" => params[\"data\"] }\n response = client.post(data)\n\n if response.include? \"stamp\"\n \n if response[\"stamp\"][\"serial\"] == \"DEVA\"\n puts \"Hello World\"\n end\n if response[\"stamp\"][\"serial\"] == \"DEVB\"\n puts \"Hello Moon\"\n end\n \n else\n puts \"Stamp not found!\"\n end\nend", "language": "ruby" }, { "code": "from sssapi import Client\nfrom django.views.decorators.csrf import csrf_exempt\nfrom django.http import HttpResponse\n\n@csrf_exempt\ndef callback(request): \n \n client = Client(app_key=\"YOUR_APP_KEY\", app_secret=\"YOUR_APP_SECRET\") \n \n response = client.call({“data”: request.POST[‘data’]})\n \n if response.has_key(‘stamp’): \n \n if response[‘stamp’][‘serial’] == “DEVA”: \n return HttpResponse(\"Hello World\")\n \n if response['stamp']['serial'] == \"DEVB\":\n return HttpResponse(\"Hello Moon\")\n \n else:\n return HttpResponse(“Invalid Stamp!”)", "language": "python" }, { "code": "include (\"./inc/SSSApiClient.php\");\n$app_key = \"YOUR_APP_KEY\";\n$app_secret = \"YOUR_APP_SECRET\";\n$data = $_POST[‘data’];\n$client = new SSSApiClient($app_key, $app_secret);\n$JSONResponse = $client->processData($data);\n$response = json_decode($JSONResponse, true);\n\nif(array_key_exists(“stamp”, $response)){\n\n $serial = $response[‘stamp’][‘serial’];\n\n}else{\n $serial = false;\n}\nif($serial==”DEVA”){\n echo “Hello World”;\n}\nif($serial == “DEVB”){\n echo “Hello Moon”;\n}\nif(!$serial){\n echo “Stamp not found!”;\n}", "language": "php" } ] } [/block] The key is that your callback leverages the serial number of the stamp that was returned to make your app do something special. Here it’s just a “Hello World” message. But the possibilities are limitless. #That was fun, but what’s next? There are a whole bunch of ways you can customize the SnowShoe stamp screen. [Learn more here](https://medium.com/@SnowShoeStamp/modifying-the-snowshoe-stamp-screen-f28e35d5ce62). You can also associate individual images with particular stamps by following this quick tutorial [here](doc:create-a-demo-application-without-coding). Have more questions? Check out the rest of our docs or email us at [support@snow.sh](mailto:support@snow.sh). Don’t have a SnowShoe developer kit? [Order one TODAY!](http://shop.snowshoestamp.com/)
{"__v":2,"_id":"5568e303952dca0d0019c85a","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"SnowShoe provides the SnowShoe Experience Builder, a dashboard interface allowing users to build demo applications with custom visual assets, all without needing to write a line of code.\n\nThe video below walks you through the process - from creating an application through uploading the assets you'd like to link to when a specific stamp touches the stamp screen.  We host it all for you to keep everything easy.  It's just 3 steps:\n\n1\\. [Create a new SnowShoe application](doc:creating-a-snowshoe-application) \n\n2\\. Upload a success screen image (either global or for specific stamps). We suggest using images and gifs sized at 640x1136 pixels for max compatibility.\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"Global Success Images vs Individual Success Images\",\n  \"body\": \"A **Global Success Image** is not tied to a unique stamp.  It will be displayed after any successful stamp authentication, no matter what stamp is touched to the screen (so long as this stamp has been commissioned to the app).\\n\\n**Individual Success Images** are tied to unique stamps, and will only be displayed when users touch a specific stamp to the screen.\\n\\n*They are mutually exclusive.*  The Global Success Image will take precedence over any Individual Success Image you've uploaded.  Please be sure to clear your Global Success Image before adding Individual Success Images.\"\n}\n[/block]\n\n3\\. Share your SnowShoe hosted stamp screen\n[block:html]\n{\n  \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F125949188&amp;url=https%3A%2F%2Fvimeo.com%2F125949188&amp;image=http%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F516229311_960.jpg&amp;key=02466f963b9b4bb8845a05b53d3235d7&amp;type=text%2Fhtml&amp;schema=vimeo\\\" width=\\\"100%\\\" height=\\\"520\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allowfullscreen=\\\"\\\"></iframe>\"\n}\n[/block]\nOf course, if you'd like to have more fine tuned control or you're ready to build a more custom implementation, check out our [Maintained Libraries](doc:maintained-libraries) that allow you to integrate SnowShoe functionality directly into your website, web app, or native application.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Note\",\n  \"body\": \"Using the SnowShoe Experience Builder does not allow you to make an existing webpage or app stampable.  You must use the SnowShoe-hosted stamp screen.\"\n}\n[/block]","category":"551462da0a0c691700616802","createdAt":"2015-05-29T22:06:59.851Z","excerpt":"Using the SnowShoe Experience Builder","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":2,"project":"55087b0f6065ed17002643ce","slug":"create-a-demo-application-without-coding","sync_unique":"","title":"Create a Demo Application Without Coding","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Create a Demo Application Without Coding

Using the SnowShoe Experience Builder

SnowShoe provides the SnowShoe Experience Builder, a dashboard interface allowing users to build demo applications with custom visual assets, all without needing to write a line of code. The video below walks you through the process - from creating an application through uploading the assets you'd like to link to when a specific stamp touches the stamp screen. We host it all for you to keep everything easy. It's just 3 steps: 1\. [Create a new SnowShoe application](doc:creating-a-snowshoe-application) 2\. Upload a success screen image (either global or for specific stamps). We suggest using images and gifs sized at 640x1136 pixels for max compatibility. [block:callout] { "type": "warning", "title": "Global Success Images vs Individual Success Images", "body": "A **Global Success Image** is not tied to a unique stamp. It will be displayed after any successful stamp authentication, no matter what stamp is touched to the screen (so long as this stamp has been commissioned to the app).\n\n**Individual Success Images** are tied to unique stamps, and will only be displayed when users touch a specific stamp to the screen.\n\n*They are mutually exclusive.* The Global Success Image will take precedence over any Individual Success Image you've uploaded. Please be sure to clear your Global Success Image before adding Individual Success Images." } [/block] 3\. Share your SnowShoe hosted stamp screen [block:html] { "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F125949188&amp;url=https%3A%2F%2Fvimeo.com%2F125949188&amp;image=http%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F516229311_960.jpg&amp;key=02466f963b9b4bb8845a05b53d3235d7&amp;type=text%2Fhtml&amp;schema=vimeo\" width=\"100%\" height=\"520\" scrolling=\"no\" frameborder=\"0\" allowfullscreen=\"\"></iframe>" } [/block] Of course, if you'd like to have more fine tuned control or you're ready to build a more custom implementation, check out our [Maintained Libraries](doc:maintained-libraries) that allow you to integrate SnowShoe functionality directly into your website, web app, or native application. [block:callout] { "type": "info", "title": "Note", "body": "Using the SnowShoe Experience Builder does not allow you to make an existing webpage or app stampable. You must use the SnowShoe-hosted stamp screen." } [/block]
SnowShoe provides the SnowShoe Experience Builder, a dashboard interface allowing users to build demo applications with custom visual assets, all without needing to write a line of code. The video below walks you through the process - from creating an application through uploading the assets you'd like to link to when a specific stamp touches the stamp screen. We host it all for you to keep everything easy. It's just 3 steps: 1\. [Create a new SnowShoe application](doc:creating-a-snowshoe-application) 2\. Upload a success screen image (either global or for specific stamps). We suggest using images and gifs sized at 640x1136 pixels for max compatibility. [block:callout] { "type": "warning", "title": "Global Success Images vs Individual Success Images", "body": "A **Global Success Image** is not tied to a unique stamp. It will be displayed after any successful stamp authentication, no matter what stamp is touched to the screen (so long as this stamp has been commissioned to the app).\n\n**Individual Success Images** are tied to unique stamps, and will only be displayed when users touch a specific stamp to the screen.\n\n*They are mutually exclusive.* The Global Success Image will take precedence over any Individual Success Image you've uploaded. Please be sure to clear your Global Success Image before adding Individual Success Images." } [/block] 3\. Share your SnowShoe hosted stamp screen [block:html] { "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F125949188&amp;url=https%3A%2F%2Fvimeo.com%2F125949188&amp;image=http%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F516229311_960.jpg&amp;key=02466f963b9b4bb8845a05b53d3235d7&amp;type=text%2Fhtml&amp;schema=vimeo\" width=\"100%\" height=\"520\" scrolling=\"no\" frameborder=\"0\" allowfullscreen=\"\"></iframe>" } [/block] Of course, if you'd like to have more fine tuned control or you're ready to build a more custom implementation, check out our [Maintained Libraries](doc:maintained-libraries) that allow you to integrate SnowShoe functionality directly into your website, web app, or native application. [block:callout] { "type": "info", "title": "Note", "body": "Using the SnowShoe Experience Builder does not allow you to make an existing webpage or app stampable. You must use the SnowShoe-hosted stamp screen." } [/block]
{"__v":63,"_id":"5543cea912245b1900ba091c","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"It's entirely possible to use the SnowShoe jQuery library invisibly, making a screen stampable and delivering a payoff without anything visible to the user. However, based on our field tests and implementation stats, we highly recommend you use our **progress bar animation** to let users know when a stamp has been successfully registered by the screen, as well as our **help-messaging** that will use dynamically generated on-screen notes to queue users into stamping best practices based on their inputs. \n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Updates\"\n}\n[/block]\n- Progress Bar Animations (updated in v0.3.0)\n- Help Messages (updated in v0.3.0)\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Progress Bar Animations\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"success\",\n  \"body\": \"The newest version of the SnowShoe jQuery plugin (v0.3.0) fixes a bug for stamp detection in Chrome browsers on Android devices, so we recommend you test it in your apps and upgrade as soon as possible if that is an import client base for your application. It is currently in use on the SnowShoe [homepage](http://www.snowshoestamp.com/) and on all demos and SnowShoe-hosted stamp screens.\"\n}\n[/block]\nWhen [using the SnowShoe jQuery module](doc:part-1-stamp-screen), you start by creating an object with initialization data at the bottom of the page or template you’d like to make stampable. This object houses variables that will determine how the stamp screen acts and how the stamp data is sent from your app to SnowShoe for authentication.\n\nThis module comes with the ability to trigger a loading animation as soon as a stamp is touched to the screen.  View a video of this in action [here](https://vimeo.com/155034382).  To use this feature,\n\n1\\. Include `snowshoe-sample.css`.  The loading animations are CSS-based and optimized for quick load times.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<!-- Snowshoe loader CSS -->\\n<link rel=\\\"stylesheet\\\" href=\\\"snowshoe-sample.css\\\">\",\n      \"language\": \"html\"\n    }\n  ]\n}\n[/block]\n\n2\\.\tCreate a div with the id of `#snowshoe-progress-bar`.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<!-- Snowshoe loader -->\\n<div id=\\\"snowshoe-progress-bar\\\"></div>\",\n      \"language\": \"html\"\n    }\n  ]\n}\n[/block]\n\n3\\.\tAdd the `progressBarOn` property to the initialization data object at the bottom of the page and set its value to `true`.  The plugin will now handle the load animation by dynamically adding the class `.snowshoe-progress-bar` to the element that wears the id `#snowshoe-progress-bar`.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<script>\\nvar stampScreenInitData = {\\n  \\\"postUrl\\\": \\\"http://mydomain.com/stampscreen\\\",\\n  \\\"stampScreenElmId\\\": \\\"stamp-screen\\\",\\n  \\\"progressBarOn\\\": true,\\n  \\\"postViaAjax\\\": true, // post via Ajax  \\n  \\\"success\\\": function(response){\\n    // handle success\\n    console.log(\\\"Success!\\\");\\n    // clear animation\\n    $('#snowshoe-progress-bar').removeClass(\\\"snowshoe-progress-bar\\\");\\n  },\\n  \\\"error\\\": function(response){\\n    // handle failure\\n    console.log(\\\" :-( \\\");\\n    // clear animation\\n    $('#snowshoe-progress-bar').removeClass(\\\"snowshoe-progress-bar\\\");\\n  }\\n}\\n</script>\\n<script src=\\\"jquery.snowshoe.js\\\"></script>\",\n      \"language\": \"javascript\"\n    }\n  ]\n}\n[/block]\nThe Snowshoe jQuery module dynamically adds the load animation class whenever 5 simultaneous touch events occur (i.e. a user touches a stamp to a screen).\n\n\n4\\.\tClear the animation.\n\n**To clear the animation when using AJAX...**\nYou'll notice above that we clear the animation in both the _success_ and _error_ callbacks.  The animation will continue if you fail to do this, and your users may think the \"stamp magic\" is still trying to load.\n\n**To clear the animation when using HTTP POST...**\nYou'll likely be redirecting to another page upon a successful stamp interaction, so you will want to ensure that the progress bar animation is removed if a user returns to the stamp screen using the browser's _back_ button. To ensure compatibility on the largest number of mobile browsers, we suggest adding the following code below your `jquery.snowshoe.js` reference.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<script>\\n  window.onpopstate=function(){\\n    $('#snowshoe-progress-bar').removeClass(\\\"snowshoe-progress-bar\\\");\\n  };\\n</script>\",\n      \"language\": \"javascript\"\n    }\n  ]\n}\n[/block]\nFeel free to override any of the CSS with your own. Also, if you’d like to implement your own loader, simply remove the `progressBarOn` property from your initialization data object or set it to `false`.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"CSS Requirements\",\n  \"body\": \"For the stamp screen html element, please ensure that its **width** and **height** properties are **_large enough to accommodate the full physical dimensions of your SnowShoe stamp._**  We suggest keeping the whole page stampable.\"\n}\n[/block]\n\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"Help Messages\"\n}\n[/block]\nIf a user is having trouble with their stamp, displaying help messages to them can be useful. With our new Stamp 2.0 hardware, it helps to stamp and hold for a couple seconds on some devices. We've added dynamic messaging to this module allowing you to display custom messaging onscreen that will guide users toward best stamping practices.  View a video of this in action [here](https://vimeo.com/155034382).\n\n1\\. Include `snowshoe-sample.css`.  This includes default styling to display the messages. Feel free (and you should) customize this css as needed.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<!-- Snowshoe messages CSS -->\\n<link rel=\\\"stylesheet\\\" href=\\\"snowshoe-sample.css\\\">\",\n      \"language\": \"html\"\n    }\n  ]\n}\n[/block]\n2\\. Create a div with the id of `#snowshoe-messages`.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<!-- Snowshoe messages -->\\n<div id=\\\"snowshoe-messages\\\"></div>\",\n      \"language\": \"html\"\n    }\n  ]\n}\n[/block]\n3\\. To add helpful messaging for when a user isn't touching the stamp to the screen fully, insert an html block in the initialization data in the format referenced below. First, a user will see a `userTraining` message for 2 seconds (instructs them to hold the stamp on the screen), followed by an `insufficientPoints` message (informs them to lift the stamp and try again). We used `<h3>` tags in the example but feel free to use any html you would like. It will be dynamically appended to the `<div>` with the id of `#snowshoe-messages`.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<script>\\nvar stampScreenInitData = {\\n  \\\"postUrl\\\": \\\"http://mydomain.com/stampscreen\\\",\\n  \\\"stampScreenElmId\\\": \\\"stamp-screen\\\",\\n  \\\"progressBarOn\\\": true,\\n  \\\"messages\\\": {\\n    \\\"userTraining\\\" : \\\"<h3>Keep holding</h3>\\\",\\n    \\\"insufficientPoints\\\" : \\\"<h3>Try again!</h3>\\\"\\n  }\\n}\\n</script>\\n<script src=\\\"jquery.snowshoe.js\\\"></script>\",\n      \"language\": \"html\"\n    }\n  ]\n}\n[/block]\n4\\. If you are using AJAX to send stamp data to your backend, you can likewise append a helpful error messaging html block in the error callback to let your users know that a stamp wasn't recognized.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"<script>\\nvar stampScreenInitData = {\\n  \\\"postUrl\\\": \\\"http://mydomain.com/stampscreen\\\",\\n  \\\"stampScreenElmId\\\": \\\"stamp-screen\\\",\\n  \\\"progressBarOn\\\": true,\\n  \\\"messages\\\": {\\n    \\\"userTraining\\\" : \\\"<h3>Keep holding</h3>\\\",\\n    \\\"insufficientPoints\\\" : \\\"<h3>Try again!</h3>\\\"\\n  },\\n  \\\"postViaAjax\\\": true,\\n  \\\"success\\\": function(response){\\n    // handle success\\n    console.log(\\\"Success!\\\");\\n    // clear screen\\n    $('#snowshoe-progress-bar').removeClass(\\\"snowshoe-progress-bar\\\");\\n    $(\\\"#snowshoe-messages\\\").empty();\\n  },\\n  \\\"error\\\": function(response){\\n    // handle failure\\n    console.log(\\\" :-( \\\");\\n    // clear screen\\n    $('#snowshoe-progress-bar').removeClass(\\\"snowshoe-progress-bar\\\");\\n    $(\\\"#snowshoe-messages\\\").empty();\\n    // show failure message\\n    $(\\\"#snowshoe-messages\\\").append(\\\"<h3>That stamp was not found. Please try again!</h3>\\\");\\n  }\\n}\\n</script>\\n<script src=\\\"jquery.snowshoe.js\\\"></script>\",\n      \"language\": \"html\"\n    }\n  ]\n}\n[/block]\nAgain, feel free to override any of `snowshoe-sample.css` with your own.  Just be sure to keep the element id `#snowshoe-messages` on the div to which you want to append your help message html blocks.","category":"551462da0a0c691700616802","createdAt":"2015-05-01T19:06:17.753Z","excerpt":"Using the full functionality built into our SnowShoe jQuery frontend library","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":3,"project":"55087b0f6065ed17002643ce","slug":"snowshoe-jquery-extras","sync_unique":"","title":"Best Practices","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Best Practices

Using the full functionality built into our SnowShoe jQuery frontend library

It's entirely possible to use the SnowShoe jQuery library invisibly, making a screen stampable and delivering a payoff without anything visible to the user. However, based on our field tests and implementation stats, we highly recommend you use our **progress bar animation** to let users know when a stamp has been successfully registered by the screen, as well as our **help-messaging** that will use dynamically generated on-screen notes to queue users into stamping best practices based on their inputs. [block:api-header] { "type": "basic", "title": "Updates" } [/block] - Progress Bar Animations (updated in v0.3.0) - Help Messages (updated in v0.3.0) [block:api-header] { "type": "basic", "title": "Progress Bar Animations" } [/block] [block:callout] { "type": "success", "body": "The newest version of the SnowShoe jQuery plugin (v0.3.0) fixes a bug for stamp detection in Chrome browsers on Android devices, so we recommend you test it in your apps and upgrade as soon as possible if that is an import client base for your application. It is currently in use on the SnowShoe [homepage](http://www.snowshoestamp.com/) and on all demos and SnowShoe-hosted stamp screens." } [/block] When [using the SnowShoe jQuery module](doc:part-1-stamp-screen), you start by creating an object with initialization data at the bottom of the page or template you’d like to make stampable. This object houses variables that will determine how the stamp screen acts and how the stamp data is sent from your app to SnowShoe for authentication. This module comes with the ability to trigger a loading animation as soon as a stamp is touched to the screen. View a video of this in action [here](https://vimeo.com/155034382). To use this feature, 1\. Include `snowshoe-sample.css`. The loading animations are CSS-based and optimized for quick load times. [block:code] { "codes": [ { "code": "<!-- Snowshoe loader CSS -->\n<link rel=\"stylesheet\" href=\"snowshoe-sample.css\">", "language": "html" } ] } [/block] 2\. Create a div with the id of `#snowshoe-progress-bar`. [block:code] { "codes": [ { "code": "<!-- Snowshoe loader -->\n<div id=\"snowshoe-progress-bar\"></div>", "language": "html" } ] } [/block] 3\. Add the `progressBarOn` property to the initialization data object at the bottom of the page and set its value to `true`. The plugin will now handle the load animation by dynamically adding the class `.snowshoe-progress-bar` to the element that wears the id `#snowshoe-progress-bar`. [block:code] { "codes": [ { "code": "<script>\nvar stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"progressBarOn\": true,\n \"postViaAjax\": true, // post via Ajax \n \"success\": function(response){\n // handle success\n console.log(\"Success!\");\n // clear animation\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n },\n \"error\": function(response){\n // handle failure\n console.log(\" :-( \");\n // clear animation\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n }\n}\n</script>\n<script src=\"jquery.snowshoe.js\"></script>", "language": "javascript" } ] } [/block] The Snowshoe jQuery module dynamically adds the load animation class whenever 5 simultaneous touch events occur (i.e. a user touches a stamp to a screen). 4\. Clear the animation. **To clear the animation when using AJAX...** You'll notice above that we clear the animation in both the _success_ and _error_ callbacks. The animation will continue if you fail to do this, and your users may think the "stamp magic" is still trying to load. **To clear the animation when using HTTP POST...** You'll likely be redirecting to another page upon a successful stamp interaction, so you will want to ensure that the progress bar animation is removed if a user returns to the stamp screen using the browser's _back_ button. To ensure compatibility on the largest number of mobile browsers, we suggest adding the following code below your `jquery.snowshoe.js` reference. [block:code] { "codes": [ { "code": "<script>\n window.onpopstate=function(){\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n };\n</script>", "language": "javascript" } ] } [/block] Feel free to override any of the CSS with your own. Also, if you’d like to implement your own loader, simply remove the `progressBarOn` property from your initialization data object or set it to `false`. [block:callout] { "type": "info", "title": "CSS Requirements", "body": "For the stamp screen html element, please ensure that its **width** and **height** properties are **_large enough to accommodate the full physical dimensions of your SnowShoe stamp._** We suggest keeping the whole page stampable." } [/block] [block:api-header] { "type": "basic", "title": "Help Messages" } [/block] If a user is having trouble with their stamp, displaying help messages to them can be useful. With our new Stamp 2.0 hardware, it helps to stamp and hold for a couple seconds on some devices. We've added dynamic messaging to this module allowing you to display custom messaging onscreen that will guide users toward best stamping practices. View a video of this in action [here](https://vimeo.com/155034382). 1\. Include `snowshoe-sample.css`. This includes default styling to display the messages. Feel free (and you should) customize this css as needed. [block:code] { "codes": [ { "code": "<!-- Snowshoe messages CSS -->\n<link rel=\"stylesheet\" href=\"snowshoe-sample.css\">", "language": "html" } ] } [/block] 2\. Create a div with the id of `#snowshoe-messages`. [block:code] { "codes": [ { "code": "<!-- Snowshoe messages -->\n<div id=\"snowshoe-messages\"></div>", "language": "html" } ] } [/block] 3\. To add helpful messaging for when a user isn't touching the stamp to the screen fully, insert an html block in the initialization data in the format referenced below. First, a user will see a `userTraining` message for 2 seconds (instructs them to hold the stamp on the screen), followed by an `insufficientPoints` message (informs them to lift the stamp and try again). We used `<h3>` tags in the example but feel free to use any html you would like. It will be dynamically appended to the `<div>` with the id of `#snowshoe-messages`. [block:code] { "codes": [ { "code": "<script>\nvar stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"progressBarOn\": true,\n \"messages\": {\n \"userTraining\" : \"<h3>Keep holding</h3>\",\n \"insufficientPoints\" : \"<h3>Try again!</h3>\"\n }\n}\n</script>\n<script src=\"jquery.snowshoe.js\"></script>", "language": "html" } ] } [/block] 4\. If you are using AJAX to send stamp data to your backend, you can likewise append a helpful error messaging html block in the error callback to let your users know that a stamp wasn't recognized. [block:code] { "codes": [ { "code": "<script>\nvar stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"progressBarOn\": true,\n \"messages\": {\n \"userTraining\" : \"<h3>Keep holding</h3>\",\n \"insufficientPoints\" : \"<h3>Try again!</h3>\"\n },\n \"postViaAjax\": true,\n \"success\": function(response){\n // handle success\n console.log(\"Success!\");\n // clear screen\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n $(\"#snowshoe-messages\").empty();\n },\n \"error\": function(response){\n // handle failure\n console.log(\" :-( \");\n // clear screen\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n $(\"#snowshoe-messages\").empty();\n // show failure message\n $(\"#snowshoe-messages\").append(\"<h3>That stamp was not found. Please try again!</h3>\");\n }\n}\n</script>\n<script src=\"jquery.snowshoe.js\"></script>", "language": "html" } ] } [/block] Again, feel free to override any of `snowshoe-sample.css` with your own. Just be sure to keep the element id `#snowshoe-messages` on the div to which you want to append your help message html blocks.
It's entirely possible to use the SnowShoe jQuery library invisibly, making a screen stampable and delivering a payoff without anything visible to the user. However, based on our field tests and implementation stats, we highly recommend you use our **progress bar animation** to let users know when a stamp has been successfully registered by the screen, as well as our **help-messaging** that will use dynamically generated on-screen notes to queue users into stamping best practices based on their inputs. [block:api-header] { "type": "basic", "title": "Updates" } [/block] - Progress Bar Animations (updated in v0.3.0) - Help Messages (updated in v0.3.0) [block:api-header] { "type": "basic", "title": "Progress Bar Animations" } [/block] [block:callout] { "type": "success", "body": "The newest version of the SnowShoe jQuery plugin (v0.3.0) fixes a bug for stamp detection in Chrome browsers on Android devices, so we recommend you test it in your apps and upgrade as soon as possible if that is an import client base for your application. It is currently in use on the SnowShoe [homepage](http://www.snowshoestamp.com/) and on all demos and SnowShoe-hosted stamp screens." } [/block] When [using the SnowShoe jQuery module](doc:part-1-stamp-screen), you start by creating an object with initialization data at the bottom of the page or template you’d like to make stampable. This object houses variables that will determine how the stamp screen acts and how the stamp data is sent from your app to SnowShoe for authentication. This module comes with the ability to trigger a loading animation as soon as a stamp is touched to the screen. View a video of this in action [here](https://vimeo.com/155034382). To use this feature, 1\. Include `snowshoe-sample.css`. The loading animations are CSS-based and optimized for quick load times. [block:code] { "codes": [ { "code": "<!-- Snowshoe loader CSS -->\n<link rel=\"stylesheet\" href=\"snowshoe-sample.css\">", "language": "html" } ] } [/block] 2\. Create a div with the id of `#snowshoe-progress-bar`. [block:code] { "codes": [ { "code": "<!-- Snowshoe loader -->\n<div id=\"snowshoe-progress-bar\"></div>", "language": "html" } ] } [/block] 3\. Add the `progressBarOn` property to the initialization data object at the bottom of the page and set its value to `true`. The plugin will now handle the load animation by dynamically adding the class `.snowshoe-progress-bar` to the element that wears the id `#snowshoe-progress-bar`. [block:code] { "codes": [ { "code": "<script>\nvar stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"progressBarOn\": true,\n \"postViaAjax\": true, // post via Ajax \n \"success\": function(response){\n // handle success\n console.log(\"Success!\");\n // clear animation\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n },\n \"error\": function(response){\n // handle failure\n console.log(\" :-( \");\n // clear animation\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n }\n}\n</script>\n<script src=\"jquery.snowshoe.js\"></script>", "language": "javascript" } ] } [/block] The Snowshoe jQuery module dynamically adds the load animation class whenever 5 simultaneous touch events occur (i.e. a user touches a stamp to a screen). 4\. Clear the animation. **To clear the animation when using AJAX...** You'll notice above that we clear the animation in both the _success_ and _error_ callbacks. The animation will continue if you fail to do this, and your users may think the "stamp magic" is still trying to load. **To clear the animation when using HTTP POST...** You'll likely be redirecting to another page upon a successful stamp interaction, so you will want to ensure that the progress bar animation is removed if a user returns to the stamp screen using the browser's _back_ button. To ensure compatibility on the largest number of mobile browsers, we suggest adding the following code below your `jquery.snowshoe.js` reference. [block:code] { "codes": [ { "code": "<script>\n window.onpopstate=function(){\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n };\n</script>", "language": "javascript" } ] } [/block] Feel free to override any of the CSS with your own. Also, if you’d like to implement your own loader, simply remove the `progressBarOn` property from your initialization data object or set it to `false`. [block:callout] { "type": "info", "title": "CSS Requirements", "body": "For the stamp screen html element, please ensure that its **width** and **height** properties are **_large enough to accommodate the full physical dimensions of your SnowShoe stamp._** We suggest keeping the whole page stampable." } [/block] [block:api-header] { "type": "basic", "title": "Help Messages" } [/block] If a user is having trouble with their stamp, displaying help messages to them can be useful. With our new Stamp 2.0 hardware, it helps to stamp and hold for a couple seconds on some devices. We've added dynamic messaging to this module allowing you to display custom messaging onscreen that will guide users toward best stamping practices. View a video of this in action [here](https://vimeo.com/155034382). 1\. Include `snowshoe-sample.css`. This includes default styling to display the messages. Feel free (and you should) customize this css as needed. [block:code] { "codes": [ { "code": "<!-- Snowshoe messages CSS -->\n<link rel=\"stylesheet\" href=\"snowshoe-sample.css\">", "language": "html" } ] } [/block] 2\. Create a div with the id of `#snowshoe-messages`. [block:code] { "codes": [ { "code": "<!-- Snowshoe messages -->\n<div id=\"snowshoe-messages\"></div>", "language": "html" } ] } [/block] 3\. To add helpful messaging for when a user isn't touching the stamp to the screen fully, insert an html block in the initialization data in the format referenced below. First, a user will see a `userTraining` message for 2 seconds (instructs them to hold the stamp on the screen), followed by an `insufficientPoints` message (informs them to lift the stamp and try again). We used `<h3>` tags in the example but feel free to use any html you would like. It will be dynamically appended to the `<div>` with the id of `#snowshoe-messages`. [block:code] { "codes": [ { "code": "<script>\nvar stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"progressBarOn\": true,\n \"messages\": {\n \"userTraining\" : \"<h3>Keep holding</h3>\",\n \"insufficientPoints\" : \"<h3>Try again!</h3>\"\n }\n}\n</script>\n<script src=\"jquery.snowshoe.js\"></script>", "language": "html" } ] } [/block] 4\. If you are using AJAX to send stamp data to your backend, you can likewise append a helpful error messaging html block in the error callback to let your users know that a stamp wasn't recognized. [block:code] { "codes": [ { "code": "<script>\nvar stampScreenInitData = {\n \"postUrl\": \"http://mydomain.com/stampscreen\",\n \"stampScreenElmId\": \"stamp-screen\",\n \"progressBarOn\": true,\n \"messages\": {\n \"userTraining\" : \"<h3>Keep holding</h3>\",\n \"insufficientPoints\" : \"<h3>Try again!</h3>\"\n },\n \"postViaAjax\": true,\n \"success\": function(response){\n // handle success\n console.log(\"Success!\");\n // clear screen\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n $(\"#snowshoe-messages\").empty();\n },\n \"error\": function(response){\n // handle failure\n console.log(\" :-( \");\n // clear screen\n $('#snowshoe-progress-bar').removeClass(\"snowshoe-progress-bar\");\n $(\"#snowshoe-messages\").empty();\n // show failure message\n $(\"#snowshoe-messages\").append(\"<h3>That stamp was not found. Please try again!</h3>\");\n }\n}\n</script>\n<script src=\"jquery.snowshoe.js\"></script>", "language": "html" } ] } [/block] Again, feel free to override any of `snowshoe-sample.css` with your own. Just be sure to keep the element id `#snowshoe-messages` on the div to which you want to append your help message html blocks.
{"__v":7,"_id":"5513019af5056719008df237","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Authenticating stamps is the core service of the SnowShoe API. \n\nCurrently, all calls are made to v2 of our API at: www.snowshoestamp.com/api/v2","category":"5512f24ef5056719008df201","createdAt":"2015-03-25T18:42:34.071Z","excerpt":"","githubsync":"","hidden":false,"link_external":false,"link_url":"","order":0,"project":"55087b0f6065ed17002643ce","slug":"api-references-overview","sync_unique":"","title":"API Reference: Overview","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

API Reference: Overview


Authenticating stamps is the core service of the SnowShoe API. Currently, all calls are made to v2 of our API at: www.snowshoestamp.com/api/v2
Authenticating stamps is the core service of the SnowShoe API. Currently, all calls are made to v2 of our API at: www.snowshoestamp.com/api/v2
{"__v":1,"_id":"5512f24ef5056719008df203","api":{"auth":"required","examples":{"codes":[]},"params":[{"_id":"5512f560a4d48f35004e1ba4","default":"","desc":"Base64 encoded array of two-dimensional arrays","name":"data","required":false,"type":"array_mixed","in":"body"}],"results":{"codes":[{"status":200,"language":"json","code":"{\n  \"stamp\": {\n    \"serial\": \"DEVA\"\n  },\n  \"receipt\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n  \"secure\": false,\n  \"created\": \"2015-03-24 11:27:33.014149\"\n}","name":""},{"status":400,"language":"json","code":"{\n  \"error\": {\n    \"message\": \"Stamp not found\",\n    \"code\": 32\n    },\n    \"receipt\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\",\n    \"secure\": false,\n    \"created\": \"2015-03-24 11:27:48.235046\"\n}","name":""}]},"settings":"","url":"/stamp"},"body":"","category":"5512f24ef5056719008df201","createdAt":"2015-03-25T17:34:37.299Z","editedParams":true,"editedParams2":true,"excerpt":"The stamp endpoint receives an array of point data and returns a JSON stamp object containing its serial, a unique receipt and receipt creation time.","githubsync":"","hidden":false,"link_external":false,"link_url":"","order":1,"project":"55087b0f6065ed17002643ce","slug":"stamp","sync_unique":"","title":"Stamp","type":"post","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

postStamp

The stamp endpoint receives an array of point data and returns a JSON stamp object containing its serial, a unique receipt and receipt creation time.

data:
array of mixed
Base64 encoded array of two-dimensional arrays

Definition

{{ api_url }}{{ page_api_url }}

Result Format



{"__v":25,"_id":"551c8301d65a6d19007a8e37","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"SnowShoe's aspires to engineer physical hardware that can be detected by - and interact with - every touchscreen-powered device in the world. \n\nFulfilling this dream is hard, but we work towards it every day. Every device on the market today uses different combinations of hardware and firmware to power their capacitive touch screens. To be successful in our ambition, SnowShoe must \n\n*1)* Determine a hardware specification that should function correctly on the highly disparate hardware and software that powers all of the various devices on the market.\n\n*2)* Consistently manufacture hardware, at scale, to meet that specification.\n\n*3)* Develop a QA process that allows us to be confident that the hardware we are shipping meet that specification.\n\n*Toward this end...* what devices can you expect SnowShoe Stamps to work on, what devices are each stamp actually tested on before they leave the factory, and for what devices do we actually warrantee stamp functionality?\n\n\n**Field Tested Devices:** While not thoroughly tested as part of our hardware development process, we have either personally tested or heard that our stamps work on the below devices in the wild. We do not guarantee that each and every stamp works 100% of the time on each of these devices, as we have not had an opportunity to comprehensively test these devices under controlled conditions. Some stamps do test well intermittently. \n\nIf you know of any devices not on this list that *do* work, or any devices on this list that *do not* work*, please email [support@snow.sh](mailto:support@snow.sh) at your earliest convenience.\n\n- Apple iPhone 5\n- Apple iPhone 5S\n- Apple iPhone 6\n- Apple iPhone 6S\n- Apple iPhone 6 Plus\n- Apple iPhone 6S Plus\n- Google Nexus 4 / LG Nexus 4\n- Google Nexus 5\n- Google Nexus 6\n- Motorola Nexus 6\n- Samsung Galaxy S4\n- Samsung Galaxy S5\n- Samsung Galaxy S6\n- Samsung Galaxy S6 Edge\n- Samsung Galaxy Note 3\n- Samsung Galaxy Note 4\n- Samsung Galaxy Tab 3\n- Samsung Galaxy Light\n- Samsung Galaxy Tab 3 Lite\n- LG G3\n- LG Pad 7.0 LTE\n- HTC One M8\n\n**Engineering Spec Devices:** These were used as the basis of our v2 hardware development process and represent a large proportion of mobile devices currently in-use today. Our new hardware was engineered for and is guaranteed to work on these devices. *If you find a stamp that does not work on one of the below devices, we will replace it or refund your purchase (our choice):\n\n- Apple iPhone 6\n- Google Nexus 5\n- Samsung Galaxy S5\n- Samsung Galaxy Note 3\n- Samsung Galaxy Light\n- Samsung Galaxy S4\n- LG G3\n- HTC One M8\n\n**SnowShoe QA Devices:** Every stamp that we ship to a customer has been successfully identified on at least two of the following devices:\n\n- Apple iPhone 6\n- Apple iPhone 6S\n- Apple iPhone 6+\n- Apple iPhone 6S+\n\n**Low Performance Devices:** These devices are not currently testing well, though they will improve as we continue to hone our hardware manufacturing process. For iPads in particular, we discovered that our most recent manufacturing design fell out of spec for support of this device. We expect to remedy this in future production runs, and will keep this list up-to-date accordingly.\n- Apple iPhone 4\n- Apple iPhone 4S\n- Apple iPad 1st Gen\n- Apple iPad 2nd Gen\n- Apple iPad 3rd Gen\n- Apple iPad 4th Gen\n- Apple iPad Air\n- Apple iPad Air 2\n- Apple iPad Mini 1st Gen\n- Apple iPad Mini 2nd Gen\n- Apple iPad Mini 3rd Gen\n- Samsung Galaxy Tab 3 Lite\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"*Individually unique stamps are not guaranteed to work on a subset of Android devices because of intricacies of each manufacturer's firmware.* This can often be fixed by [toggling a single default setting](doc:android-troubleshooting-with-htc) that allows the phone to sense more than 3 simultaneous touch events. Once that setting is changed, a small subset of unique stamps can be made to work on these devices. Contact us if you would like to explore your options.\\n\\n- HTC One M8\\n- HTC One M9\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Bent and/or cracked phone screens have also been known to cause issues. While we have seen some success, we can't promise that stamps will work reliably on these devices.\"\n}\n[/block]\nIf you are interested in testing information for a particular device with either type of stamp, please contact us at [support@snow.sh](mailto:support@snow.sh).","category":"5512fbea2df1b63100555e53","createdAt":"2015-04-01T23:45:05.518Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":0,"project":"55087b0f6065ed17002643ce","slug":"testing-devices","sync_unique":"","title":"Testing Devices","type":"basic","updates":["5705771c3e55070e00914fc3"],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Testing Devices


SnowShoe's aspires to engineer physical hardware that can be detected by - and interact with - every touchscreen-powered device in the world. Fulfilling this dream is hard, but we work towards it every day. Every device on the market today uses different combinations of hardware and firmware to power their capacitive touch screens. To be successful in our ambition, SnowShoe must *1)* Determine a hardware specification that should function correctly on the highly disparate hardware and software that powers all of the various devices on the market. *2)* Consistently manufacture hardware, at scale, to meet that specification. *3)* Develop a QA process that allows us to be confident that the hardware we are shipping meet that specification. *Toward this end...* what devices can you expect SnowShoe Stamps to work on, what devices are each stamp actually tested on before they leave the factory, and for what devices do we actually warrantee stamp functionality? **Field Tested Devices:** While not thoroughly tested as part of our hardware development process, we have either personally tested or heard that our stamps work on the below devices in the wild. We do not guarantee that each and every stamp works 100% of the time on each of these devices, as we have not had an opportunity to comprehensively test these devices under controlled conditions. Some stamps do test well intermittently. If you know of any devices not on this list that *do* work, or any devices on this list that *do not* work*, please email [support@snow.sh](mailto:support@snow.sh) at your earliest convenience. - Apple iPhone 5 - Apple iPhone 5S - Apple iPhone 6 - Apple iPhone 6S - Apple iPhone 6 Plus - Apple iPhone 6S Plus - Google Nexus 4 / LG Nexus 4 - Google Nexus 5 - Google Nexus 6 - Motorola Nexus 6 - Samsung Galaxy S4 - Samsung Galaxy S5 - Samsung Galaxy S6 - Samsung Galaxy S6 Edge - Samsung Galaxy Note 3 - Samsung Galaxy Note 4 - Samsung Galaxy Tab 3 - Samsung Galaxy Light - Samsung Galaxy Tab 3 Lite - LG G3 - LG Pad 7.0 LTE - HTC One M8 **Engineering Spec Devices:** These were used as the basis of our v2 hardware development process and represent a large proportion of mobile devices currently in-use today. Our new hardware was engineered for and is guaranteed to work on these devices. *If you find a stamp that does not work on one of the below devices, we will replace it or refund your purchase (our choice): - Apple iPhone 6 - Google Nexus 5 - Samsung Galaxy S5 - Samsung Galaxy Note 3 - Samsung Galaxy Light - Samsung Galaxy S4 - LG G3 - HTC One M8 **SnowShoe QA Devices:** Every stamp that we ship to a customer has been successfully identified on at least two of the following devices: - Apple iPhone 6 - Apple iPhone 6S - Apple iPhone 6+ - Apple iPhone 6S+ **Low Performance Devices:** These devices are not currently testing well, though they will improve as we continue to hone our hardware manufacturing process. For iPads in particular, we discovered that our most recent manufacturing design fell out of spec for support of this device. We expect to remedy this in future production runs, and will keep this list up-to-date accordingly. - Apple iPhone 4 - Apple iPhone 4S - Apple iPad 1st Gen - Apple iPad 2nd Gen - Apple iPad 3rd Gen - Apple iPad 4th Gen - Apple iPad Air - Apple iPad Air 2 - Apple iPad Mini 1st Gen - Apple iPad Mini 2nd Gen - Apple iPad Mini 3rd Gen - Samsung Galaxy Tab 3 Lite [block:callout] { "type": "warning", "body": "*Individually unique stamps are not guaranteed to work on a subset of Android devices because of intricacies of each manufacturer's firmware.* This can often be fixed by [toggling a single default setting](doc:android-troubleshooting-with-htc) that allows the phone to sense more than 3 simultaneous touch events. Once that setting is changed, a small subset of unique stamps can be made to work on these devices. Contact us if you would like to explore your options.\n\n- HTC One M8\n- HTC One M9" } [/block] [block:callout] { "type": "warning", "body": "Bent and/or cracked phone screens have also been known to cause issues. While we have seen some success, we can't promise that stamps will work reliably on these devices." } [/block] If you are interested in testing information for a particular device with either type of stamp, please contact us at [support@snow.sh](mailto:support@snow.sh).
SnowShoe's aspires to engineer physical hardware that can be detected by - and interact with - every touchscreen-powered device in the world. Fulfilling this dream is hard, but we work towards it every day. Every device on the market today uses different combinations of hardware and firmware to power their capacitive touch screens. To be successful in our ambition, SnowShoe must *1)* Determine a hardware specification that should function correctly on the highly disparate hardware and software that powers all of the various devices on the market. *2)* Consistently manufacture hardware, at scale, to meet that specification. *3)* Develop a QA process that allows us to be confident that the hardware we are shipping meet that specification. *Toward this end...* what devices can you expect SnowShoe Stamps to work on, what devices are each stamp actually tested on before they leave the factory, and for what devices do we actually warrantee stamp functionality? **Field Tested Devices:** While not thoroughly tested as part of our hardware development process, we have either personally tested or heard that our stamps work on the below devices in the wild. We do not guarantee that each and every stamp works 100% of the time on each of these devices, as we have not had an opportunity to comprehensively test these devices under controlled conditions. Some stamps do test well intermittently. If you know of any devices not on this list that *do* work, or any devices on this list that *do not* work*, please email [support@snow.sh](mailto:support@snow.sh) at your earliest convenience. - Apple iPhone 5 - Apple iPhone 5S - Apple iPhone 6 - Apple iPhone 6S - Apple iPhone 6 Plus - Apple iPhone 6S Plus - Google Nexus 4 / LG Nexus 4 - Google Nexus 5 - Google Nexus 6 - Motorola Nexus 6 - Samsung Galaxy S4 - Samsung Galaxy S5 - Samsung Galaxy S6 - Samsung Galaxy S6 Edge - Samsung Galaxy Note 3 - Samsung Galaxy Note 4 - Samsung Galaxy Tab 3 - Samsung Galaxy Light - Samsung Galaxy Tab 3 Lite - LG G3 - LG Pad 7.0 LTE - HTC One M8 **Engineering Spec Devices:** These were used as the basis of our v2 hardware development process and represent a large proportion of mobile devices currently in-use today. Our new hardware was engineered for and is guaranteed to work on these devices. *If you find a stamp that does not work on one of the below devices, we will replace it or refund your purchase (our choice): - Apple iPhone 6 - Google Nexus 5 - Samsung Galaxy S5 - Samsung Galaxy Note 3 - Samsung Galaxy Light - Samsung Galaxy S4 - LG G3 - HTC One M8 **SnowShoe QA Devices:** Every stamp that we ship to a customer has been successfully identified on at least two of the following devices: - Apple iPhone 6 - Apple iPhone 6S - Apple iPhone 6+ - Apple iPhone 6S+ **Low Performance Devices:** These devices are not currently testing well, though they will improve as we continue to hone our hardware manufacturing process. For iPads in particular, we discovered that our most recent manufacturing design fell out of spec for support of this device. We expect to remedy this in future production runs, and will keep this list up-to-date accordingly. - Apple iPhone 4 - Apple iPhone 4S - Apple iPad 1st Gen - Apple iPad 2nd Gen - Apple iPad 3rd Gen - Apple iPad 4th Gen - Apple iPad Air - Apple iPad Air 2 - Apple iPad Mini 1st Gen - Apple iPad Mini 2nd Gen - Apple iPad Mini 3rd Gen - Samsung Galaxy Tab 3 Lite [block:callout] { "type": "warning", "body": "*Individually unique stamps are not guaranteed to work on a subset of Android devices because of intricacies of each manufacturer's firmware.* This can often be fixed by [toggling a single default setting](doc:android-troubleshooting-with-htc) that allows the phone to sense more than 3 simultaneous touch events. Once that setting is changed, a small subset of unique stamps can be made to work on these devices. Contact us if you would like to explore your options.\n\n- HTC One M8\n- HTC One M9" } [/block] [block:callout] { "type": "warning", "body": "Bent and/or cracked phone screens have also been known to cause issues. While we have seen some success, we can't promise that stamps will work reliably on these devices." } [/block] If you are interested in testing information for a particular device with either type of stamp, please contact us at [support@snow.sh](mailto:support@snow.sh).
{"__v":13,"_id":"556784d86976ef0d0099c553","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Below is a known list of issues with the platform, planned pathways to resolution, and current status.\n\n**I received the Error Page, what does that mean?**\n\nIt means that your phone didn’t detect all 5 points of the stamp. \n\n***Do you have an iOS device?***\n\nThe stamps should work on all iOS devices. Try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results.\n\nWe are currently working on altering the size of the stamps so they work consistently on iOS devices.\n\n***Do you have an Android device?***\n\nIf you have a newer Android model (excluding HTC One), try stamping again with the same stamp or the other one. If you continue to receive this error try downloading the MultiTouch Tester to see if your phone detects all 5 of your fingers at the same time.\n\nIf your phone detects all 5 fingers, then try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results.\n\nWe are currently working on altering the size of the stamps so they work consistently on Android supported devices.\n\nIf that doesn’t work try downloading Chrome as a web browser. The default browser on Android devices 2.3 and earlier may not support 5 touches.\n\nIf your phone doesn’t detect all 5 fingers, then your phone probably won’t work with the SnowShoe stamp. Please email support at [support@snow.sh](mailto:support@snow.sh) to let us know what device you have.\n\n**The stamp doesn't work when my phone is not being held - i.e. when it's resting on a table.**\n\nStamps use the capacitive properties of your touchscreen, which register touches by sensing a change in the electrostatic field that results when your body, an electric conductor, touches a particular part of the screen. Just as a phone senses your fingers when you tap or gesture, it senses a specific pattern on the bottom of the stamps in the same way. Because your body provides much of the energy for the interaction, it's important that you hold the phone while stamping.\n\nWe have experimented with mounted installations, and can provide you with some specific rigging instructions if this is important to your implementation that will maximize stamp recognition success.\n\n**One or both of the developer stamps work intermittently.**\n\nIf the stamps work, but not consistently, try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results. Make sure your phone isn’t plugged into a power source.\n\nWe are working on modifying the stamp and/or the algorithm to improve the stamp success rate.\n\n**Neither stamp works on my HTC One.**\n\nHTC One’s default settings are initially set to only detect 3 finger gestures, however, the device can detect up to 10 simultaneous gestures. To fix this issue go to **Settings > Displays and Gestures, and uncheck “HTC Gestures ~ Enable 3 finger gestures and ignore gestures with more fingers.”**\n\n**I received the Invalid Stamp screen. What does that mean?**\n\nIt means that the app was expecting to see a different stamp than the one it observed. You can see this page again if you touch SnowShoe’s demo stamp screen with your 5 fingers.\n\nIf you see this page consistently while using SnowShoe’s demo with the developer stamps, please contact support at [support@snow.sh](mailto:support@snow.sh).\n\n**I think my stamp is damaged. What should I do?**\n\nYou’ve tried everything above and you still can’t get your stamps to work?\n\nContact us directly if you are only getting an error page with both stamps. We would like to find out what device you are testing. Contact support at [support@snow.sh](mailto:support@snow.sh) and we'll send you another Dev Kit or stamp ASAP.\n\nIf you find other bugs or need additional information please contact support at [support@snow.sh](mailto:support@snow.sh).","category":"5512fbea2df1b63100555e53","createdAt":"2015-05-28T21:12:56.812Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":1,"project":"55087b0f6065ed17002643ce","slug":"troubleshooting","sync_unique":"","title":"Troubleshooting","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Troubleshooting


Below is a known list of issues with the platform, planned pathways to resolution, and current status. **I received the Error Page, what does that mean?** It means that your phone didn’t detect all 5 points of the stamp. ***Do you have an iOS device?*** The stamps should work on all iOS devices. Try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results. We are currently working on altering the size of the stamps so they work consistently on iOS devices. ***Do you have an Android device?*** If you have a newer Android model (excluding HTC One), try stamping again with the same stamp or the other one. If you continue to receive this error try downloading the MultiTouch Tester to see if your phone detects all 5 of your fingers at the same time. If your phone detects all 5 fingers, then try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results. We are currently working on altering the size of the stamps so they work consistently on Android supported devices. If that doesn’t work try downloading Chrome as a web browser. The default browser on Android devices 2.3 and earlier may not support 5 touches. If your phone doesn’t detect all 5 fingers, then your phone probably won’t work with the SnowShoe stamp. Please email support at [support@snow.sh](mailto:support@snow.sh) to let us know what device you have. **The stamp doesn't work when my phone is not being held - i.e. when it's resting on a table.** Stamps use the capacitive properties of your touchscreen, which register touches by sensing a change in the electrostatic field that results when your body, an electric conductor, touches a particular part of the screen. Just as a phone senses your fingers when you tap or gesture, it senses a specific pattern on the bottom of the stamps in the same way. Because your body provides much of the energy for the interaction, it's important that you hold the phone while stamping. We have experimented with mounted installations, and can provide you with some specific rigging instructions if this is important to your implementation that will maximize stamp recognition success. **One or both of the developer stamps work intermittently.** If the stamps work, but not consistently, try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results. Make sure your phone isn’t plugged into a power source. We are working on modifying the stamp and/or the algorithm to improve the stamp success rate. **Neither stamp works on my HTC One.** HTC One’s default settings are initially set to only detect 3 finger gestures, however, the device can detect up to 10 simultaneous gestures. To fix this issue go to **Settings > Displays and Gestures, and uncheck “HTC Gestures ~ Enable 3 finger gestures and ignore gestures with more fingers.”** **I received the Invalid Stamp screen. What does that mean?** It means that the app was expecting to see a different stamp than the one it observed. You can see this page again if you touch SnowShoe’s demo stamp screen with your 5 fingers. If you see this page consistently while using SnowShoe’s demo with the developer stamps, please contact support at [support@snow.sh](mailto:support@snow.sh). **I think my stamp is damaged. What should I do?** You’ve tried everything above and you still can’t get your stamps to work? Contact us directly if you are only getting an error page with both stamps. We would like to find out what device you are testing. Contact support at [support@snow.sh](mailto:support@snow.sh) and we'll send you another Dev Kit or stamp ASAP. If you find other bugs or need additional information please contact support at [support@snow.sh](mailto:support@snow.sh).
Below is a known list of issues with the platform, planned pathways to resolution, and current status. **I received the Error Page, what does that mean?** It means that your phone didn’t detect all 5 points of the stamp. ***Do you have an iOS device?*** The stamps should work on all iOS devices. Try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results. We are currently working on altering the size of the stamps so they work consistently on iOS devices. ***Do you have an Android device?*** If you have a newer Android model (excluding HTC One), try stamping again with the same stamp or the other one. If you continue to receive this error try downloading the MultiTouch Tester to see if your phone detects all 5 of your fingers at the same time. If your phone detects all 5 fingers, then try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results. We are currently working on altering the size of the stamps so they work consistently on Android supported devices. If that doesn’t work try downloading Chrome as a web browser. The default browser on Android devices 2.3 and earlier may not support 5 touches. If your phone doesn’t detect all 5 fingers, then your phone probably won’t work with the SnowShoe stamp. Please email support at [support@snow.sh](mailto:support@snow.sh) to let us know what device you have. **The stamp doesn't work when my phone is not being held - i.e. when it's resting on a table.** Stamps use the capacitive properties of your touchscreen, which register touches by sensing a change in the electrostatic field that results when your body, an electric conductor, touches a particular part of the screen. Just as a phone senses your fingers when you tap or gesture, it senses a specific pattern on the bottom of the stamps in the same way. Because your body provides much of the energy for the interaction, it's important that you hold the phone while stamping. We have experimented with mounted installations, and can provide you with some specific rigging instructions if this is important to your implementation that will maximize stamp recognition success. **One or both of the developer stamps work intermittently.** If the stamps work, but not consistently, try holding the phone and slightly rotating the stamp once it's touched to the screen to see if you observe better results. Make sure your phone isn’t plugged into a power source. We are working on modifying the stamp and/or the algorithm to improve the stamp success rate. **Neither stamp works on my HTC One.** HTC One’s default settings are initially set to only detect 3 finger gestures, however, the device can detect up to 10 simultaneous gestures. To fix this issue go to **Settings > Displays and Gestures, and uncheck “HTC Gestures ~ Enable 3 finger gestures and ignore gestures with more fingers.”** **I received the Invalid Stamp screen. What does that mean?** It means that the app was expecting to see a different stamp than the one it observed. You can see this page again if you touch SnowShoe’s demo stamp screen with your 5 fingers. If you see this page consistently while using SnowShoe’s demo with the developer stamps, please contact support at [support@snow.sh](mailto:support@snow.sh). **I think my stamp is damaged. What should I do?** You’ve tried everything above and you still can’t get your stamps to work? Contact us directly if you are only getting an error page with both stamps. We would like to find out what device you are testing. Contact support at [support@snow.sh](mailto:support@snow.sh) and we'll send you another Dev Kit or stamp ASAP. If you find other bugs or need additional information please contact support at [support@snow.sh](mailto:support@snow.sh).
{"__v":3,"_id":"55a47ce2e75ca60d00a39354","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"Have you tried using a SnowShoe stamp on an HTC M8, M9, or other HTC device only to see a whole lot of...nothing?  HTC ships their phones with a setting enabled that only allows the device to sense 3 touch events at once.  By simply toggling it off, you'll be able to unlock SnowShoe functionality on these phones.\n\n#Step 1: Open the 'Settings' menu\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/7l8pDb8UTA2Qtu3BVhhv_Screen1.png\",\n        \"Screen1.png\",\n        \"1080\",\n        \"1920\",\n        \"#188094\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n\n#Step 2: Scroll to and open 'Displays and Gestures'\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/NE3lc6mHReWuFiOLjR0f_Screen2.png\",\n        \"Screen2.png\",\n        \"1080\",\n        \"1920\",\n        \"#155880\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n\n#Step 3: Uncheck the 'Media gesture' setting\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/ZkOK9mxS5uNfYfmLsqcw_Screen3.png\",\n        \"Screen3.png\",\n        \"1080\",\n        \"1920\",\n        \"#0e3a54\",\n        \"\"\n      ],\n      \"caption\": \"HTC phones often come shipped with this setting toggled 'on'\"\n    }\n  ]\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/85fxK0QoQcO1blftoxhN_Screen4.png\",\n        \"Screen4.png\",\n        \"1080\",\n        \"1920\",\n        \"#155981\",\n        \"\"\n      ],\n      \"caption\": \"Simply toggle it 'off' to enable SnowShoe stamp functionality\"\n    }\n  ]\n}\n[/block]\n\n#Step 4: Return to the SnowShoe stamp screen and stamp away.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/GfXou9IeSxOx7FESnHVf_stamp.gif\",\n        \"stamp.gif\",\n        \"640\",\n        \"1136\",\n        \"#24ac64\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]","category":"5512fbea2df1b63100555e53","createdAt":"2015-07-14T03:07:14.300Z","excerpt":"","githubsync":"","hidden":false,"link_external":false,"link_url":"","order":2,"project":"55087b0f6065ed17002643ce","slug":"android-troubleshooting-with-htc","sync_unique":"","title":"Android HTC Troubleshooting","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Android HTC Troubleshooting


Have you tried using a SnowShoe stamp on an HTC M8, M9, or other HTC device only to see a whole lot of...nothing? HTC ships their phones with a setting enabled that only allows the device to sense 3 touch events at once. By simply toggling it off, you'll be able to unlock SnowShoe functionality on these phones. #Step 1: Open the 'Settings' menu [block:image] { "images": [ { "image": [ "https://files.readme.io/7l8pDb8UTA2Qtu3BVhhv_Screen1.png", "Screen1.png", "1080", "1920", "#188094", "" ] } ] } [/block] #Step 2: Scroll to and open 'Displays and Gestures' [block:image] { "images": [ { "image": [ "https://files.readme.io/NE3lc6mHReWuFiOLjR0f_Screen2.png", "Screen2.png", "1080", "1920", "#155880", "" ] } ] } [/block] #Step 3: Uncheck the 'Media gesture' setting [block:image] { "images": [ { "image": [ "https://files.readme.io/ZkOK9mxS5uNfYfmLsqcw_Screen3.png", "Screen3.png", "1080", "1920", "#0e3a54", "" ], "caption": "HTC phones often come shipped with this setting toggled 'on'" } ] } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/85fxK0QoQcO1blftoxhN_Screen4.png", "Screen4.png", "1080", "1920", "#155981", "" ], "caption": "Simply toggle it 'off' to enable SnowShoe stamp functionality" } ] } [/block] #Step 4: Return to the SnowShoe stamp screen and stamp away. [block:image] { "images": [ { "image": [ "https://files.readme.io/GfXou9IeSxOx7FESnHVf_stamp.gif", "stamp.gif", "640", "1136", "#24ac64", "" ] } ] } [/block]
Have you tried using a SnowShoe stamp on an HTC M8, M9, or other HTC device only to see a whole lot of...nothing? HTC ships their phones with a setting enabled that only allows the device to sense 3 touch events at once. By simply toggling it off, you'll be able to unlock SnowShoe functionality on these phones. #Step 1: Open the 'Settings' menu [block:image] { "images": [ { "image": [ "https://files.readme.io/7l8pDb8UTA2Qtu3BVhhv_Screen1.png", "Screen1.png", "1080", "1920", "#188094", "" ] } ] } [/block] #Step 2: Scroll to and open 'Displays and Gestures' [block:image] { "images": [ { "image": [ "https://files.readme.io/NE3lc6mHReWuFiOLjR0f_Screen2.png", "Screen2.png", "1080", "1920", "#155880", "" ] } ] } [/block] #Step 3: Uncheck the 'Media gesture' setting [block:image] { "images": [ { "image": [ "https://files.readme.io/ZkOK9mxS5uNfYfmLsqcw_Screen3.png", "Screen3.png", "1080", "1920", "#0e3a54", "" ], "caption": "HTC phones often come shipped with this setting toggled 'on'" } ] } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/85fxK0QoQcO1blftoxhN_Screen4.png", "Screen4.png", "1080", "1920", "#155981", "" ], "caption": "Simply toggle it 'off' to enable SnowShoe stamp functionality" } ] } [/block] #Step 4: Return to the SnowShoe stamp screen and stamp away. [block:image] { "images": [ { "image": [ "https://files.readme.io/GfXou9IeSxOx7FESnHVf_stamp.gif", "stamp.gif", "640", "1136", "#24ac64", "" ] } ] } [/block]
{"__v":8,"_id":"55d4c5659c4e4a0d00ff674c","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"We're big fans of adding high quality vinyl stickers to the tops of our stamps.  Below are directions for making your stamps as cool as you are...\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"1. Design your sticker\"\n}\n[/block]\nOpen the template in Adobe Illustrator, make your edits, and save.  For optimal prints, be sure to change all text to outlines before saving.\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"2. Upload your artwork to a sticker printer\"\n}\n[/block]\ni. SnowShoe loves [Stickermule.com](https://www.stickermule.com/)  - visit their site and choose **'Die Cut' stickers**.\n\nii. Choose a **'Custom Size'** of **W: 1\"** and **H: 1\"**\n\niii. Select your quantity\n\niv. Upload your sticker file\n\nv. When prompted for additional instructions, enter \"Please trim the white portions off the corners.  The final sticker should have rounded corners.  Thanks!\"\n\nvi. Checkout\n\nvii. Wait for your proof.  *Quicker you approve, quicker you get your stickers* :)\n[block:callout]\n{\n  \"type\": \"info\",\n  \"title\": \"Printing Lead Times\",\n  \"body\": \"Keep in mind the lead time you need for your sticker order to arrive so you have time to assemble them.  Sticker Mule provides rush production, but we suggest placing your order 2 weeks before your event to keep shipping costs at a minimum.  This should get you your stamps about 1 week prior to your event.\"\n}\n[/block]\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/e68VrjFfSSiIOaiN2hyN_Screen%20Shot%202015-10-26%20at%205.54.29%20PM.png\",\n        \"Screen Shot 2015-10-26 at 5.54.29 PM.png\",\n        \"1088\",\n        \"1072\",\n        \"#3b9bdb\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n###Sticker Template\n* [Download (ai)](https://s3.amazonaws.com/snowshoestamp.com/downloads/sticker_template.ai)\n\n* * *\n* * *\n[block:api-header]\n{\n  \"type\": \"basic\",\n  \"title\": \"For those with 3D Printed Stamps...\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"title\": \"3D Printed Stamps have been discontinued\",\n  \"body\": \"We stopped selling 3D printed stamps in Fall 2015. If this is your first time looking at these docs, you probably do not need this template. All stamps currently available are injection molded and use different dimensions, as referenced [above](doc:sticker-templates).\"\n}\n[/block]\n- Choose a **'Custom Size'** of **W: 1.49\"** and **H: 1.98\"** \n\n- When prompted for additional instructions, enter \"Please cut out the white center and trim the white portions off the corners.  The final sticker should have a hole in the middle and rounded corners.  Thanks!\"\n[block:image]\n{\n  \"images\": [\n    {\n      \"caption\": \"\",\n      \"image\": [\n        \"https://files.readme.io/ugL0DG9SuGdjjMzA5JRw_Screen%20Shot%202015-08-19%20at%2012.01.13%20PM.png\",\n        \"Screen Shot 2015-08-19 at 12.01.13 PM.png\",\n        \"816\",\n        \"982\",\n        \"#69afde\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\n###Sticker Template (3D Printed Stamps)\n* [Download (ai)](https://s3.amazonaws.com/snowshoestamp.com/downloads/sticker_template_3D.ai)","category":"5512fbea2df1b63100555e53","createdAt":"2015-08-19T18:05:25.334Z","excerpt":"","githubsync":"","hidden":false,"isReference":false,"link_external":false,"link_url":"","order":3,"project":"55087b0f6065ed17002643ce","slug":"sticker-templates","sync_unique":"","title":"Sticker Templates","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Sticker Templates


We're big fans of adding high quality vinyl stickers to the tops of our stamps. Below are directions for making your stamps as cool as you are... [block:api-header] { "type": "basic", "title": "1. Design your sticker" } [/block] Open the template in Adobe Illustrator, make your edits, and save. For optimal prints, be sure to change all text to outlines before saving. [block:api-header] { "type": "basic", "title": "2. Upload your artwork to a sticker printer" } [/block] i. SnowShoe loves [Stickermule.com](https://www.stickermule.com/) - visit their site and choose **'Die Cut' stickers**. ii. Choose a **'Custom Size'** of **W: 1"** and **H: 1"** iii. Select your quantity iv. Upload your sticker file v. When prompted for additional instructions, enter "Please trim the white portions off the corners. The final sticker should have rounded corners. Thanks!" vi. Checkout vii. Wait for your proof. *Quicker you approve, quicker you get your stickers* :) [block:callout] { "type": "info", "title": "Printing Lead Times", "body": "Keep in mind the lead time you need for your sticker order to arrive so you have time to assemble them. Sticker Mule provides rush production, but we suggest placing your order 2 weeks before your event to keep shipping costs at a minimum. This should get you your stamps about 1 week prior to your event." } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/e68VrjFfSSiIOaiN2hyN_Screen%20Shot%202015-10-26%20at%205.54.29%20PM.png", "Screen Shot 2015-10-26 at 5.54.29 PM.png", "1088", "1072", "#3b9bdb", "" ] } ] } [/block] ###Sticker Template * [Download (ai)](https://s3.amazonaws.com/snowshoestamp.com/downloads/sticker_template.ai) * * * * * * [block:api-header] { "type": "basic", "title": "For those with 3D Printed Stamps..." } [/block] [block:callout] { "type": "warning", "title": "3D Printed Stamps have been discontinued", "body": "We stopped selling 3D printed stamps in Fall 2015. If this is your first time looking at these docs, you probably do not need this template. All stamps currently available are injection molded and use different dimensions, as referenced [above](doc:sticker-templates)." } [/block] - Choose a **'Custom Size'** of **W: 1.49"** and **H: 1.98"** - When prompted for additional instructions, enter "Please cut out the white center and trim the white portions off the corners. The final sticker should have a hole in the middle and rounded corners. Thanks!" [block:image] { "images": [ { "caption": "", "image": [ "https://files.readme.io/ugL0DG9SuGdjjMzA5JRw_Screen%20Shot%202015-08-19%20at%2012.01.13%20PM.png", "Screen Shot 2015-08-19 at 12.01.13 PM.png", "816", "982", "#69afde", "" ] } ] } [/block] ###Sticker Template (3D Printed Stamps) * [Download (ai)](https://s3.amazonaws.com/snowshoestamp.com/downloads/sticker_template_3D.ai)
We're big fans of adding high quality vinyl stickers to the tops of our stamps. Below are directions for making your stamps as cool as you are... [block:api-header] { "type": "basic", "title": "1. Design your sticker" } [/block] Open the template in Adobe Illustrator, make your edits, and save. For optimal prints, be sure to change all text to outlines before saving. [block:api-header] { "type": "basic", "title": "2. Upload your artwork to a sticker printer" } [/block] i. SnowShoe loves [Stickermule.com](https://www.stickermule.com/) - visit their site and choose **'Die Cut' stickers**. ii. Choose a **'Custom Size'** of **W: 1"** and **H: 1"** iii. Select your quantity iv. Upload your sticker file v. When prompted for additional instructions, enter "Please trim the white portions off the corners. The final sticker should have rounded corners. Thanks!" vi. Checkout vii. Wait for your proof. *Quicker you approve, quicker you get your stickers* :) [block:callout] { "type": "info", "title": "Printing Lead Times", "body": "Keep in mind the lead time you need for your sticker order to arrive so you have time to assemble them. Sticker Mule provides rush production, but we suggest placing your order 2 weeks before your event to keep shipping costs at a minimum. This should get you your stamps about 1 week prior to your event." } [/block] [block:image] { "images": [ { "image": [ "https://files.readme.io/e68VrjFfSSiIOaiN2hyN_Screen%20Shot%202015-10-26%20at%205.54.29%20PM.png", "Screen Shot 2015-10-26 at 5.54.29 PM.png", "1088", "1072", "#3b9bdb", "" ] } ] } [/block] ###Sticker Template * [Download (ai)](https://s3.amazonaws.com/snowshoestamp.com/downloads/sticker_template.ai) * * * * * * [block:api-header] { "type": "basic", "title": "For those with 3D Printed Stamps..." } [/block] [block:callout] { "type": "warning", "title": "3D Printed Stamps have been discontinued", "body": "We stopped selling 3D printed stamps in Fall 2015. If this is your first time looking at these docs, you probably do not need this template. All stamps currently available are injection molded and use different dimensions, as referenced [above](doc:sticker-templates)." } [/block] - Choose a **'Custom Size'** of **W: 1.49"** and **H: 1.98"** - When prompted for additional instructions, enter "Please cut out the white center and trim the white portions off the corners. The final sticker should have a hole in the middle and rounded corners. Thanks!" [block:image] { "images": [ { "caption": "", "image": [ "https://files.readme.io/ugL0DG9SuGdjjMzA5JRw_Screen%20Shot%202015-08-19%20at%2012.01.13%20PM.png", "Screen Shot 2015-08-19 at 12.01.13 PM.png", "816", "982", "#69afde", "" ] } ] } [/block] ###Sticker Template (3D Printed Stamps) * [Download (ai)](https://s3.amazonaws.com/snowshoestamp.com/downloads/sticker_template_3D.ai)
{"__v":1,"_id":"56d0f1b6b2cb7013004de860","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"We're always around! If you have a specific question or just want to say hi, please reach out to us at [support@snow.sh](mailto:support@snow.sh).","category":"56d0eef5b2cb7013004de85f","createdAt":"2016-02-27T00:45:42.169Z","excerpt":"","githubsync":"","hidden":false,"link_external":false,"link_url":"","order":0,"project":"55087b0f6065ed17002643ce","slug":"contact-email","sync_unique":"","title":"Contact Email","type":"basic","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","childrenPages":[]}

Contact Email


We're always around! If you have a specific question or just want to say hi, please reach out to us at [support@snow.sh](mailto:support@snow.sh).
We're always around! If you have a specific question or just want to say hi, please reach out to us at [support@snow.sh](mailto:support@snow.sh).