doctype 5 html head title Swagger UI link(href='//fonts.googleapis.com/css?family=Droid+Sans:400,700', rel='stylesheet', type='text/css') link(href='/bower_components/swagger-ui/dist/css/reset.css', media='screen', rel='stylesheet', type='text/css') link(href='/bower_components/swagger-ui/dist/css/screen.css', media='screen', rel='stylesheet', type='text/css') link(href='/bower_components/swagger-ui/dist/css/reset.css', media='print', rel='stylesheet', type='text/css') link(href='/bower_components/swagger-ui/dist/css/screen.css', media='print', rel='stylesheet', type='text/css') script(src='/bower_components/swagger-ui/dist/lib/shred.bundle.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/jquery-1.8.0.min.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/jquery.slideto.min.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/jquery.wiggle.min.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/jquery.ba-bbq.min.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/handlebars-1.0.0.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/underscore-min.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/backbone-min.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/swagger.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/swagger-ui.js', type='text/javascript') script(src='/bower_components/swagger-ui/dist/lib/highlight.7.3.pack.js', type='text/javascript') script(type='text/javascript'). $(function () { window.swaggerUi = new SwaggerUi({ url: "/api/v2/api-docs", dom_id: "swagger-ui-container", supportedSubmitMethods: ['get', 'post', 'put', 'delete'], onComplete: function(swaggerApi, swaggerUi){ if(console) { console.log("Loaded SwaggerUI") } $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); }, onFailure: function(data) { if(console) { console.log("Unable to Load SwaggerUI"); console.log(data); } }, docExpansion: "none" }); debugger; $('#input_apiKey').change(function() { var key = $('#input_apiKey')[0].value; console.log("apiKey: " + key); if(key && key.trim() != "") { console.log("added key " + key); window.authorizations.add("apiKey", new ApiKeyAuthorization("x-api-key", key, "header")); } }) $('#input_uuid').change(function() { var key = $('#input_uuid')[0].value; console.log("uuid: " + key); if(key && key.trim() != "") { console.log("added key " + key); window.authorizations.add("uuid", new ApiKeyAuthorization("x-api-user", key, "header")); } }) window.swaggerUi.load(); }); body.swagger-section #header .swagger-ui-wrap a#logo(href='http://swagger.wordnik.com') HabitRPG API Documentation .swagger-ui-wrap(style='padding:50px') form#api_selector .input input#input_uuid(placeholder='UUID', name='uuid', type='text') input#input_apiKey(placeholder='API Key', name='apiKey', type='text') //.input input#input_baseUrl(placeholder='http://example.com/api', name='baseUrl', type='text') //.input a#explore(href='#') Explore br h2 Two API Types p HabitRPG's API is meant for two different audiences: (1) extensions and scripts, and (2) full-fledged applications. Extensions and scripts can utilize Habit's up/down scoring for individual tasks. An example of this in action is the Chrome Extension, which up-scores you for visiting productive websites, and down-scores you for visiting procrastination websites. Other examples currently in use are Pomodoro, Anki, and Github scripts - which up-score you for good behavior and downscore you for bad behavior - see the list. The second API consumer is for full-fledge applications, which need read / write access to the entire user document. An example of this would be Mobile Apps or Desktop application. h2 Extensions / Scripts p HabitRPG has a simple API for up-scoring and down-scoring third party Habits: POST /api/v2/user/tasks/{id}/{direction} (headers x-api-user and x-api-key required). h4 Example p curl -X POST -H "x-api-key: YOUR_API_TOKEN" -H "x-api-user: YOUR_USER_ID" https://habitrpg.com/api/v2/user/tasks/productivity/up p Note: You may need to add --compressed -H "Content-Type:application/json" to your curl if you get errors. ul li POST to the URL /api/v2/user/tasks/{id}/{direction} ul li {direction} is 'up' or 'down' li {id} is a unique identifier for a task, which you make up, consisting of lowercase letters. Try to make it something common, like 'productivity' or 'fitness' - because other services may piggy-back off your task. For example, the Chrome extension down-scores a productivity task when you visit vice websites (reddit, 9gag, etc). However, Pomodoro up-scores productivity when you complete a task. So the two services share a single task to score your overall productivity. If the task doesn't yet exist, it is created the first time you POST to this URL. li apiToken (POST body) required h2 Full API p All API requests should be prefaced by https://habitrpg.com. Every authenticated request should include two headers. Your api key (x-api-key) and your user id (x-api-user). Do not include {} braces in your header (-H 'x-api-user: a94b6d9d-6b64-43ae-856c-2c3f211bd426') h2 Requirements: p The base-url for all routes is /api/v2. So /user actions will be at https://habitrpg.com/api/v2/*. You need to send x-api-user and x-api-key headers for each request. p For create & edit paths (PUT & POST), you'll need to know the schema of the object you're trying to create or edit. See Schema definitions here p If any of the documentation is lacking or you're having trouble with it, please post an issue to Github #message-bar.swagger-ui-wrap #swagger-ui-container.swagger-ui-wrap