{"_id":"56d0f300b2cb7013004de867","excerpt":"Welcome to the home of SnowShoe Documentation\n*Last updated August 19, 2019*","link_url":"","version":"5512f24df5056719008df1ff","createdAt":"2016-02-27T00:51:12.646Z","order":0,"slug":"what-is-snowshoe","title":"What is SnowShoe?","user":"5509cfc1e463aa3d000dd34a","category":"5512f24ef5056719008df200","hidden":false,"link_external":false,"sync_unique":"","type":"basic","updates":[],"__v":7,"api":{"results":{"codes":[]},"settings":"","url":"","auth":"required","params":[]},"body":"**Point Of Presence Mobile Authentication**\nSnowShoe is uniquely focused on mobile authentication utilizing capacitive touch stamps. We are revolutionizing the way mobile tickets, vouchers, and loyalty points are validated at the point of presence – where digital meets the real world. Secure, battery-free, and easy to integrate.\n\n**Native Apps and Mobile Web**\nStamps work in native iOS and Android applications in addition to mobile websites.\n\n**Every Stamp is Unique**\nStamps are uniquely identifiable, making tracking users, redemptions and engagement easier than ever.\n\n**No Batteries**\nNo batteries, wires or antennas. SnowShoe stamps are built to last without costly overhead.\n\n**Online or Offline**\nStamps can work offline within a native application when wireless service is unavailable.\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 information to you. At that point, you make the magic happen!\n\nYour body is an electrical conductor and provides most 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]\nSnowShoe software is easy to integrate. We love easy-to-implement, well documented APIs. 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, questions, or suggestions to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).","githubsync":"","project":"55087b0f6065ed17002643ce","isReference":false,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

What is SnowShoe?

Welcome to the home of SnowShoe Documentation *Last updated August 19, 2019*

**Point Of Presence Mobile Authentication** SnowShoe is uniquely focused on mobile authentication utilizing capacitive touch stamps. We are revolutionizing the way mobile tickets, vouchers, and loyalty points are validated at the point of presence – where digital meets the real world. Secure, battery-free, and easy to integrate. **Native Apps and Mobile Web** Stamps work in native iOS and Android applications in addition to mobile websites. **Every Stamp is Unique** Stamps are uniquely identifiable, making tracking users, redemptions and engagement easier than ever. **No Batteries** No batteries, wires or antennas. SnowShoe stamps are built to last without costly overhead. **Online or Offline** Stamps can work offline within a native application when wireless service is unavailable. **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 information to you. At that point, you make the magic happen! Your body is an electrical conductor and provides most 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] SnowShoe software is easy to integrate. We love easy-to-implement, well documented APIs. 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, questions, or suggestions to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
**Point Of Presence Mobile Authentication** SnowShoe is uniquely focused on mobile authentication utilizing capacitive touch stamps. We are revolutionizing the way mobile tickets, vouchers, and loyalty points are validated at the point of presence – where digital meets the real world. Secure, battery-free, and easy to integrate. **Native Apps and Mobile Web** Stamps work in native iOS and Android applications in addition to mobile websites. **Every Stamp is Unique** Stamps are uniquely identifiable, making tracking users, redemptions and engagement easier than ever. **No Batteries** No batteries, wires or antennas. SnowShoe stamps are built to last without costly overhead. **Online or Offline** Stamps can work offline within a native application when wireless service is unavailable. **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 information to you. At that point, you make the magic happen! Your body is an electrical conductor and provides most 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] SnowShoe software is easy to integrate. We love easy-to-implement, well documented APIs. 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, questions, or suggestions to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
{"_id":"56d0f1f07c2e100b000afa2e","__v":4,"githubsync":"","order":2,"project":"55087b0f6065ed17002643ce","slug":"whats-new","user":"5509cfc1e463aa3d000dd34a","createdAt":"2016-02-27T00:46:40.911Z","link_external":false,"link_url":"","updates":[],"api":{"url":"","auth":"required","params":[],"results":{"codes":[{"language":"json","code":"{}","name":"","status":200},{"status":400,"language":"json","code":"{}","name":""}]},"settings":""},"category":"5512f24ef5056719008df200","excerpt":"","hidden":false,"body":"[block:callout]\n{\n  \"type\": \"success\",\n  \"title\": \"Updated SnowShoe jQuery Library\",\n  \"body\": \"Our jQuery library has been updated to v0.3.3. You can find more information on the [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]","sync_unique":"","title":"What's New","type":"basic","version":"5512f24df5056719008df1ff","isReference":false,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

What's New


[block:callout] { "type": "success", "title": "Updated SnowShoe jQuery Library", "body": "Our jQuery library has been updated to v0.3.3. You can find more information on the [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.3. You can find more information on the [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]
{"_id":"55133d37f382620d0082e0bb","createdAt":"2015-03-25T22:56:55.352Z","link_external":false,"link_url":"","project":"55087b0f6065ed17002643ce","updates":[],"version":"5512f24df5056719008df1ff","type":"basic","__v":33,"api":{"auth":"required","params":[],"results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"name":"","status":400,"language":"json","code":"{}"}]},"settings":"","url":""},"category":"5512f24ef5056719008df200","excerpt":"Here is a list of the SnowShoe maintained libraries. These make pages in your application stampable. Are you planning to use the SnowShoe-hosted stamp screen? Check out our how-to [here](doc:hello-world).\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":"","slug":"maintained-libraries","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.3: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.js\\n-- v0.3.3 minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.min.js\"\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\n**Python**\n  - [Python SDK](https://downloads.snowshoestamp.com/sdk/python.zip)\n  - [Python SDK Quickstart Guide](https://medium.com/p/f623bb162f4e)\n\n**PHP**\n  - [PHP SDK](https://downloads.snowshoestamp.com/sdk/php.zip)\n  - [PHP SDK Quickstart Guide](https://medium.com/p/1a5b2db67f21)\n\n**Native**\n  - Online authentication\n    - [iOS Swift SDK](https://github.com/snowshoestamp/snowshoe-swift)\n    - [Android SDK](https://github.com/snowshoestamp/snowshoe-android-v2)\n\n  - Offline authentication\n    - [iOS Swift SDK](https://s3.amazonaws.com/downloads.snowshoestamp.com/sdk/stampSDK_iOS-v1.2.zip)\n    - [Android SDK](https://downloads.snowshoestamp.com/sdk/stampSDK_Android-v1.0.zip)\n\nAlso, check out these libraries that may help in your SnowShoe development thanks to our fantastic community of developers like you.\n\n**Java**\n  - [Java SDK](https://downloads.snowshoestamp.com/sdk/java.zip)","isReference":false,"order":3,"sync_unique":"","user":"5509cfc1e463aa3d000dd34a","hidden":false,"title":"Libraries","next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Libraries

Here is a list of the SnowShoe maintained libraries. These make pages in your application stampable. Are you planning to use the SnowShoe-hosted stamp screen? Check out our how-to [here](doc:hello-world). **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.3: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.js\n-- v0.3.3 minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.min.js" } [/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) **Python** - [Python SDK](https://downloads.snowshoestamp.com/sdk/python.zip) - [Python SDK Quickstart Guide](https://medium.com/p/f623bb162f4e) **PHP** - [PHP SDK](https://downloads.snowshoestamp.com/sdk/php.zip) - [PHP SDK Quickstart Guide](https://medium.com/p/1a5b2db67f21) **Native** - Online authentication - [iOS Swift SDK](https://github.com/snowshoestamp/snowshoe-swift) - [Android SDK](https://github.com/snowshoestamp/snowshoe-android-v2) - Offline authentication - [iOS Swift SDK](https://s3.amazonaws.com/downloads.snowshoestamp.com/sdk/stampSDK_iOS-v1.2.zip) - [Android SDK](https://downloads.snowshoestamp.com/sdk/stampSDK_Android-v1.0.zip) Also, check out these libraries that may help in your SnowShoe development thanks to our fantastic community of developers like you. **Java** - [Java SDK](https://downloads.snowshoestamp.com/sdk/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.3: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.js\n-- v0.3.3 minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.min.js" } [/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) **Python** - [Python SDK](https://downloads.snowshoestamp.com/sdk/python.zip) - [Python SDK Quickstart Guide](https://medium.com/p/f623bb162f4e) **PHP** - [PHP SDK](https://downloads.snowshoestamp.com/sdk/php.zip) - [PHP SDK Quickstart Guide](https://medium.com/p/1a5b2db67f21) **Native** - Online authentication - [iOS Swift SDK](https://github.com/snowshoestamp/snowshoe-swift) - [Android SDK](https://github.com/snowshoestamp/snowshoe-android-v2) - Offline authentication - [iOS Swift SDK](https://s3.amazonaws.com/downloads.snowshoestamp.com/sdk/stampSDK_iOS-v1.2.zip) - [Android SDK](https://downloads.snowshoestamp.com/sdk/stampSDK_Android-v1.0.zip) Also, check out these libraries that may help in your SnowShoe development thanks to our fantastic community of developers like you. **Java** - [Java SDK](https://downloads.snowshoestamp.com/sdk/java.zip)
{"_id":"5512fc2d4d7e7417002a3af7","link_external":false,"title":"Getting Started: Overview","body":"This section will get you up and running quickly with a fully functional SnowShoe project. 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:\n1. Gather the stamp data from a mobile device after a user \"stamps\" the screen and submit it to your backend server\n2. Have your backend server send the data to the SnowShoe API for authentication as an OAuth wrapped ``POST`` request.\n3. 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","link_url":"","version":"5512f24df5056719008df1ff","excerpt":"","hidden":false,"isReference":false,"project":"55087b0f6065ed17002643ce","slug":"developer-guides-overview","user":"5509cfc1e463aa3d000dd34a","api":{"settings":"","url":"","auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]}},"createdAt":"2015-03-25T18:19:25.166Z","githubsync":"","order":0,"sync_unique":"","type":"basic","updates":[],"__v":26,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Getting Started: Overview


This section will get you up and running quickly with a fully functional SnowShoe project. 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: 1. Gather the stamp data from a mobile device after a user "stamps" the screen and submit it to your backend server 2. Have your backend server send the data to the SnowShoe API for authentication as an OAuth wrapped ``POST`` request. 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. 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: 1. Gather the stamp data from a mobile device after a user "stamps" the screen and submit it to your backend server 2. Have your backend server send the data to the SnowShoe API for authentication as an OAuth wrapped ``POST`` request. 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]
{"_id":"5519a6022f1af40d00cff62f","createdAt":"2015-03-30T19:37:38.627Z","link_external":false,"order":2,"slug":"creating-a-snowshoe-application","version":"5512f24df5056719008df1ff","category":"56d0f236b2cb7013004de864","githubsync":"","project":"55087b0f6065ed17002643ce","title":"Creating A SnowShoe Application","__v":7,"excerpt":"","sync_unique":"","type":"basic","user":"5509cfc1e463aa3d000dd34a","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"language":"json","code":"{}","name":"","status":400}]},"settings":"","url":""},"body":"Before we begin, head over to [snowshoestamp.com](https://beta.snowshoestamp.com/accounts/login/) to login or [create an account](https://beta.snowshoestamp.com/accounts/register/).\n\nOnce logged in you should see your applications. The Developer Portal 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/df82b2d-Apps_Screen.jpeg\",\n        \"Apps Screen.jpeg\",\n        1326,\n        390,\n        \"#357aa5\"\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 the next screen to create your new app:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/c978aa1-Create_App.jpeg\",\n        \"Create App.jpeg\",\n        1325,\n        463,\n        \"#ecf3f3\"\n      ]\n    }\n  ]\n}\n[/block]\nEnter a name for your application in the \"Name Your App\" field. Make sure the \"Stamps 2.0\" button is selected and then click the \"OK!\" button.\n\nOn a successful save, the \"App Details\" page comes up that displays your new application’s name, Application Key, and Application Secret. \n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/c2cb9ea-App_Page.jpeg\",\n        \"App Page.jpeg\",\n        1324,\n        735,\n        \"#ece6d7\"\n      ]\n    }\n  ]\n}\n[/block]\nWith your newly created application key and secret you're ready to head to [Part 1: Stamp Screen](doc:part-1-stamp-screen).","hidden":false,"link_url":"","updates":[],"isReference":false,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Creating A SnowShoe Application


Before we begin, head over to [snowshoestamp.com](https://beta.snowshoestamp.com/accounts/login/) to login or [create an account](https://beta.snowshoestamp.com/accounts/register/). Once logged in you should see your applications. The Developer Portal 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/df82b2d-Apps_Screen.jpeg", "Apps Screen.jpeg", 1326, 390, "#357aa5" ] } ] } [/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 the next screen to create your new app: [block:image] { "images": [ { "image": [ "https://files.readme.io/c978aa1-Create_App.jpeg", "Create App.jpeg", 1325, 463, "#ecf3f3" ] } ] } [/block] Enter a name for your application in the "Name Your App" field. Make sure the "Stamps 2.0" button is selected and then click the "OK!" button. On a successful save, the "App Details" page comes up that displays your new application’s name, Application Key, and Application Secret. [block:image] { "images": [ { "image": [ "https://files.readme.io/c2cb9ea-App_Page.jpeg", "App Page.jpeg", 1324, 735, "#ece6d7" ] } ] } [/block] With your newly created application key and secret you're ready to head to [Part 1: Stamp Screen](doc:part-1-stamp-screen).
Before we begin, head over to [snowshoestamp.com](https://beta.snowshoestamp.com/accounts/login/) to login or [create an account](https://beta.snowshoestamp.com/accounts/register/). Once logged in you should see your applications. The Developer Portal 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/df82b2d-Apps_Screen.jpeg", "Apps Screen.jpeg", 1326, 390, "#357aa5" ] } ] } [/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 the next screen to create your new app: [block:image] { "images": [ { "image": [ "https://files.readme.io/c978aa1-Create_App.jpeg", "Create App.jpeg", 1325, 463, "#ecf3f3" ] } ] } [/block] Enter a name for your application in the "Name Your App" field. Make sure the "Stamps 2.0" button is selected and then click the "OK!" button. On a successful save, the "App Details" page comes up that displays your new application’s name, Application Key, and Application Secret. [block:image] { "images": [ { "image": [ "https://files.readme.io/c2cb9ea-App_Page.jpeg", "App Page.jpeg", 1324, 735, "#ece6d7" ] } ] } [/block] With your newly created application key and secret you're ready to head to [Part 1: Stamp Screen](doc:part-1-stamp-screen).
{"_id":"5512fc6aa4d48f35004e1bb6","__v":43,"createdAt":"2015-03-25T18:20:26.341Z","excerpt":"Making HTML elements \"stampable\"","link_external":false,"order":3,"link_url":"","updates":[],"version":"5512f24df5056719008df1ff","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"","auth":"required","params":[]},"body":"There are two different types of stamp screens: *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 the following:\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 would like to make an existing page of your web or native application \"stampable,\" you just need to implement our [**jQuery plugin**](https://github.com/snowshoestamp/snowshoe_jquery/). Your workflow will look like the following:\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]\n1) SnowShoe's jQuery project can be found [here on GitHub](https://github.com/snowshoestamp/snowshoe_jquery/) or you can use our CDN.\n[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"SnowShoe jQuery Module:\\n-- https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.js\\n-- minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.min.js\",\n  \"title\": \"SnowShoe CDN\"\n}\n[/block]\n\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).","hidden":false,"isReference":false,"slug":"part-1-stamp-screen","sync_unique":"","type":"basic","category":"56d0f236b2cb7013004de864","githubsync":"","project":"55087b0f6065ed17002643ce","title":"Part 1: Stamp Screen","user":"5509cfc1e463aa3d000dd34a","next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Part 1: Stamp Screen

Making HTML elements "stampable"

There are two different types of stamp screens: *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 the following: [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 would like to make an existing page of your web or native application "stampable," you just need to implement our [**jQuery plugin**](https://github.com/snowshoestamp/snowshoe_jquery/). Your workflow will look like the following: [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] 1) SnowShoe's jQuery project can be found [here on GitHub](https://github.com/snowshoestamp/snowshoe_jquery/) or you can use our CDN. [block:callout] { "type": "info", "body": "SnowShoe jQuery Module:\n-- https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.js\n-- minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.min.js", "title": "SnowShoe CDN" } [/block] [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 two different types of stamp screens: *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 the following: [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 would like to make an existing page of your web or native application "stampable," you just need to implement our [**jQuery plugin**](https://github.com/snowshoestamp/snowshoe_jquery/). Your workflow will look like the following: [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] 1) SnowShoe's jQuery project can be found [here on GitHub](https://github.com/snowshoestamp/snowshoe_jquery/) or you can use our CDN. [block:callout] { "type": "info", "body": "SnowShoe jQuery Module:\n-- https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.js\n-- minified: https://cdn.snowshoestamp.com/snowshoe-jquery/0.3.3/jquery.snowshoe.min.js", "title": "SnowShoe CDN" } [/block] [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).
{"_id":"5512fca22df1b63100555e57","excerpt":"","slug":"part-2-api-client","type":"basic","createdAt":"2015-03-25T18:21:22.039Z","githubsync":"","project":"55087b0f6065ed17002643ce","sync_unique":"","version":"5512f24df5056719008df1ff","api":{"params":[],"results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"","auth":"required"},"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 SDKs\",\n  \"body\": \"Please see the [Maintained Libraries](doc:maintained-libraries) for download links and Quickstart guides for these SDKs.\"\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[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## 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 [https://beta.snowshoestamp.com/api/v2/stamp](https://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]\nHandling success and errors is covered in depth in [Part 3: Handling API Responses](doc:part-3-handling-api-responses).","category":"56d0f236b2cb7013004de864","order":4,"link_external":false,"link_url":"","title":"Part 2: API Client","updates":[],"__v":29,"hidden":false,"isReference":false,"user":"5509cfc1e463aa3d000dd34a","next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"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 SDKs", "body": "Please see the [Maintained Libraries](doc:maintained-libraries) for download links and Quickstart guides for these SDKs." } [/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 [https://beta.snowshoestamp.com/api/v2/stamp](https://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] Handling 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 SDKs", "body": "Please see the [Maintained Libraries](doc:maintained-libraries) for download links and Quickstart guides for these SDKs." } [/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 [https://beta.snowshoestamp.com/api/v2/stamp](https://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] Handling success and errors is covered in depth in [Part 3: Handling API Responses](doc:part-3-handling-api-responses).
{"_id":"551336f5b5e3e33900767bfa","order":5,"sync_unique":"","version":"5512f24df5056719008df1ff","createdAt":"2015-03-25T22:30:13.811Z","isReference":false,"project":"55087b0f6065ed17002643ce","body":"How you handle SnowShoe API responses is the second half of the experience you're providing for 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\nThe 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 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]\nIt's pretty straightforward. We just send back to our client the URL of our 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 and they need to try stamping again.\n\nBuilding on that, we can say that our SnowShoe application 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","githubsync":"","hidden":false,"link_url":"","title":"Part 3: Handling API Responses","updates":[],"__v":19,"api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"user":"5509cfc1e463aa3d000dd34a","slug":"part-3-handling-api-responses","type":"basic","excerpt":"","link_external":false,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Part 3: Handling API Responses


How you handle SnowShoe API responses is the second half of the experience you're providing for 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). 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 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] It's pretty straightforward. We just send back to our client the URL of our 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 and they need to try stamping again. Building on that, we can say that our SnowShoe application 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 experience you're providing for 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). 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 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] It's pretty straightforward. We just send back to our client the URL of our 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 and they need to try stamping again. Building on that, we can say that our SnowShoe application 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]
{"_id":"5519948a45b0d80d00152367","link_external":false,"sync_unique":"","title":"Example JSON Responses","type":"basic","body":"After you submit a stamp observation to our authentication service our API will return 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 our older 3D printed stamps, we no longer have stamp serial names that are commissioned as: \\\"DEV-STAMP\\\" and \\\"DEV-STAMP-B\\\". The default developer stamps commissioned to all new applications are named \\\"DEVA\\\" and \\\"DEVB\\\". You can always rename any stamp directly from your application'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":"","link_url":"","project":"55087b0f6065ed17002643ce","slug":"example-json-responses","api":{"settings":"","url":"","auth":"required","params":[],"results":{"codes":[{"code":"{}","name":"","status":200,"language":"json"},{"name":"","status":400,"language":"json","code":"{}"}]}},"githubsync":"","hidden":false,"isReference":false,"order":6,"updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","__v":15,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Example JSON Responses


After you submit a stamp observation to our authentication service our API will return 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 our older 3D printed stamps, we no longer have stamp serial names that are commissioned as: \"DEV-STAMP\" and \"DEV-STAMP-B\". The default developer stamps commissioned to all new applications are named \"DEVA\" and \"DEVB\". You can always rename any stamp directly from your application'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 will return 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 our older 3D printed stamps, we no longer have stamp serial names that are commissioned as: \"DEV-STAMP\" and \"DEV-STAMP-B\". The default developer stamps commissioned to all new applications are named \"DEVA\" and \"DEVB\". You can always rename any stamp directly from your application'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" ```
{"_id":"551463e00a0c69170061680b","createdAt":"2015-03-26T19:54:08.002Z","excerpt":"","githubsync":"","link_external":false,"link_url":"","slug":"articles-overview","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).","order":0,"project":"55087b0f6065ed17002643ce","sync_unique":"","category":"551462da0a0c691700616802","isReference":false,"version":"5512f24df5056719008df1ff","updates":[],"user":"5509cfc1e463aa3d000dd34a","hidden":false,"title":"Articles: Overview","type":"basic","__v":13,"api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"code":"{}","name":"","status":400,"language":"json"}]},"settings":"","url":""},"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"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).
{"_id":"559c5af74ac6411700d85703","createdAt":"2015-07-07T23:04:23.198Z","slug":"hello-world","user":"5509cfc1e463aa3d000dd34a","githubsync":"","link_url":"","project":"55087b0f6065ed17002643ce","api":{"params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"","auth":"required"},"body":"You’ve watched the videos, read about use cases, and played with the [demos](https://beta.snowshoestamp.com/demo/).\n\nNow you are ready to *build* a [SnowShoe application of your own](http://beta.snowshoestamp.com/applications/wizard/app-name/).\n\n**But what do you do first?** This guide will take you, step by step, through building a Hello World web application on the Snowshoe platform. When we’re done, you will understand exactly how the SnowShoe system works and how to integrate it into your own projects.\n\n#“Hello World”\nLet's 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\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 login to 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.\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/185afc0-Apps_Screen.jpeg\",\n        \"Apps Screen.jpeg\",\n        1326,\n        390,\n        \"#357aa5\"\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 applications. If you followed our [First App Wizard](https://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/83ea18b-Create_App.jpeg\",\n        \"Create App.jpeg\",\n        1325,\n        463,\n        \"#ecf3f3\"\n      ],\n      \"caption\": \"Enter a name in the \\\"Name Your App\\\" field. Most people will use \\\"Stamps 2.0\\\" so make sure that is selected and then click the \\\"OK!\\\" button.\"\n    }\n  ]\n}\n[/block]\nAll we need right now is a name. Enter the name of your choice and click “OK!” to continue.\n\n#Step 2: Getting Comfortable with the Stamp Screen\nThe App Details page shows your new application’s Name, Application Key, Application Secret, and three URLs (Stamp Screen, Debug Callback, and Serial Number Identifier) in the left column:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/f2d64b8-App_Page.jpeg\",\n        \"App Page.jpeg\",\n        1324,\n        735,\n        \"#ece6d7\"\n      ]\n    }\n  ]\n}\n[/block]\nThe first thing we are going to look at is the Stamp Screen link. 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/1aa8b16-screenshot1.png\",\n        \"screenshot1.png\",\n        1280,\n        2640,\n        \"#24ab64\"\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 stamp page.\n\n#Step 3: The Callback URL\nIf you stamp your screen with one of your stamps you will just see a JSON output printed on the screen. That's 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/c01cba4-screenshot2.png\",\n        \"screenshot2.png\",\n        1280,\n        2640,\n        \"#dddddd\"\n      ]\n    }\n  ]\n}\n[/block]\nYou can still stamp your application’s stamp screen without specifying a callback URL. Your stamp screen simply POSTs the 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 or native application.**  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 application 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 or native application.**  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 [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 application 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[block:callout]\n{\n  \"type\": \"info\",\n  \"body\": \"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  \"title\": \"Important\"\n}\n[/block]\n\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#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”: “2019-08-20 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 (DEVA or DEVB), when you move to production stamps, each stamp will have its own special serial number specific to your app.\n\n#Step 6: Making the Magic Happen\nWe 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 is simply a “Hello World” message. But the possibilities are limitless.\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 additional questions or would like to order a demo kit? Don't hesitate to email us at [support@snowshoestamp.com](mailto:support@snowshoestamp.com).","excerpt":"A step-by-step guide to building your first SnowShoe app in under 10 minutes.","link_external":false,"updates":[],"version":"5512f24df5056719008df1ff","hidden":false,"isReference":false,"order":1,"sync_unique":"","title":"Hello, World","__v":47,"category":"551462da0a0c691700616802","type":"basic","next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Hello, World

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

You’ve watched the videos, read about use cases, and played with the [demos](https://beta.snowshoestamp.com/demo/). Now you are ready to *build* a [SnowShoe application of your own](http://beta.snowshoestamp.com/applications/wizard/app-name/). **But what do you do first?** This guide will take you, step by step, through building a Hello World web application on the Snowshoe platform. When we’re done, you will understand exactly how the SnowShoe system works and how to integrate it into your own projects. #“Hello World” Let's 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”. #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 login to 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. Once logged in, you should see something that looks like this: [block:image] { "images": [ { "image": [ "https://files.readme.io/185afc0-Apps_Screen.jpeg", "Apps Screen.jpeg", 1326, 390, "#357aa5" ], "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 applications. If you followed our [First App Wizard](https://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/83ea18b-Create_App.jpeg", "Create App.jpeg", 1325, 463, "#ecf3f3" ], "caption": "Enter a name in the \"Name Your App\" field. Most people will use \"Stamps 2.0\" so make sure that is selected and then click the \"OK!\" button." } ] } [/block] All we need right now is a name. Enter the name of your choice and click “OK!” to continue. #Step 2: Getting Comfortable with the Stamp Screen The App Details page shows your new application’s Name, Application Key, Application Secret, and three URLs (Stamp Screen, Debug Callback, and Serial Number Identifier) in the left column: [block:image] { "images": [ { "image": [ "https://files.readme.io/f2d64b8-App_Page.jpeg", "App Page.jpeg", 1324, 735, "#ece6d7" ] } ] } [/block] The first thing we are going to look at is the Stamp Screen link. 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/1aa8b16-screenshot1.png", "screenshot1.png", 1280, 2640, "#24ab64" ], "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 stamp page. #Step 3: The Callback URL If you stamp your screen with one of your stamps you will just see a JSON output printed on the screen. That's 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/c01cba4-screenshot2.png", "screenshot2.png", 1280, 2640, "#dddddd" ] } ] } [/block] You can still stamp your application’s stamp screen without specifying a callback URL. Your stamp screen simply POSTs the 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 or native application.** 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 application 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 or native application.** 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 [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 application 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. [block:callout] { "type": "info", "body": "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.", "title": "Important" } [/block] [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”: “2019-08-20 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 (DEVA or DEVB), 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 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 is simply 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 additional questions or would like to order a demo kit? Don't hesitate to email us at [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
You’ve watched the videos, read about use cases, and played with the [demos](https://beta.snowshoestamp.com/demo/). Now you are ready to *build* a [SnowShoe application of your own](http://beta.snowshoestamp.com/applications/wizard/app-name/). **But what do you do first?** This guide will take you, step by step, through building a Hello World web application on the Snowshoe platform. When we’re done, you will understand exactly how the SnowShoe system works and how to integrate it into your own projects. #“Hello World” Let's 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”. #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 login to 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. Once logged in, you should see something that looks like this: [block:image] { "images": [ { "image": [ "https://files.readme.io/185afc0-Apps_Screen.jpeg", "Apps Screen.jpeg", 1326, 390, "#357aa5" ], "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 applications. If you followed our [First App Wizard](https://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/83ea18b-Create_App.jpeg", "Create App.jpeg", 1325, 463, "#ecf3f3" ], "caption": "Enter a name in the \"Name Your App\" field. Most people will use \"Stamps 2.0\" so make sure that is selected and then click the \"OK!\" button." } ] } [/block] All we need right now is a name. Enter the name of your choice and click “OK!” to continue. #Step 2: Getting Comfortable with the Stamp Screen The App Details page shows your new application’s Name, Application Key, Application Secret, and three URLs (Stamp Screen, Debug Callback, and Serial Number Identifier) in the left column: [block:image] { "images": [ { "image": [ "https://files.readme.io/f2d64b8-App_Page.jpeg", "App Page.jpeg", 1324, 735, "#ece6d7" ] } ] } [/block] The first thing we are going to look at is the Stamp Screen link. 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/1aa8b16-screenshot1.png", "screenshot1.png", 1280, 2640, "#24ab64" ], "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 stamp page. #Step 3: The Callback URL If you stamp your screen with one of your stamps you will just see a JSON output printed on the screen. That's 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/c01cba4-screenshot2.png", "screenshot2.png", 1280, 2640, "#dddddd" ] } ] } [/block] You can still stamp your application’s stamp screen without specifying a callback URL. Your stamp screen simply POSTs the 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 or native application.** 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 application 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 or native application.** 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 [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 application 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. [block:callout] { "type": "info", "body": "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.", "title": "Important" } [/block] [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”: “2019-08-20 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 (DEVA or DEVB), 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 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 is simply 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 additional questions or would like to order a demo kit? Don't hesitate to email us at [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
{"_id":"5568e303952dca0d0019c85a","project":"55087b0f6065ed17002643ce","sync_unique":"","type":"basic","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 optimal 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 assigned to your 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:embed]\n{\n  \"html\": \"<iframe class=\\\"embedly-embed\\\" src=\\\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fi1BbJGfQJHw%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Di1BbJGfQJHw&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fi1BbJGfQJHw%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\\\" width=\\\"640\\\" height=\\\"480\\\" scrolling=\\\"no\\\" frameborder=\\\"0\\\" allow=\\\"autoplay; fullscreen\\\" allowfullscreen=\\\"true\\\"></iframe>\",\n  \"url\": \"https://www.youtube.com/watch?v=i1BbJGfQJHw&feature=youtu.be\",\n  \"title\": \"SnowShoe No Code Demo App\",\n  \"favicon\": \"https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico\",\n  \"image\": \"https://i.ytimg.com/vi/i1BbJGfQJHw/hqdefault.jpg\"\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 application, 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. This is a simple and easy way to build a quick demo.\"\n}\n[/block]","hidden":false,"isReference":false,"link_external":false,"link_url":"","__v":3,"createdAt":"2015-05-29T22:06:59.851Z","excerpt":"Using the SnowShoe Experience Builder","githubsync":"","title":"Create a Demo Application Without Coding","user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"name":"","status":400,"language":"json","code":"{}"}]},"settings":"","url":"","auth":"required","params":[]},"category":"551462da0a0c691700616802","order":2,"slug":"create-a-demo-application-without-coding","updates":[],"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"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 optimal 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 assigned to your 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:embed] { "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fi1BbJGfQJHw%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Di1BbJGfQJHw&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fi1BbJGfQJHw%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\" width=\"640\" height=\"480\" scrolling=\"no\" frameborder=\"0\" allow=\"autoplay; fullscreen\" allowfullscreen=\"true\"></iframe>", "url": "https://www.youtube.com/watch?v=i1BbJGfQJHw&feature=youtu.be", "title": "SnowShoe No Code Demo App", "favicon": "https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico", "image": "https://i.ytimg.com/vi/i1BbJGfQJHw/hqdefault.jpg" } [/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 application, 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. This is a simple and easy way to build a quick demo." } [/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 optimal 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 assigned to your 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:embed] { "html": "<iframe class=\"embedly-embed\" src=\"//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fi1BbJGfQJHw%3Ffeature%3Doembed&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Di1BbJGfQJHw&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fi1BbJGfQJHw%2Fhqdefault.jpg&key=f2aa6fc3595946d0afc3d76cbbd25dc3&type=text%2Fhtml&schema=youtube\" width=\"640\" height=\"480\" scrolling=\"no\" frameborder=\"0\" allow=\"autoplay; fullscreen\" allowfullscreen=\"true\"></iframe>", "url": "https://www.youtube.com/watch?v=i1BbJGfQJHw&feature=youtu.be", "title": "SnowShoe No Code Demo App", "favicon": "https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico", "image": "https://i.ytimg.com/vi/i1BbJGfQJHw/hqdefault.jpg" } [/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 application, 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. This is a simple and easy way to build a quick demo." } [/block]
{"_id":"5543cea912245b1900ba091c","user":"5509cfc1e463aa3d000dd34a","__v":64,"githubsync":"","isReference":false,"slug":"snowshoe-jquery-extras","type":"basic","sync_unique":"","project":"55087b0f6065ed17002643ce","updates":[],"version":"5512f24df5056719008df1ff","api":{"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":"","auth":"required","params":[]},"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 recognized 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\": \"Progress Bar Animations\"\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]\n2\\. Create 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]\n3\\. 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`.\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 five simultaneous touch events occur (i.e. a user touches a stamp to a screen).\n\n4\\. Clear 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 latest stamp 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.","createdAt":"2015-05-01T19:06:17.753Z","link_url":"","order":3,"title":"Best Practices","category":"551462da0a0c691700616802","excerpt":"Using the full functionality built into our SnowShoe jQuery frontend library","hidden":false,"link_external":false,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"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 recognized 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": "Progress Bar Animations" } [/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 five 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 latest stamp 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 recognized 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": "Progress Bar Animations" } [/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 five 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 latest stamp 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.
{"_id":"5513019af5056719008df237","type":"basic","__v":8,"hidden":false,"link_external":false,"slug":"api-references-overview","sync_unique":"","body":"Authenticating stamps is the core service of the SnowShoe API. \n\nCurrently, all calls are made to v2 of our API at [https://beta.snowshoestamp.com/api/v2](https://beta.snowshoestamp.com/api/v2).","order":0,"project":"55087b0f6065ed17002643ce","version":"5512f24df5056719008df1ff","api":{"auth":"required","params":[],"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"excerpt":"","githubsync":"","updates":[],"user":"5509cfc1e463aa3d000dd34a","category":"5512f24ef5056719008df201","createdAt":"2015-03-25T18:42:34.071Z","link_url":"","title":"API Reference: Overview","isReference":false,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"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 [https://beta.snowshoestamp.com/api/v2](https://beta.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 [https://beta.snowshoestamp.com/api/v2](https://beta.snowshoestamp.com/api/v2).
{"_id":"5512f24ef5056719008df203","editedParams":true,"editedParams2":true,"githubsync":"","updates":[],"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","category":"5512f24ef5056719008df201","createdAt":"2015-03-25T17:34:37.299Z","project":"55087b0f6065ed17002643ce","__v":1,"link_external":false,"link_url":"","order":1,"title":"Stamp","type":"post","api":{"url":"/stamp","auth":"required","examples":{"codes":[]},"method":"post","params":[{"in":"body","_id":"5512f560a4d48f35004e1ba4","default":"","desc":"Base64 encoded array of two-dimensional arrays","name":"data","required":false,"type":"array_mixed"}],"results":{"codes":[{"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":200},{"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":""},"hidden":false,"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.","slug":"stamp","sync_unique":"","body":"","parentDoc":null,"metadata":{"title":"","description":"","image":[]},"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.

Body Params

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

Definition

{{ api_url }}{{ page_api_url }}

Result Format



{"_id":"551c8301d65a6d19007a8e37","title":"Device Compatibility","type":"basic","api":{"auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"language":"json","code":"{}","name":"","status":400}]},"settings":"","url":""},"link_url":"","body":"SnowShoe 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\n1. 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\n2. Consistently manufacture hardware, at scale, to meet that specification.\n\n3. Develop a QA process that allows us to be confident that the hardware we are shipping meet that specification.\n\nStamps get tested multiple times throughout the manufacturing, validation, and stamp assignment process. Touchscreen sensitivity and detection capabilities continue to improve and we test a wide variety a new devices on the market as they become available.\n\nMake sure to check the [troubleshooting](doc:troubleshooting) section below if you are having issues with a specific device.\n[block:callout]\n{\n  \"type\": \"danger\",\n  \"body\": \"Cracked screens and thick screen protectors have been known to cause issues with stamp readability.\\n\\n[More Information](doc:cracked-screens)\",\n  \"title\": \"Cracked screens and screen protectors\"\n}\n[/block]\n\n[block:callout]\n{\n  \"type\": \"warning\",\n  \"body\": \"Individually unique stamps are not guaranteed to work on a subset of legacy HTC devices because of default settings in their firmware. This can often be fixed by toggling the default multitouch setting that allow the phones to sense more than 3 simultaneous touch events.\",\n  \"title\": \"Legacy HTC devices\"\n}\n[/block]\nAre you having issues with a specific device? Send us an email to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).","category":"5512fbea2df1b63100555e53","githubsync":"","hidden":false,"link_external":false,"version":"5512f24df5056719008df1ff","__v":26,"sync_unique":"","user":"5509cfc1e463aa3d000dd34a","project":"55087b0f6065ed17002643ce","slug":"testing-devices","isReference":false,"order":1,"updates":["5705771c3e55070e00914fc3"],"createdAt":"2015-04-01T23:45:05.518Z","excerpt":"","next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Device Compatibility


SnowShoe 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. Stamps get tested multiple times throughout the manufacturing, validation, and stamp assignment process. Touchscreen sensitivity and detection capabilities continue to improve and we test a wide variety a new devices on the market as they become available. Make sure to check the [troubleshooting](doc:troubleshooting) section below if you are having issues with a specific device. [block:callout] { "type": "danger", "body": "Cracked screens and thick screen protectors have been known to cause issues with stamp readability.\n\n[More Information](doc:cracked-screens)", "title": "Cracked screens and screen protectors" } [/block] [block:callout] { "type": "warning", "body": "Individually unique stamps are not guaranteed to work on a subset of legacy HTC devices because of default settings in their firmware. This can often be fixed by toggling the default multitouch setting that allow the phones to sense more than 3 simultaneous touch events.", "title": "Legacy HTC devices" } [/block] Are you having issues with a specific device? Send us an email to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
SnowShoe 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. Stamps get tested multiple times throughout the manufacturing, validation, and stamp assignment process. Touchscreen sensitivity and detection capabilities continue to improve and we test a wide variety a new devices on the market as they become available. Make sure to check the [troubleshooting](doc:troubleshooting) section below if you are having issues with a specific device. [block:callout] { "type": "danger", "body": "Cracked screens and thick screen protectors have been known to cause issues with stamp readability.\n\n[More Information](doc:cracked-screens)", "title": "Cracked screens and screen protectors" } [/block] [block:callout] { "type": "warning", "body": "Individually unique stamps are not guaranteed to work on a subset of legacy HTC devices because of default settings in their firmware. This can often be fixed by toggling the default multitouch setting that allow the phones to sense more than 3 simultaneous touch events.", "title": "Legacy HTC devices" } [/block] Are you having issues with a specific device? Send us an email to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
{"_id":"556784d86976ef0d0099c553","excerpt":"","githubsync":"","isReference":false,"link_url":"","order":2,"slug":"troubleshooting","version":"5512f24df5056719008df1ff","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\": \"danger\",\n  \"body\": \"Cracked screens and thick screen protectors have been known to cause issues with stamp readability.\\n\\n[More Information](doc:cracked-screens)\",\n  \"title\": \"Cracked screens and screen protectors\"\n}\n[/block]\nBelow 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 five points of the stamp. Try stamping again to ensure flat, solid contact between the device screen and the stamp.\n\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 five fingers.\n\nIf you see this page consistently while using SnowShoe’s demo with your stamps, please contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com).\n\n\n**The stamp doesn't work when my phone is not being held. For instance, 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 are working on 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\n**One or both of the my 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 the algorithm to improve the stamp success rate. Don't hesitate to reach out if you continue to have issues. We can look into replacing your stamp(s).\n\n\n**Stamps are not working 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:\n* Settings > Displays and Gestures\n* Uncheck “HTC Gestures ~ Enable 3 finger gestures and ignore gestures with more fingers.”\n\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 and walk through potential issues. Contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com) and we'll send you another stamp as soon as possible.\n\nIf you find other bugs or need additional information please contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com).","hidden":false,"title":"Troubleshooting","category":"5512fbea2df1b63100555e53","sync_unique":"","user":"5509cfc1e463aa3d000dd34a","__v":14,"createdAt":"2015-05-28T21:12:56.812Z","link_external":false,"project":"55087b0f6065ed17002643ce","type":"basic","updates":[],"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Troubleshooting


[block:callout] { "type": "danger", "body": "Cracked screens and thick screen protectors have been known to cause issues with stamp readability.\n\n[More Information](doc:cracked-screens)", "title": "Cracked screens and screen protectors" } [/block] 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 five points of the stamp. Try stamping again to ensure flat, solid contact between the device screen and the stamp. **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 five fingers. If you see this page consistently while using SnowShoe’s demo with your stamps, please contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com). **The stamp doesn't work when my phone is not being held. For instance, 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 are working on 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 my 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 the algorithm to improve the stamp success rate. Don't hesitate to reach out if you continue to have issues. We can look into replacing your stamp(s). **Stamps are not working 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 * Uncheck “HTC Gestures ~ Enable 3 finger gestures and ignore gestures with more fingers.” **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 and walk through potential issues. Contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com) and we'll send you another stamp as soon as possible. If you find other bugs or need additional information please contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
[block:callout] { "type": "danger", "body": "Cracked screens and thick screen protectors have been known to cause issues with stamp readability.\n\n[More Information](doc:cracked-screens)", "title": "Cracked screens and screen protectors" } [/block] 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 five points of the stamp. Try stamping again to ensure flat, solid contact between the device screen and the stamp. **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 five fingers. If you see this page consistently while using SnowShoe’s demo with your stamps, please contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com). **The stamp doesn't work when my phone is not being held. For instance, 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 are working on 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 my 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 the algorithm to improve the stamp success rate. Don't hesitate to reach out if you continue to have issues. We can look into replacing your stamp(s). **Stamps are not working 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 * Uncheck “HTC Gestures ~ Enable 3 finger gestures and ignore gestures with more fingers.” **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 and walk through potential issues. Contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com) and we'll send you another stamp as soon as possible. If you find other bugs or need additional information please contact support at [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
{"_id":"55d4c5659c4e4a0d00ff674c","link_external":false,"sync_unique":"","title":"Sticker Templates","api":{"auth":"required","params":[],"results":{"codes":[{"name":"","status":200,"language":"json","code":"{}"},{"status":400,"language":"json","code":"{}","name":""}]},"settings":"","url":""},"body":"[Download sticker template (ai)](https://downloads.snowshoestamp.com/stickers/sticker_template.ai)\n\n**Design your sticker**\nOpen the template above in Adobe Illustrator, make your edits, and save. For optimal prints, be sure to change all text to outlines before saving.\n\n**Upload your artwork to a sticker printer**\n1. SnowShoe loves [Stickermule.com](https://www.stickermule.com/)  - visit their site and choose **'Die Cut' stickers**.\n\n2. Choose a **'Custom Size'** of **W: 1\"** and **H: 1\"**\n\n3. Select your quantity\n\n4. Upload your sticker file\n\n5. When prompted for additional instructions, enter \"Please trim the white portions off the corners.  The final sticker should have rounded corners. Thanks!\"\n\n6. Checkout\n\n7. Wait for your proof. *The quicker you approve your design, the quicker you will 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 **two weeks** before your event to keep shipping costs at a minimum. This should get you your stamps about one 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]","category":"5512fbea2df1b63100555e53","createdAt":"2015-08-19T18:05:25.334Z","hidden":false,"isReference":false,"updates":[],"version":"5512f24df5056719008df1ff","githubsync":"","link_url":"","order":3,"project":"55087b0f6065ed17002643ce","__v":9,"excerpt":"We're big fans of adding high quality vinyl stickers to the tops of our stamps. Follow the instructions below to customize your stamps.","slug":"sticker-templates","type":"basic","user":"5509cfc1e463aa3d000dd34a","next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Sticker Templates

We're big fans of adding high quality vinyl stickers to the tops of our stamps. Follow the instructions below to customize your stamps.

[Download sticker template (ai)](https://downloads.snowshoestamp.com/stickers/sticker_template.ai) **Design your sticker** Open the template above in Adobe Illustrator, make your edits, and save. For optimal prints, be sure to change all text to outlines before saving. **Upload your artwork to a sticker printer** 1. SnowShoe loves [Stickermule.com](https://www.stickermule.com/) - visit their site and choose **'Die Cut' stickers**. 2. Choose a **'Custom Size'** of **W: 1"** and **H: 1"** 3. Select your quantity 4. Upload your sticker file 5. When prompted for additional instructions, enter "Please trim the white portions off the corners. The final sticker should have rounded corners. Thanks!" 6. Checkout 7. Wait for your proof. *The quicker you approve your design, the quicker you will 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 **two weeks** before your event to keep shipping costs at a minimum. This should get you your stamps about one 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]
[Download sticker template (ai)](https://downloads.snowshoestamp.com/stickers/sticker_template.ai) **Design your sticker** Open the template above in Adobe Illustrator, make your edits, and save. For optimal prints, be sure to change all text to outlines before saving. **Upload your artwork to a sticker printer** 1. SnowShoe loves [Stickermule.com](https://www.stickermule.com/) - visit their site and choose **'Die Cut' stickers**. 2. Choose a **'Custom Size'** of **W: 1"** and **H: 1"** 3. Select your quantity 4. Upload your sticker file 5. When prompted for additional instructions, enter "Please trim the white portions off the corners. The final sticker should have rounded corners. Thanks!" 6. Checkout 7. Wait for your proof. *The quicker you approve your design, the quicker you will 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 **two weeks** before your event to keep shipping costs at a minimum. This should get you your stamps about one 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]
{"_id":"5d8a414e5cd0cc005e558efd","project":"55087b0f6065ed17002643ce","version":"5512f24df5056719008df1ff","category":"5512fbea2df1b63100555e53","user":"5509cfc1e463aa3d000dd34a","updates":[],"next":{"pages":[],"description":""},"createdAt":"2019-09-24T16:16:14.524Z","link_external":false,"link_url":"","sync_unique":"","hidden":false,"api":{"settings":"","results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"language":"json","code":"{}","name":"","status":400}]},"auth":"required","params":[],"url":""},"isReference":false,"order":999,"body":"A very small percentage of consumer phones (less than 1%) presented for a stamp can have either a severely cracked screen or a non-standard thick screen protector. In order to serve these customers and enable the stamp event, we recommend using a fall back or work around with a button on the stamp screen (small) and a special 3-digit code. Below is a graphic example of a simple implementation of this approach.\n \nThere will be a little extra coding needed for this page, which could be in your stamp page templates, to facilitate this alternative method. The result from this manual authentication should point to the same page as the success page delivered after a normal stamping event.\n \nPlease note that any authentications using this work manual input work around will NOT show up in your SnowShoe Dashboard as this was not an actual stamp event. However, these transactions can be reported in your onsite analytics should you choose.\n \nObviously, staff will need to be trained to take this manual approach should a stamp not be recognized due to one of these issues. The secret code should remain known only to the staff and of course could be rotated periodically, with a little additional coding.\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/422097e-manual_validation.png\",\n        \"manual_validation.png\",\n        3300,\n        2550,\n        \"#0eace2\"\n      ]\n    }\n  ]\n}\n[/block]\nAre you having issues with a specific device? Send us an email to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).","excerpt":"","slug":"cracked-screens","type":"basic","title":"Cracked Screens & Screen Protectors","__v":0,"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Cracked Screens & Screen Protectors


A very small percentage of consumer phones (less than 1%) presented for a stamp can have either a severely cracked screen or a non-standard thick screen protector. In order to serve these customers and enable the stamp event, we recommend using a fall back or work around with a button on the stamp screen (small) and a special 3-digit code. Below is a graphic example of a simple implementation of this approach. There will be a little extra coding needed for this page, which could be in your stamp page templates, to facilitate this alternative method. The result from this manual authentication should point to the same page as the success page delivered after a normal stamping event. Please note that any authentications using this work manual input work around will NOT show up in your SnowShoe Dashboard as this was not an actual stamp event. However, these transactions can be reported in your onsite analytics should you choose. Obviously, staff will need to be trained to take this manual approach should a stamp not be recognized due to one of these issues. The secret code should remain known only to the staff and of course could be rotated periodically, with a little additional coding. [block:image] { "images": [ { "image": [ "https://files.readme.io/422097e-manual_validation.png", "manual_validation.png", 3300, 2550, "#0eace2" ] } ] } [/block] Are you having issues with a specific device? Send us an email to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
A very small percentage of consumer phones (less than 1%) presented for a stamp can have either a severely cracked screen or a non-standard thick screen protector. In order to serve these customers and enable the stamp event, we recommend using a fall back or work around with a button on the stamp screen (small) and a special 3-digit code. Below is a graphic example of a simple implementation of this approach. There will be a little extra coding needed for this page, which could be in your stamp page templates, to facilitate this alternative method. The result from this manual authentication should point to the same page as the success page delivered after a normal stamping event. Please note that any authentications using this work manual input work around will NOT show up in your SnowShoe Dashboard as this was not an actual stamp event. However, these transactions can be reported in your onsite analytics should you choose. Obviously, staff will need to be trained to take this manual approach should a stamp not be recognized due to one of these issues. The secret code should remain known only to the staff and of course could be rotated periodically, with a little additional coding. [block:image] { "images": [ { "image": [ "https://files.readme.io/422097e-manual_validation.png", "manual_validation.png", 3300, 2550, "#0eace2" ] } ] } [/block] Are you having issues with a specific device? Send us an email to [support@snowshoestamp.com](mailto:support@snowshoestamp.com).
{"_id":"56d0f1b6b2cb7013004de860","title":"Contact Email","updates":[],"category":"56d0eef5b2cb7013004de85f","excerpt":"","slug":"contact-email","link_external":false,"link_url":"","order":0,"project":"55087b0f6065ed17002643ce","body":"We're always around! If you have a specific question or just want to say hi, don't hesitate to reach out to us at [support@snowshoestamp.com](mailto:support@snowshoestamp.com).","githubsync":"","api":{"url":"","auth":"required","params":[],"results":{"codes":[{"status":200,"language":"json","code":"{}","name":""},{"status":400,"language":"json","code":"{}","name":""}]},"settings":""},"user":"5509cfc1e463aa3d000dd34a","version":"5512f24df5056719008df1ff","sync_unique":"","type":"basic","__v":2,"createdAt":"2016-02-27T00:45:42.169Z","hidden":false,"isReference":false,"next":{"description":"","pages":[]},"parentDoc":null,"metadata":{"title":"","description":"","image":[]},"childrenPages":[]}

Contact Email


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