@api {post} /api/v3/user/auth/local/register Register
@apiParam (Body) {String} username Username of the new user
@apiParam (Body) {String} email Email address of the new user
@apiParam (Body) {String} password Password for the new user
@apiParam (Body) {String} confirmPassword Password confirmation
@apiSuccess {Object} data The user object, if local auth was just attached to a social user then only user.auth.local
@api {post} /api/v3/user/auth/local/login Login
@apiParam (Body) {String} username Username or email of the user
@apiParam (Body) {String} password The user's password
@apiSuccess {String} data._id The user's unique identifier
@apiSuccess {String} data.apiToken The user's api token that must be used to authenticate requests.
@apiSuccess {Boolean} data.newUser Returns true if the user was just created (always false for local login).
@api {post} /api/v3/user/auth/pusher Pusher.com authentication
@apiParam (Body) {String} socket_id A unique identifier for the specific client connection to Pusher
@apiParam (Body) {String} channel_name The name of the channel being subscribed to
@apiSuccess {String} auth The authentication token
@api {put} /api/v3/user/auth/update-username Update username
@apiParam (Body) {String} password The current user password
@apiParam (Body) {String} username The new username
@apiSuccess {String} data.username The new username
@api {put} /api/v3/user/auth/update-password
@apiParam (Body) {String} password The old password
@apiParam (Body) {String} newPassword The new password
@apiParam (Body) {String} confirmPassword New password confirmation
@apiSuccess {Object} data An empty object
@api {post} /api/v3/user/reset-password Reset password
@apiParam (Body) {String} email The email address of the user
@apiSuccess {String} message The localized success message
@api {put} /api/v3/user/auth/update-email Update email
@apiParam (Body) {String} newEmail The new email address.
@apiParam (Body) {String} password The user password.
@apiSuccess {String} data.email The updated email address
@api {delete} /api/v3/user/auth/social/:network Delete social authentication method
@apiSuccess {Object} data Empty object
@apiSuccess {UUID} challenge.group._id The group id.
@apiSuccess {String} challenge.group.type Group type: `guild` or `party`.
@apiSuccess {String} challenge.group.privacy Group privacy: `public` or `private`.
@apiSuccess {String} challenge.name Full name of challenge.
@apiSuccess {String} challenge.shortName A shortened name for the challenge, to be used as a tag.
@apiSuccess {Object} challenge.leader User details of challenge leader.
@apiSuccess {UUID} challenge.leader._id User id of challenge leader.
@apiSuccess {Object} challenge.leader.profile Profile information of leader.
@apiSuccess {Object} challenge.leader.profile.name Display Name of leader.
@apiSuccess {String} challenge.updatedAt Timestamp of last update.
@apiSuccess {String} challenge.createdAt Timestamp of challenge creation.
@apiSuccess {UUID} challenge.id Id number of newly created challenge.
@apiSuccess {UUID} challenge._id Same as `challenge.id`.
@apiSuccess {String} challenge.prize Number of gems offered as prize to winner (can be 0).
@apiSuccess {String} challenge.memberCount Number users participating in challenge.
@apiSuccess {Object} challenge.tasksOrder Object containing IDs of the challenge's tasks and rewards in their preferred sort order.
@apiSuccess {Array} challenge.tasksOrder.rewards Array of `reward` task IDs.
@apiSuccess {Array} challenge.tasksOrder.todos Array of `todo` task IDs.
@apiSuccess {Array} challenge.tasksOrder.dailys Array of `daily` task IDs.
@apiSuccess {Array} challenge.tasksOrder.habits Array of `habit` task IDs.
@apiSuccess {Boolean} challenge.official Boolean indicating if this is an official Habitica challenge.
@api {post} /api/v3/challenges Create a new challenge
@apiParam (Body) {Object} challenge An object representing the challenge to be created
@apiParam (Body) {UUID} challenge.groupId The id of the group to which the challenge belongs
@apiParam (Body) {String} challenge.name The full name of the challenge
@apiParam (Body) {String} challenge.shortName A shortened name for the challenge, to be used as a tag
@apiParam (Body) {String} [challenge.description] A description of the challenge
@apiParam (Body) {Boolean} [official=false] Whether or not a challenge is an official Habitica challenge (requires admin)
@apiParam (Body) {Number} [challenge.prize=0] Number of gems offered as a prize to challenge winner
@apiSuccess (201) {Object} challenge The newly created challenge.
@api {post} /api/v3/challenges/:challengeId/join Join a challenge
@apiParam (Path) {UUID} challengeId The challenge _id
@apiSuccess {Object} challenge The challenge the user joined
@api {post} /api/v3/challenges/:challengeId/leave Leave a challenge
@apiParam (Path) {UUID} challengeId The challenge _id
@apiParam (Body) {String="remove-all","keep-all"} [keep="keep-all"] Whether or not to keep or remove the challenge's tasks
@apiSuccess {Object} data An empty object
@api {get} /api/v3/challenges/user Get challenges for a user.
@apiSuccess {Object[]} challenges An array of challenges sorted with official challenges first, followed by the challenges in order from newest to oldest
@api {get} /api/v3/challenges/groups/:groupId Get challenges for a group
@apiParam (Path) {UUID} groupId The group _id
@apiSuccess {Array} data An array of challenges sorted with official challenges first, followed by the challenges in order from newest to oldest
@api {get} /api/v3/challenges/:challengeId Get a challenge given its id
@apiParam (Path) {UUID} challengeId The challenge _id
@apiSuccess {Object} data The challenge object
@api {get} /api/v3/challenges/:challengeId/export/csv Export a challenge in CSV
@apiParam (Path) {UUID} challengeId The challenge _id
@apiSuccess {String} challenge A csv file
@api {put} /api/v3/challenges/:challengeId Update the name, description, or leader of a challenge.
@apiParam (Path) {UUID} challengeId The challenge _id
@apiParam (Body) {String} [challenge.name] The new full name of the challenge.
@apiParam (Body) {String} [challenge.description] The new challenge description.
@apiParam (Body) {String} [challenge.leader] The UUID of the new challenge leader.
@apiSuccess {Object} data The updated challenge
@api {delete} /api/v3/challenges/:challengeId Delete a challenge
@apiParam (Path) {UUID} challengeId The _id for the challenge to delete
@apiSuccess {Object} data An empty object
@api {post} /api/v3/challenges/:challengeId/selectWinner/:winnerId Select winner for challenge
@apiParam (Path) {UUID} challengeId The _id for the challenge to close with a winner
@apiParam (Path) {UUID} winnerId The _id of the winning user
@apiSuccess {Object} data An empty object
@api {get} /api/v3/groups/:groupId/chat Get chat messages from a group
@apiParam (Path) {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiSuccess {Array} data An array of <a href='https://github.com/HabitRPG/habitica/blob/develop/website/server/models/group.js#L51' target='_blank'>chat messages</a>
@api {post} /api/v3/groups/:groupId/chat Post chat message to a group
@apiParam (Path) {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiParam (Body) {String} message Message The message to post
@apiParam (Query) {UUID} previousMsg The previous chat message's UUID which will force a return of the full group chat
@api {post} /api/v3/groups/:groupId/chat/:chatId/like Like a group chat message
@apiParam (Path) {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiParam (Path) {UUID} chatId The chat message _id
@apiSuccess {Object} data The liked <a href='https://github.com/HabitRPG/habitica/blob/develop/website/server/models/group.js#L51' target='_blank'>chat message</a>
@api {post} /api/v3/groups/:groupId/chat/:chatId/flag Flag a group chat message
@apiParam (Path) {UUID} groupId The group id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiParam (Path) {UUID} chatId The chat message id
@apiSuccess {Object} data The flagged chat message
@apiSuccess {UUID} data.id The id of the message
@apiSuccess {String} data.text The text of the message
@apiSuccess {Number} data.timestamp The timestamp of the message in milliseconds
@apiSuccess {Object} data.likes The likes of the message
@apiSuccess {Object} data.flags The flags of the message
@apiSuccess {Number} data.flagCount The number of flags the message has
@apiSuccess {UUID} data.uuid The user id of the author of the message
@apiSuccess {String} data.user The username of the author of the message
@api {post} /api/v3/groups/:groupId/chat/:chatId/clearflags Clear flags
@apiParam (Path) {UUID} groupId The group id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiParam (Path) {UUID} chatId The chat message id
@apiSuccess {Object} data An empty object
@api {post} /api/v3/groups/:groupId/chat/seen Mark all messages as read for a group
@apiParam (Path) {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiSuccess {Object} data An empty object
@api {delete} /api/v3/groups/:groupId/chat/:chatId Delete chat message from a group
@apiParam (Query) {UUID} previousMsg The last message's ID fetched by the client so that the whole chat will be returned only if new messages have been posted in the meantime
@apiParam (Path) {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiParam (Path) {UUID} chatId The chat message id
@apiSuccess data The updated chat array or an empty object if no message was posted after previousMsg
@apiSuccess {Object} data An empty object when the previous message was deleted
@api {get} /api/v3/content Get all available content objects
@apiParam (Query) {String="bg","cs","da","de","en","en@pirate","en_GB","es","es_419","fr","he","hu","id","it","ja","nl","pl","pt","pt_BR","ro","ru","sk","sr","sv","uk","zh","zh_TW"} [language=en] Language code used for the items' strings. If the authenticated user makes the request, the content will return with the user's configured language.
@apiSuccess {Object} data Various data about the content of Habitica. The content route
@apiSuccess {Object} data.mystery The mystery sets awarded to paying subscribers.
@apiSuccess {Object} data.gear The gear that can be equipped.
@apiSuccess {Object} data.gear.tree Detailed information about the gear, organized by type.
@apiSuccess {Object} data.gear.flat The full key of each equipment.
@apiSuccess {Object} data.spells The skills organized by class. Includes cards and visual buffs.
@apiSuccess {Object} data.potion Data about the health potion.
@apiSuccess {Object} data.armoire Data about the armoire.
@apiSuccess {Array} data.classes The available classes.
@apiSuccess {Object} data.eggs All available eggs.
@apiSuccess {Object} data.timeTravelStable The animals available in the Time Traveler's stable, separated
@apiSuccess {Object} data.hatchingPotions All the hatching potions.
@apiSuccess {Object} data.petInfo All the pets with extra info.
@apiSuccess {Object} data.mountInfo All the mounts with extra info.
@apiSuccess {Object} data.food All the food.
@apiSuccess {Array} data.userCanOwnQuestCategories The types of quests that a user can own.
@apiSuccess {Object} data.quests Data about the quests.
@apiSuccess {Object} data.appearances Data about the apperance properties.
@apiSuccess {Object} data.appearances.hair Data about available hair options.
@apiSuccess {Object} data.appearances.shirt Data about available shirt options.
@apiSuccess {Object} data.appearances.size Data about available body size options.
@apiSuccess {Object} data.appearances.skin Data about available skin options.
@apiSuccess {Object} data.appearances.chair Data about available chair options.
@apiSuccess {Object} data.appearances.background Data about available background options.
@apiSuccess {Object} data.backgrounds Data about the background sets.
@apiSuccess {Object} data.subscriptionBlocks Data about the various subscirption blocks.
@api {get} /api/v3/coupons Get coupons
@apiSuccess {String} Coupons in CSV format
@api {post} /api/v3/coupons/generate/:event Generate coupons for an event
@apiParam (Path) {String=wondercon,google_6mo} event The event for which the coupon should be generated
@apiParam (Query) {Number} count The number of coupon codes to generate
@apiSuccess {Array} data Generated coupons
@api {post} /api/v3/coupons/enter/:code Redeem a coupon code
@apiParam (Path) {String} code The coupon code to apply
@apiSuccess {Object} data User object
@api {post} /api/v3/coupons/validate/:code Validate a coupon code
@apiParam (Path) {String} code The coupon code to validate
@apiSuccess {Boolean} data.valid True or False
@api {post} /api/v3/cron Runs cron
@apiSuccess {Object} data An empty Object
@api {post} /api/v3/debug/add-ten-gems Add ten gems to the current user
@apiSuccess {Object} data An empty Object
@api {post} /api/v3/debug/add-hourglass Add Hourglass to the current user
@apiSuccess {Object} data An empty Object
@api {post} /api/v3/debug/set-cron Set lastCron for user
@apiSuccess {Object} data An empty Object
@api {post} /api/v3/debug/make-admin Sets contributor.admin to true
@apiSuccess {Object} data An empty Object
@api {post} /api/v3/debug/modify-inventory Manipulate user's inventory
@apiParam (Body) {Object} gear Object to replace user's <code><a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/user/schema.js#L243">gear.owned</a></code> object.
@apiParam (Body) {Object} special Object to replace user's <code><a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/user/schema.js#272">special</a></code> object.
@apiParam (Body) {Object} pets Object to replace user's <code><a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/user/schema.js#296">pets</a></code> object.
@apiParam (Body) {Object} mounts Object to replace user's <code><a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/user/schema.js#329">mounts</a></code> object.
@apiParam (Body) {Object} eggs Object to replace user's <code><a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/user/schema.js#310">eggs</a></code> object.
@apiParam (Body) {Object} hatchingPotions Object to replace user's <code><a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/user/schema.js#316">hatchingPotions</a></code> object.
@apiParam (Body) {Object} food Object to replace user's <code><a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/user/schema.js#322">food</a></code> object.
@apiParam (Body) {Object} quests Object to replace user's <code><a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/user/schema.js#344">quests</a></code> object.
@apiSuccess {Object} data An empty Object
@api {post} /api/v3/debug/quest-progress Artificially accelerate quest progress
@apiSuccess {Object} data An empty Object
@api {post} /api/v3/groups Create group
@apiParam (Body) {String} name
@apiParam (Body) {String="guild","party"} type Type of group (guild or party)
@apiParam (Body) {String="private","public"} privacy Privacy of group (party MUST be private)
@apiSuccess (201) {Object} data The created group (See <a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/group.js" target="_blank">/website/server/models/group.js</a>)
@api {post} /api/v3/groups/create-plan Create a Group and then redirect to the correct payment
@apiSuccess (201) {Object} data The created group
@api {get} /api/v3/groups Get groups for a user
@apiParam (Query) {String} type The type of groups to retrieve. Must be a query string representing a list of values like 'tavern,party'. Possible values are party, guilds, privateGuilds, publicGuilds, tavern
@apiParam (Query) {String="true","false"} [paginate] Public guilds support pagination. When true guilds are returned in groups of 30
@apiParam (Query) {Number} [page] When pagination is enabled for public guilds this parameter can be used to specify the page number (the initial page is number 0 and not required)
@apiSuccess {Object[]} data An array of the requested groups (See <a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/group.js" target="_blank">/website/server/models/group.js</a>)
@api {get} /api/v3/groups/:groupId Get group
@apiParam (Path) {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiSuccess {Object} data The group object (See <a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/group.js" target="_blank">/website/server/models/group.js</a>)
@api {put} /api/v3/groups/:groupId Update group
@apiParam (Path) {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiSuccess {Object} data The updated group (See <a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/group.js" target="_blank">/website/server/models/group.js</a>)
@api {post} /api/v3/groups/:groupId/join Join a group
@apiParam (Path) {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiSuccess {Object} data The joined group (See <a href="https://github.com/HabitRPG/habitica/blob/develop/website/server/models/group.js" target="_blank">/website/server/models/group.js</a>)
@api {post} /api/v3/groups/:groupId/reject Reject a group invitation
@apiParam (Path) {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiSuccess {Object} data An empty object
@api {post} /api/v3/groups/:groupId/leave Leave a group
@apiParam (Path) {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiParam (Query) {String="remove-all","keep-all"} keep=keep-all Whether or not to keep challenge tasks belonging to the group being left.
@apiParam (Body) {String="remain-in-challenges","leave-challenges"} [keepChallenges=leave-challenges] Whether or not to remain in the challenges of the group being left.
@apiSuccess {Object} data An empty object
@api {post} /api/v3/groups/:groupId/removeMember/:memberId Remove a member from a group
@apiParam (Path) {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiParam (Path) {UUID} memberId The _id of the member to remove
@apiParam (Query) {String} message Query parameter - The message to send to the removed members
@apiSuccess {Object} data An empty object
@api {post} /api/v3/groups/:groupId/invite Invite users to a group
@apiParam (Path) {String} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiParam (Body) {Object[]} [emails] An array of objects, each representing one email address to invite
@apiParam (Body) {String} emails.email The email address of the user being invited.
@apiParam (Body) {String} [emails.name] The name of the user being invited.
@apiParam (Body) {Array} [uuids] An array of uuids to invite
@apiSuccess {Array} data The invites
@apiSuccess {Object} data[0] If the invitation was a user id, you'll receive back an object. You'll recieve one Object for each succesful user id invite.
@apiSuccess {String} data[1] If the invitation was an email, you'll receive back the email. You'll recieve one String for each successful email invite.
@api {post} /api/v3/groups/:groupId/add-manager Add a manager to a group
@apiParam (Path) {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiSuccess {Object} data An empty object
@api {post} /api/v3/groups/:groupId/remove-manager Remove a manager from a group
@apiParam (Path) {UUID} groupId The group _id ('party' for the user party and 'habitrpg' for tavern are accepted)
@apiSuccess {Object} group The group
@api {get} /api/v3/hall/patrons Get all patrons
@apiParam (Query) {Number} [page=0] The result page.
@apiSuccess {Array} data An array of patrons
@api {get} /api/v3/hall/heroes Get all Heroes
@apiSuccess {Array} heroes An array of heroes
@api {get} /api/v3/hall/heroes/:heroId Get any user ("hero") given the UUID
@apiParam (Path) {UUID} heroId user ID
@apiSuccess {Object} data The user object
@api {put} /api/v3/hall/heroes/:heroId Update any user ("hero")
@apiParam (Path) {UUID} heroId user ID
@apiSuccess {Object} data The updated user object
@api {get} /api/v3/members/:memberId Get a member profile
@apiParam (Path) {UUID} memberId The member's id
@apiSuccess {Object} data The member object
@api {get} /api/v3/members/:memberId/achievements Get member achievements object
@apiParam (Path) {UUID} memberId The member's id
@apiSuccess {Object} data The achievements object
@apiSuccess {Object} data.basic The basic achievements object
@apiSuccess {Object} data.seasonal The seasonal achievements object
@apiSuccess {Object} data.special The special achievements object
@apiSuccess {String} data.*.label The label for that category
@apiSuccess {Object} data.*.achievements The achievements in that category
@apiSuccess {String} data.*.achievements.title The localized title string
@apiSuccess {String} data.*.achievements.text The localized description string
@apiSuccess {Boolean} data.*.achievements.earned Whether the user has earned the achievement
@apiSuccess {Number} data.*.achievements.index The unique index assigned to the achievement (only for sorting purposes)
@apiSuccess {Anything} data.*.achievements.value The value related to the achievement (if applicable)
@apiSuccess {Number} data.*.achievements.optionalCount The count related to the achievement (if applicable)
@api {get} /api/v3/groups/:groupId/members Get members for a group
@apiParam (Path) {UUID} groupId The group id
@apiParam (Query) {UUID} lastId Query parameter to specify the last member returned in a previous request to this route and get the next batch of results
@apiParam (Query) {Boolean} includeAllPublicFields Query parameter available only when fetching a party. If === `true` then all public fields for members will be returned (like when making a request for a single member)
@apiSuccess {Array} data An array of members, sorted by _id
@api {get} /api/v3/groups/:groupId/invites Get invites for a group
@apiParam (Path) {UUID} groupId The group id
@apiParam (Query) {UUID} lastId Query parameter to specify the last invite returned in a previous request to this route and get the next batch of results
@apiSuccess {array} data An array of invites, sorted by _id
@api {get} /api/v3/challenges/:challengeId/members Get members for a challenge
@apiParam (Path) {UUID} challengeId The challenge id
@apiParam (Query) {UUID} lastId Query parameter to specify the last member returned in a previous request to this route and get the next batch of results
@apiParam (Query) {String} includeAllMembers BETA Query parameter - If 'true' all challenge members are returned
@apiSuccess {Array} data An array of members, sorted by _id
@api {get} /api/v3/challenges/:challengeId/members/:memberId Get a challenge member progress
@apiParam (Path) {UUID} challengeId The challenge _id
@apiParam (Path) {UUID} memberId The member _id
@apiSuccess {Object} data Return an object with member _id, profile.name and a tasks object with the challenge tasks for the member
@api {get} /api/v3/members/:toUserId/objections/:interaction Get any objections that would occur if the given interaction was attempted - BETA
@apiParam (Path) {UUID} toUserId The user to interact with
@apiParam (Path) {String="send-private-message","transfer-gems"} interaction Name of the interaction to query
@apiSuccess {Array} data Return an array of objections, if the interaction would be blocked; otherwise an empty array
@api {post} /api/v3/members/send-private-message Send a private message to a member
@apiParam (Body) {String} message Body parameter - The message
@apiParam (Body) {UUID} toUserId Body parameter - The user to contact
@apiSuccess {Object} data An empty Object
@api {post} /api/v3/members/transfer-gems Send a gem gift to a member
@apiParam (Body) {String} message The message
@apiParam (Body) {UUID} toUserId The toUser _id
@apiParam (Body) {Integer} gemAmount The number of gems to send
@apiSuccess {Object} data An empty Object
@api {get} /api/v3/models/:model/paths Get all paths for the specified model
@apiParam (Path) {String="user","group","challenge","tag","habit","daily","todo","reward"} model The name of the model
@apiSuccess {Object} data A key-value object made of fieldPath: fieldType (like {'field.nested': Boolean})
@api {post} /api/v3/notifications/:notificationId/read Mark one notification as read
@apiParam (Path) {UUID} notificationId
@apiSuccess {Object} data user.notifications
@api {post} /api/v3/notifications Mark notifications as read
@apiSuccess {Object} data user.notifications
@api {post} /api/v3/user/push-devices Add a push device to a user
@apiParam (Body) {String} regId The id of the push device
@apiParam (Body) {String} type The type of push device
@apiSuccess {Object} data List of push devices
@apiSuccess {String} message Success message
@api {delete} /api/v3/user/push-devices/:regId remove a push device from a user
@apiParam (Path) {String} regId The id of the push device
@apiSuccess {Object} data List of push devices
@apiSuccess {String} message Success message
@api {post} /api/v3/groups/:groupId/quests/invite/:questKey Invite users to a quest
@apiParam (Path) {String} groupId The group _id (or 'party')
@apiParam (Path) {String} questKey
@apiSuccess {Object} data Quest object
@api {post} /api/v3/groups/:groupId/quests/accept Accept a pending quest
@apiParam (Path) {String} groupId The group _id (or 'party')
@apiSuccess {Object} data Quest Object
@api {post} /api/v3/groups/:groupId/quests/reject Reject a quest
@apiParam (Path) {String} groupId The group _id (or 'party')
@apiSuccess {Object} data Quest Object
@api {post} /api/v3/groups/:groupId/quests/force-start Force-start a pending quest
@apiParam (Path) {String} groupId The group _id (or 'party')
@apiSuccess {Object} data Quest Object
@api {post} /api/v3/groups/:groupId/quests/cancel Cancel a quest that is not active
@apiParam (Path) {String} groupId The group _id (or 'party')
@apiSuccess {Object} data Quest Object
@api {post} /api/v3/groups/:groupId/quests/abort Abort the current quest
@apiParam (Path) {String} groupId The group _id (or 'party')
@apiSuccess {Object} data Quest Object
@api {post} /api/v3/groups/:groupId/quests/leave Leave the active quest
@apiParam (Path) {String} groupId The group _id (or 'party')
@apiSuccess {Object} data Quest Object
@api {get} /api/v3/shops/market get the available items for the market
@apiSuccess {Object} data List of available items
@apiSuccess {string} message Success message
@api {get} /api/v3/shops/quests get the available items for the quests shop
@apiSuccess {Object} data List of available quests
@apiSuccess {string} message Success message
@api {get} /api/v3/shops/time-travelers get the available items for the time travelers shop
@apiSuccess {Object} data List of available items
@apiSuccess {string} message Success message
@api {get} /api/v3/shops/seasonal get the available items for the seasonal shop
@apiSuccess {Object} data List of available items
@apiSuccess {string} message Success message
@api {get} /api/v3/shops/backgrounds get the available items for the backgrounds shop
@apiSuccess {Object} data List of available backgrounds
@apiSuccess {string} message Success message
@api {get} /api/v3/status Get Habitica's API status
@apiSuccess {String} data.status 'up' if everything is ok
@api {post} /api/v3/tags Create a new tag
@apiParam (Body) {string} name The name of the tag to be added.
@apiSuccess (201) {Object} data The newly created tag
@api {get} /api/v3/tags Get a user's tags
@apiSuccess {Array} data An array of tags
@api {get} /api/v3/tags/:tagId Get a tag given its id
@apiParam (Path) {UUID} tagId The tag _id
@apiSuccess {Object} data The tag object
@api {put} /api/v3/tags/:tagId Update a tag
@apiParam (Path) {UUID} tagId The tag _id
@apiParam (Body) {string} name The new name of the tag.
@apiSuccess {Object} data The updated tag
@api {post} /api/v3/reorder-tags Reorder a tag
@apiParam (Body) {UUID} tagId Id of the tag to move
@apiParam (Body) {Number} to Position the tag is moving to
@apiSuccess {Object} data An empty object
@api {delete} /api/v3/tags/:tagId Delete a user tag given its id
@apiParam (Path) {UUID} tagId The tag _id
@apiSuccess {Object} data An empty object
@api {post} /api/v3/tasks/user Create a new task belonging to the user
@apiParam (Body) {String} text The text to be displayed for the task
@apiParam (Body) {String="habit","daily","todo","reward"} type Task type, options are: "habit", "daily", "todo", "reward".
@apiParam (Body) {String[]} [tags] Array of UUIDs of tags
@apiParam (Body) {String} [alias] Alias to assign to task
@apiParam (Body) {String="str","int","per","con"} [attribute] User's attribute to use, options are: "str", "int", "per", "con"
@apiParam (Body) {Boolean} [collapseChecklist=false] Determines if a checklist will be displayed
@apiParam (Body) {String} [notes] Extra notes
@apiParam (Body) {String} [date] Due date to be shown in task list. Only valid for type "todo."
@apiParam (Body) {Number="0.1","1","1.5","2"} [priority=1] Difficulty, options are 0.1, 1, 1.5, 2; eqivalent of Trivial, Easy, Medium, Hard.
@apiParam (Body) {String[]} [reminders] Array of reminders, each an object that must include: a UUID, startDate and time. For example {"id":"ed427623-9a69-4aac-9852-13deb9c190c3","startDate":"1/16/17","time":"1/16/17" }
@apiParam (Body) {String="weekly","daily"} [frequency=weekly] Value "weekly" enables "On days of the week", value "daily" enables "EveryX Days". Only valid for type "daily".
@apiParam (Body) {String} [repeat=true] List of objects for days of the week, Days that are true will be repeated upon. Only valid for type "daily". Any days not specified will be marked as true. Days are: su, m, t, w, th, f, s. Value of frequency must be "weekly". For example, to skip repeats on Mon and Fri: "repeat":{"f":false,"m":false}
@apiParam (Body) {Number} [everyX=1] Value of frequency must be "daily", the number of days until this daily task is available again.
@apiParam (Body) {Number} [streak=0] Number of days that the task has consecutively been checked off. Only valid for type "daily"
@apiParam (Body) {Date} [startDate] Date when the task will first become available. Only valid for type "daily"
@apiParam (Body) {Boolean} [up=true] Only valid for type "habit" If true, enables the "+" under "Directions/Action" for "Good habits"
@apiParam (Body) {Boolean} [down=true] Only valid for type "habit" If true, enables the "-" under "Directions/Action" for "Bad habits"
@apiParam (Body) {Number} [value=0] Only valid for type "reward." The cost in gold of the reward
@apiSuccess (201) data An object if a single task was created, otherwise an array of tasks
@api {post} /api/v3/tasks/challenge/:challengeId Create a new task belonging to a challenge
@apiParam (Path) {UUID} challengeId The id of the challenge the new task(s) will belong to
@apiParam (Body) {String} text The text to be displayed for the task
@apiParam (Body) {String="habit","daily","todo","reward"} type Task type, options are: "habit", "daily", "todo", "reward".
@apiParam (Body) {String} [alias] Alias to assign to task
@apiParam (Body) {String="str","int","per","con"} [attribute] User's attribute to use, options are: "str", "int", "per", "con"
@apiParam (Body) {Boolean} [collapseChecklist=false] Determines if a checklist will be displayed
@apiParam (Body) {String} [notes] Extra notes
@apiParam (Body) {String} [date] Due date to be shown in task list. Only valid for type "todo."
@apiParam (Body) {Number="0.1","1","1.5","2"} [priority=1] Difficulty, options are 0.1, 1, 1.5, 2; eqivalent of Trivial, Easy, Medium, Hard.
@apiParam (Body) {String[]} [reminders] Array of reminders, each an object that must include: a UUID, startDate and time. For example {"id":"ed427623-9a69-4aac-9852-13deb9c190c3","startDate":"1/16/17","time":"1/16/17" }
@apiParam (Body) {String="weekly","daily"} [frequency=weekly] Value "weekly" enables "On days of the week", value "daily" enables "EveryX Days". Only valid for type "daily".
@apiParam (Body) {String} [repeat=true] List of objects for days of the week, Days that are true will be repeated upon. Only valid for type "daily". Any days not specified will be marked as true. Days are: su, m, t, w, th, f, s. Value of frequency must be "weekly". For example, to skip repeats on Mon and Fri: "repeat":{"f":false,"m":false}
@apiParam (Body) {Number} [everyX=1] Value of frequency must be "daily", the number of days until this daily task is available again.
@apiParam (Body) {Number} [streak=0] Number of days that the task has consecutively been checked off. Only valid for type "daily"
@apiParam (Body) {Date} [startDate] Date when the task will first become available. Only valid for type "daily"
@apiParam (Body) {Boolean} [up=true] Only valid for type "habit" If true, enables the "+" under "Directions/Action" for "Good habits"
@apiParam (Body) {Boolean} [down=true] Only valid for type "habit" If true, enables the "-" under "Directions/Action" for "Bad habits"
@apiParam (Body) {Number} [value=0] Only valid for type "reward." The cost in gold of the reward
@apiSuccess (201) data An object if a single task was created, otherwise an array of tasks
@api {get} /api/v3/tasks/user Get a user's tasks
@apiParam (Query) {String="habits","dailys","todos","rewards","completedTodos"} type Optional query parameter to return just a type of tasks. By default all types will be returned except completed todos that must be requested separately. The "completedTodos" type returns only the 30 most recently completed.
@apiSuccess {Array} data An array of tasks
@api {get} /api/v3/tasks/challenge/:challengeId Get a challenge's tasks
@apiParam (Path) {UUID} challengeId The id of the challenge from which to retrieve the tasks
@apiParam (Query) {String="habits","dailys","todos","rewards"} [type] Query parameter to return just a type of tasks
@apiSuccess {Array} data An array of tasks
@api {get} /api/v3/tasks/:taskId Get a task
@apiParam (Path) {String} taskId The task _id or alias
@apiSuccess {Object} data The task object
@api {put} /api/v3/tasks/:taskId Update a task
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Body) {String} [text] The text to be displayed for the task
@apiParam (Body) {String="str","int","per","con"} [attribute] User's attribute to use, options are: "str", "int", "per", "con"
@apiParam (Body) {Boolean} [collapseChecklist=false] Determines if a checklist will be displayed
@apiParam (Body) {String} [notes] Extra notes
@apiParam (Body) {String} [date] Due date to be shown in task list. Only valid for type "todo."
@apiParam (Body) {Number="0.1","1","1.5","2"} [priority=1] Difficulty, options are 0.1, 1, 1.5, 2; eqivalent of Trivial, Easy, Medium, Hard.
@apiParam (Body) {String[]} [reminders] Array of reminders, each an object that must include: a UUID, startDate and time.
@apiParam (Body) {String="weekly","daily"} [frequency=weekly] Value "weekly" enables "On days of the week", value "daily" enables "EveryX Days". Only valid for type "daily".
@apiParam (Body) {String} [repeat=true] List of objects for days of the week, Days that are true will be repeated upon. Only valid for type "daily". Any days not specified will be marked as true. Days are: su, m, t, w, th, f, s. Value of frequency must be "weekly". For example, to skip repeats on Mon and Fri: "repeat":{"f":false,"m":false}
@apiParam (Body) {Number} [everyX=1] Value of frequency must be "daily", the number of days until this daily task is available again.
@apiParam (Body) {Number} [streak=0] Number of days that the task has consecutively been checked off. Only valid for type "daily"
@apiParam (Body) {Date} [startDate] Date when the task will first become available. Only valid for type "daily"
@apiParam (Body) {Boolean} [up=true] Only valid for type "habit" If true, enables the "+" under "Directions/Action" for "Good habits"
@apiParam (Body) {Boolean} [down=true] Only valid for type "habit" If true, enables the "-" under "Directions/Action" for "Bad habits"
@apiParam (Body) {Number} [value=0] Only valid for type "reward." The cost in gold of the reward
@apiSuccess {Object} data The updated task
@api {post} /api/v3/tasks/:taskId/score/:direction Score a task
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Path) {String="up","down"} direction The direction for scoring the task
@apiParam (Body) {String} scoreNotes Notes explaining the scoring
@apiSuccess {Object} data The user stats
@apiSuccess {Object} data._tmp If an item was dropped it'll be returned in te _tmp object
@apiSuccess {Number} data.delta The delta
@api {post} /api/v3/tasks/:taskId/move/to/:position Move a task to a new position
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Path) {Number} position Where to move the task. 0 = top of the list. -1 = bottom of the list. (-1 means push to bottom). First position is 0
@apiSuccess {Array} data The new tasks order for the specific type that the taskID belongs to.
@api {post} /api/v3/tasks/:taskId/checklist Add an item to the task's checklist
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Body) {String} text The text of the checklist item
@apiSuccess {Object} data The updated task
@api {post} /api/v3/tasks/:taskId/checklist/:itemId/score Score a checklist item
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Path) {UUID} itemId The checklist item _id
@apiSuccess {Object} data The updated task
@api {put} /api/v3/tasks/:taskId/checklist/:itemId Update a checklist item
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Path) {UUID} itemId The checklist item _id
@apiParam (body) {String} text The text that will replace the current checkitem text.
@apiSuccess {Object} data The updated task
@api {delete} /api/v3/tasks/:taskId/checklist/:itemId Delete a checklist item from a task
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Path) {UUID} itemId The checklist item _id
@apiSuccess {Object} data The updated task
@api {post} /api/v3/tasks/:taskId/tags/:tagId Add a tag to a task
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Path) {UUID} tagId The tag id
@apiSuccess {Object} data The updated task
@api {delete} /api/v3/tasks/:taskId/tags/:tagId Delete a tag from a task
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Path) {UUID} tagId The tag id
@apiSuccess {Object} data The updated task
@api {post} /api/v3/tasks/unlink-all/:challengeId Unlink all tasks from a challenge
@apiParam (Path) {UUID} challengeId The challenge _id
@apiParam (Query) {String='keep-all','remove-all'} keep Specifies if tasks should be kept(keep-all) or removed(remove-all) after the unlink
@apiSuccess {Object} data An empty object
@api {post} /api/v3/tasks/unlink-one/:taskId Unlink a challenge task
@apiParam (Path) {String} taskId The task _id or alias
@apiParam (Query) {String='keep','remove'} keep Specifies if the task should be kept(keep) or removed(remove)
@apiSuccess {Object} data An empty object
@api {post} /api/v3/tasks/clearCompletedTodos Delete user's completed todos
@apiSuccess {Object} data An empty object
@api {delete} /api/v3/tasks/:taskId Delete a task given its id
@apiParam (Path) {String} taskId The task _id or alias
@apiSuccess {Object} data An empty object
@api {get} /api/v3/user Get the authenticated user's profile
@apiSuccess {Object} data The user object
@api {get} /api/v3/user/inventory/buy Get the gear items available for purchase for the authenticated user
@api {put} /api/v3/user Update the user
@apiSuccess {Object} data The updated user object, the result is identical to the get user call
@api {delete} /api/v3/user Delete an authenticated user's account
@apiParam (Body) {String} password The user's password if the account uses local authentication
@apiParam (Body) {String} feedback User's optional feedback explaining reasons for deletion
@apiSuccess {Object} data An empty Object
@api {get} /api/v3/user/anonymized Get anonymized user data
@apiSuccess {Object} data.user
@apiSuccess {Object} data.tasks
@api {post} /api/v3/user/class/cast/:spellId Cast a skill (spell) on a target
@apiParam (Path) {String=fireball, mpHeal, earth, frost, smash, defensiveStance, valorousPresence, intimidate, pickPocket, backStab, toolsOfTrade, stealth, heal, protectAura, brightness, healAll} spellId The skill to cast.
@apiParam (Query) {UUID} targetId Query parameter, necessary if the spell is cast on a party member or task. Not used if the spell is case on the user or the user's current party.
@apiSuccess data Will return the modified targets. For party members only the necessary fields will be populated. The user is always returned.
@api {post} /api/v3/user/sleep Make the user start / stop sleeping (resting in the Inn)
@apiSuccess {boolean} data user.preferences.sleep
@api {post} /api/v3/user/allocate Allocate a single attribute point
@apiParam (Body) {String="str","con","int","per"} stat Query parameter - Default ='str'
@apiSuccess {Object} data Returns stats from the user profile
@api {post} /api/v3/user/allocate-now Allocate all attribute points
@apiSuccess {Object} data user.stats
@api {post} /api/v3/user/buy/:key Buy gear, armoire or potion
@apiParam (Path) {String} key The item to buy
@apiSuccess data User's data profile
@apiSuccess message Item purchased
@api {post} /api/v3/user/buy-gear/:key Buy a piece of gear
@apiParam (Path) {String} key The item to buy
@apiSuccess {Object} data.items User's item inventory
@apiSuccess {Object} data.flags User's flags
@apiSuccess {Object} data.achievements User's achievements
@apiSuccess {Object} data.stats User's current stats
@apiSuccess {String} message Success message, item purchased
@api {post} /api/v3/user/buy-armoire Buy an armoire item
@apiSuccess {Object} data.items User's item inventory
@apiSuccess {Object} data.flags User's flags
@apiSuccess {Object} data.armoire Item given by the armoire
@apiSuccess {String} message Success message
@api {post} /api/v3/user/buy-health-potion Buy a health potion
@apiSuccess {Object} data User's current stats
@apiSuccess {String} message Success message
@api {post} /api/v3/user/buy-mystery-set/:key Buy a mystery set
@apiParam (Path) {String} key The mystery set to buy
@apiSuccess {Object} data.items user.items
@apiSuccess {Object} data.purchasedPlanConsecutive user.purchased.plan.consecutive
@apiSuccess {String} message Success message
@api {post} /api/v3/user/buy-quest/:key Buy a quest with gold
@apiParam (Path) {String} key The quest scroll to buy
@apiSuccess {Object} data.quests User's quest list
@apiSuccess {String} message Success message
@api {post} /api/v3/user/buy-special-spell/:key Buy special "spell" item
@apiParam (Path) {String} key The special item to buy. Must be one of the keys from "content.special", such as birthday, snowball, salt.
@apiSuccess {Object} data.stats User's current stats
@apiSuccess {Object} data.items User's current inventory
@apiSuccess {String} message Success message
@api {post} /api/v3/user/hatch/:egg/:hatchingPotion Hatch a pet
@apiParam (Path) {String} egg The egg to use
@apiParam (Path) {String} hatchingPotion The hatching potion to use
@apiSuccess {Object} data user.items
@apiSuccess {String} message
@api {post} /api/v3/user/equip/:type/:key Equip an item
@apiParam (Path) {String="mount","pet","costume","equipped"} type The type of item to equip
@apiParam (Path) {String} key The item to equip
@apiSuccess {Object} data user.items
@apiSuccess {String} message Optional success message for unequipping an items
@api {post} /api/v3/user/feed/:pet/:food Feed a pet
@apiParam (Path) {String} pet
@apiParam (Path) {String} food
@apiSuccess {Number} data The pet value
@apiSuccess {String} message Success message
@api {post} /api/v3/user/change-class Change class
@apiParam (Query) {String} class Query parameter - ?class={warrior|rogue|wizard|healer}
@apiSuccess {Object} data.flags user.flags
@apiSuccess {Object} data.stats user.stats
@apiSuccess {Object} data.preferences user.preferences
@apiSuccess {Object} data.items user.items
@api {post} /api/v3/user/disable-classes Disable classes
@apiSuccess {Object} data.flags user.flags
@apiSuccess {Object} data.stats user.stats
@apiSuccess {Object} data.preferences user.preferences
@api {post} /api/v3/user/purchase/:type/:key Purchase Gem or Gem-purchasable item
@apiParam (Path) {String="gems","eggs","hatchingPotions","premiumHatchingPotions",food","quests","gear"} type Type of item to purchase.
@apiParam (Path) {String} key Item's key (use "gem" for purchasing gems)
@apiSuccess {Object} data.items user.items
@apiSuccess {Number} data.balance user.balance
@apiSuccess {String} message Success message
@api {post} /api/v3/user/purchase-hourglass/:type/:key Purchase Hourglass-purchasable item
@apiParam (Path) {String="pets","mounts"} type The type of item to purchase
@apiParam (Path) {String} key Ex: {Phoenix-Base}. The key for the mount/pet
@apiSuccess {Object} data.items user.items
@apiSuccess {Object} data.purchasedPlanConsecutive user.purchased.plan.consecutive
@apiSuccess {String} message Success message
@api {post} /api/v3/user/read-card/:cardType Read a card
@apiParam (Path) {String} cardType Type of card to read (e.g. - birthday, greeting, nye, thankyou, valentine)
@apiSuccess {Object} data.specialItems user.items.special
@apiSuccess {Boolean} data.cardReceived user.flags.cardReceived
@apiSuccess {String} message Success message
@api {post} /api/v3/user/open-mystery-item Open the Mystery Item box
@apiSuccess {Object} data The item obtained
@apiSuccess {String} message Success message
@api {post} /api/v3/user/release-pets Release pets
@apiSuccess {Object} data.items `user.items.pets`
@apiSuccess {String} message Success message
@api {post} /api/v3/user/release-both Release pets and mounts and grants Triad Bingo
@apiSuccess {Object} data.achievements
@apiSuccess {Object} data.items
@apiSuccess {Number} data.balance
@apiSuccess {String} message Success message
@api {post} /api/v3/user/release-mounts Release mounts
@apiSuccess {Object} data user.items.mounts
@apiSuccess {String} message Success message
@api {post} /api/v3/user/sell/:type/:key Sell a gold-sellable item owned by the user
@apiParam (Path) {String="eggs","hatchingPotions","food"} type The type of item to sell.
@apiParam (Path) {String} key The key of the item
@apiParam (Query) {Number} (optional) amount The amount to sell
@apiSuccess {Object} data.stats
@apiSuccess {Object} data.items
@api {post} /api/v3/user/unlock Unlock item or set of items by purchase
@apiParam (Query) {String} path Full path to unlock. See "content" API call for list of items.
@apiSuccess {Object} data.purchased
@apiSuccess {Object} data.items
@apiSuccess {Object} data.preferences
@apiSuccess {String} message "Items have been unlocked"
@api {post} /api/v3/user/revive Revive user from death
@apiSuccess {Object} data user.items
@apiSuccess {String} message Success message
@api {post} /api/v3/user/rebirth Use Orb of Rebirth on user
@apiSuccess {Object} data.user
@apiSuccess {Array} data.tasks User's modified tasks (no rewards)
@apiSuccess {String} message Success message
@api {post} /api/v3/user/block/:uuid Block / unblock a user from sending you a PM
@apiParam (Path) {UUID} uuid The uuid of the user to block / unblock
@apiSuccess {Array} data user.inbox.blocks
@api {delete} /api/v3/user/messages/:id Delete a message
@apiParam (Path) {UUID} id The id of the message to delete
@apiSuccess {Object} data user.inbox.messages
@api {delete} /api/v3/user/messages Delete all messages
@apiSuccess {Object} data user.inbox.messages which should be empty
@api {post} /api/v3/user/mark-pms-read Marks Private Messages as read
@apiSuccess {Object} data user.inbox.messages
@api {post} /api/v3/user/reroll Reroll a user using the Fortify Potion
@apiSuccess {Object} data.user
@apiSuccess {Object} data.tasks User's modified tasks (no rewards)
@apiSuccess {Object} message Success message
@api {post} /api/v3/user/reset Reset user
@apiSuccess {Object} data.user
@apiSuccess {Array} data.tasksToRemove IDs of removed tasks
@apiSuccess {String} message Success message
@api {post} /api/v3/user/custom-day-start Set preferences.dayStart for user
@apiParam (Body) {number} [dayStart=0] The hour number 0-23 for day to begin. If body is not included, will default to 0.
@apiSuccess {Object} data An empty Object
@apiSuccess {String} message Success message
@api {post} /api/v3/user/webhook Create a new webhook - BETA
@apiParam (Body) {UUID} [id="Randomly Generated UUID"] The webhook's id
@apiParam (Body) {String} url The webhook's URL
@apiParam (Body) {String} [label] A label to remind you what this webhook does
@apiParam (Body) {Boolean} [enabled=true] If the webhook should be enabled
@apiParam (Body) {Sring="taskActivity","groupChatReceived"} [type="taskActivity"] The webhook's type.
@apiParam (Body) {Object} [options] The webhook's options. Wil differ depending on type. Required for `groupChatReceived` type. If a webhook supports options, the default values are displayed in the examples below
@apiSuccess (201) {Object} data The created webhook
@apiSuccess (201) {UUID} data.id The uuid of the webhook
@apiSuccess (201) {String} data.url The url of the webhook
@apiSuccess (201) {String} data.label A label for you to keep track of what this webhooks is for
@apiSuccess (201) {Boolean} data.enabled Whether the webhook should be sent
@apiSuccess (201) {String} data.type The type of the webhook
@apiSuccess (201) {Object} data.options The options for the webhook (See examples)
@api {put} /api/v3/user/webhook/:id Edit a webhook - BETA
@apiParam (Path) {UUID} id URL parameter - The id of the webhook to update
@apiParam (Body) {String} [url] The webhook's URL
@apiParam (Body) {String} [label] A label to remind you what this webhook does
@apiParam (Body) {Boolean} [enabled] If the webhook should be enabled
@apiParam (Body) {Sring="taskActivity","groupChatReceived"} [type] The webhook's type.
@apiParam (Body) {Object} [options] The webhook's options. Wil differ depending on type. The options are enumerated in the [add webhook examples](#api-Webhook-UserAddWebhook).
@apiSuccess {Object} data The updated webhook
@apiSuccess {UUID} data.id The uuid of the webhook
@apiSuccess {String} data.url The url of the webhook
@apiSuccess {String} data.label A label for you to keep track of what this webhooks is for
@apiSuccess {Boolean} data.enabled Whether the webhook should be sent
@apiSuccess {String} data.type The type of the webhook
@apiSuccess {Object} data.options The options for the webhook (See webhook add examples)
@api {delete} /api/v3/user/webhook/:id Delete a webhook - BETA
@apiParam (Path) {UUID} id The id of the webhook to delete
@apiSuccess {Array} data The remaining webhooks for the user
@api {post} /api/v3/tasks/group/:groupId Create a new task belonging to a group
@apiParam (Path) {UUID} groupId The id of the group the new task(s) will belong to
@apiSuccess data An object if a single task was created, otherwise an array of tasks
@api {get} /api/v3/tasks/group/:groupId Get a group's tasks
@apiParam (Path) {UUID} groupId The id of the group from which to retrieve the tasks
@apiParam (Query) {string="habits","dailys","todos","rewards"} [type] Query parameter to return just a type of tasks
@apiSuccess {Array} data An array of tasks
@api {post} /api/v3/group/:groupId/tasks/:taskId/move/to/:position Move a group task to a specified position
@apiParam (Path) {String} taskId The task _id
@apiParam (Path) {Number} position Where to move the task (-1 means push to bottom). First position is 0
@apiSuccess {Array} data The new tasks order (group.tasksOrder.{task.type}s)
@api {post} /api/v3/tasks/:taskId/assign/:assignedUserId Assign a group task to a user
@apiParam (Path) {UUID} taskId The id of the task that will be assigned
@apiParam (Path) {UUID} assignedUserId The id of the user that will be assigned to the task
@apiSuccess data An object if a single task was created, otherwise an array of tasks
@api {post} /api/v3/tasks/:taskId/unassign/:assignedUserId Unassign a user from a task
@apiParam (Path) {UUID} taskId The id of the task that will be assigned
@apiParam (Path) {UUID} assignedUserId The id of the user that will be unassigned from the task
@apiSuccess data An object if a single task was created, otherwise an array of tasks
@api {post} /api/v3/tasks/:taskId/approve/:userId Approve a user's task
@apiParam (Path) {UUID} taskId The id of the task that is the original group task
@apiParam (Path) {UUID} userId The id of the user that will be approved
@apiSuccess task The approved task
@api {get} /api/v3/approvals/group/:groupId Get a group's approvals
@apiParam (Path) {UUID} groupId The id of the group from which to retrieve the approvals
@apiSuccess {Array} data An array of tasks
