POST/user/authenticateAPI key only
On success, returns the member object (200) and the user token in the X-VDM-Api-Token response header: send that header with your next requests. Returns 401 if the credentials are missing or wrong, or if the account is banned.
loginrequiredpasswordrequiredcurl -X POST "https://www.fmylife.com/api/v2/user/authenticate" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "login=…" \
--data-urlencode "password=…"{
"data": {
"id": 1079692805,
"fbid": 0,
"twid": 0,
"dateEntry": "2026-10-30T08:55:02+01:00",
"dateUpdate": "2026-10-30T08:55:02+01:00",
"status": 0,
"role": [
"ROLE_USER"
],
"username": "DocsTester",
"email": "[email protected]",
"city": "Paris",
"area": null,
"country": null,
"timezone": null,
"birthday": null,
"origin": 0,
"bio": null,
"source": "site",
"relation": null,
"title": null,
"site": 2,
"oldIDVDM": null,
"oldIDFML": null,
"avatar": null,
"metrics": null,
"signature": null
},
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"error": "103 - Invalid login credentials."
}POST/user/refreshtokenAPI key only
Send the expired token in the X-VDM-Api-Token header along with secret. The old token is deleted; the new one comes back in the X-VDM-Api-Token response header, with the member object (200). Returns 401 on failure.
secretrequiredmd5(id . username))curl -X POST "https://www.fmylife.com/api/v2/user/refreshtoken" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "secret=…"{
"data": {
"id": 2321654987,
"fbid": 0,
"twid": 0,
"dateEntry": "2016-09-16 08:00:18",
"dateUpdate": "2016-09-16 08:00:18",
"status": 1,
"role": {
"0": "ROLE_ADMIN"
},
"username": "admin",
"email": "[email protected]",
"city": null,
"area": null,
"country": null,
"timezone": "Africa/Harare",
"birthday": "1997-11-23",
"origin": 1,
"bio": "Reiciendis sint sunt eum id tempora rerum occaecati corrupti.",
"source": "cowroker",
"relation": "couple",
"title": "mr",
"site": 1
},
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "9 - Missing parameter."
}GET/user/logoutMember token required
Deletes the user token sent in X-VDM-Api-Token. Returns anonymous on success, 401 if the token is invalid.
No parameters.
curl "https://www.fmylife.com/api/v2/user/logout" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": "anonymous",
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
400
{
"error":"100 - You must be authenticated in order to access this function."
}401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}GET/user/searchAPI key only
Returns {"isValid": true} when no account uses the value, else isValid: false with an error message. For an email, the domain is checked too. Returns 400 if search or value is missing or invalid.
searchrequiredusername or emailvaluerequiredcurl "https://www.fmylife.com/api/v2/user/search" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": {
"isValid": true
},
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
GET/user/{userid}/optionsMember token required
Returns the member's notification, newsletter and privacy options, as set with /user/{userid}/moreinfos. Requires a user token.
useridrequiredin the pathformat \d+curl "https://www.fmylife.com/api/v2/user/{userid}/options" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"user_id": 1079692805,
"nl_weekly": true,
"nl_monthly": false,
"nl_daily": false,
"al_comment": false,
"al_message": false,
"hide_profile": false,
"show_activity": true,
"show_receipt": true,
"optin_vdm": true,
"optin_partners": true,
"activity_on_timeline": true,
"hide_illustrations": false,
"user_content_types_filters": []
},
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"data": "You must be authenticated in order to access this function.",
"meta": {},
"badge": [],
"badge_display": []
}POST/userAPI key only
Returns the new member (201) and logs them in: the user token is in the X-VDM-Api-Token response header. Avatar image files can be sent in the same multipart request. Returns 400 if the username or email is already taken, the email is invalid, or the passwords don't match.
usernamerequiredemailrequiredpasswordrequiredconfirm_passwordrequiredcurl -X POST "https://www.fmylife.com/api/v2/user" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "username=…" \
--data-urlencode "email=…" \
--data-urlencode "password=…" \
--data-urlencode "confirm_password=…"{
"data": {
"id": 50467299,
"fbid": 0,
"twid": 0,
"dateEntry": {
"date": "2016-09-16 10:28:19.000000",
"timezone_type": 3,
"timezone": "UTC"
},
"dateUpdate": null,
"status": 0,
"role": {
"0": "ROLE_USER"
},
"username": "test",
"email": "[email protected]",
"city": null,
"area": null,
"country": null,
"timezone": null,
"birthday": null,
"origin": "api",
"bio": null,
"source": "site",
"relation": null,
"title": "mr",
"site": 3
},
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}400
{
"error": "This username is already associated with an account."
}400
{
"error": "This email is already associated with an account."
}400
{
"error": "This email is not valid."
}400
{
"error": "Field confirm_password is missing."
}400
{
"error": "The password fields must match."
}POST/user/{userid}/avatarMember token required
Send the images as multipart files. Maximum size: 25 MB per file. Returns the avatars (202). Only for your own account (admins can act on any account), 403 otherwise.
useridrequiredin the pathformat \d+img_1requiredimg_2optionalimg_3optionalcurl -X POST "https://www.fmylife.com/api/v2/user/{userid}/avatar" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "img_1=…"{
"data": {
"img_1": {
"url": "/img/4a081d3b5c2a14e9f38471d80202df34.jpeg/avatar_small/img_users",
"id": 5,
"name": "4a081d3b5c2a14e9f38471d80202df34.jpeg"
},
"img_2": {
"url": "/images/default-avatar.jpg",
"id": ""
},
"img_3": {
"url": "/images/default-avatar.jpg",
"id": ""
}
},
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}404
{
"error": "404 - This user not found."
}400
{
"error": "400 - The file is too large. Allowed maximum size is 1 MB."
}PUT/user/{userid}/moreinfosMember token required
Only the fields you send are changed. Each option takes 1 (on) or 0 (off). Returns the updated options (202). Only for your own account (admins can act on any account), 403 otherwise. Read them back with /user/{userid}/options.
useridrequiredin the pathformat \d+optin_vdmoptional1 or 0, optional — receive news from the siteoptin_partnersoptional1 or 0, optional — receive promotional offers from partnersnl_weeklyoptional1 or 0, optional — subscribe to the weekly newsletteral_commentoptional1 or 0, optional — get notified when a comment is posted on a story you followal_messageoptional1 or 0, optional — get notified of new private messagesnl_dailyoptional1 or 0, optional — subscribe to the daily newsletterhide_profileoptional1 or 0, optional — hide my profileshow_activityoptional1 or 0, optional — show my activityactivity_on_timelineoptional1 or 0, optional — publish my activity on my timelineshow_receiptoptional1 or 0, optional — send read receiptsuser_content_types_filtersoptional/article/type/list); an empty value leaves the current filter unchangedcurl -X PUT "https://www.fmylife.com/api/v2/user/{userid}/moreinfos" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"user_id": 1079692805,
"nl_weekly": true,
"nl_monthly": false,
"nl_daily": false,
"al_comment": false,
"al_message": false,
"hide_profile": false,
"show_activity": true,
"show_receipt": true,
"optin_vdm": true,
"optin_partners": true,
"activity_on_timeline": true,
"hide_illustrations": false,
"user_content_types_filters": []
},
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"data": "You must be authenticated in order to access this function.",
"meta": {},
"badge": [],
"badge_display": []
}DELETE/user/{userid}Member token required
Doesn't delete the account right away: emails the member a link to confirm the deletion. Returns 204. Only for your own account (admins can act on any account), 403 otherwise.
useridrequiredin the pathformat \d+curl -X DELETE "https://www.fmylife.com/api/v2/user/{userid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"response": "The procedure was performed"
},
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}404
{
"error": "404 - This user not found."
}POST/user/likeMember token required
Requires a user token: the liker is always the authenticated member, who can't like themselves (401). Returns the liked member's new like count, number_of_likes (202), or 208 if you already liked them. The liked member is notified.
useridrequireduser_likedrequiredcurl -X POST "https://www.fmylife.com/api/v2/user/like" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "userid=…" \
--data-urlencode "user_liked=…"{
"data": {
"number_of_likes": xx
},
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}208
{
"error": "208 - You have already liked this user."
}POST/user/connect/facebookAPI key only
This endpoint is disabled: it always returns 400. Use /user/authenticate.
idrequirednamerequiredemailrequiredgenderoptionalbirthdayoptionallocationoptionalpictureoptionalcurl -X POST "https://www.fmylife.com/api/v2/user/connect/facebook" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "id=…" \
--data-urlencode "name=…" \
--data-urlencode "email=…"{
"data": "Missing datas for facebook connect",
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
POST/user/connect/twitterAPI key only
This endpoint is disabled: it always returns 400. Use /user/authenticate.
idrequirednamerequiredemailrequireddescriptionoptionalprofile_image_urloptionalcurl -X POST "https://www.fmylife.com/api/v2/user/connect/twitter" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "id=…" \
--data-urlencode "name=…" \
--data-urlencode "email=…"{
"data": "Missing datas for twitter connect",
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
POST/user/resetpasswordAPI key only
If an account uses this email, sends it a link to choose a new password; the current password keeps working until then. Returns 200 for any valid email, whether an account uses it or not, and 400 if the email is invalid.
emailrequiredcurl -X POST "https://www.fmylife.com/api/v2/user/resetpassword" \
-H "X-VDM-Api-Key: $API_KEY" \
--data-urlencode "email=…"{
"data": "User's password has been reset",
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
PUT/user/edit/password/{userid}Member token required
Returns 202 on success, 400 if confirm_password is missing or doesn't match, 403 if current_password is missing or wrong. The member's other sessions (their other tokens) are signed out; the request's token stays valid. Only for your own account (an admin can act on any account without current_password), 403 otherwise.
useridrequiredin the pathformat \d+current_passwordrequiredpasswordrequiredconfirm_passwordrequiredcurl -X PUT "https://www.fmylife.com/api/v2/user/edit/password/{userid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "current_password=…" \
--data-urlencode "password=…" \
--data-urlencode "confirm_password=…"{
"data": "User's password has been updated",
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}400
{
"error": "16 - Field confirm_password is missing."
}400
{
"error": "17 - The password fields must match."
}PUT/user/edit/email/{userid}Member token required
The account goes back to pending until the member clicks the confirmation link sent to the new address. Returns 202 on success, 400 if the email is taken or invalid, 403 if current_password is missing or wrong. Only for your own account (an admin can act on any account without current_password), 403 otherwise.
useridrequiredin the pathformat \d+current_passwordrequiredemailrequiredcurl -X PUT "https://www.fmylife.com/api/v2/user/edit/email/{userid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "current_password=…" \
--data-urlencode "email=…"{
"data": "User's email has been updated",
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}400
{
"error": "12 - This email is already associated with an account."
}400
{
"error": "13 - This email is not valid."
}GET/user/uniqidAPI key only
Returns {"uniqid": …}, a random integer that identifies an anonymous device. Send it in the X-VDM-Uniqid header so that votes, smileys and moderation are recorded without an account.
No parameters.
curl "https://www.fmylife.com/api/v2/user/uniqid" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": {
"uniqid": 1237550485
},
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
PUT/user/{userid}/profileMember token required
Only the fields sent are changed: title, birthday, city, relation, bio, plus area, country, countrycode, timezone and source; other fields are ignored (email and password have their own endpoints). Returns the updated member (202), or 400 if the bio is too long. Only for your own account (an admin can act on any account), 403 otherwise.
useridrequiredin the pathformat \d+titleoptionalmr, mrs or missbirthdayoptionalYYYY-MM-DD or ISO 8601cityoptionalrelationoptionalsingle, couple or complicatedbiooptionalcurl -X PUT "https://www.fmylife.com/api/v2/user/{userid}/profile" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"id": 1079692805,
"fbid": 0,
"twid": 0,
"dateEntry": "2026-10-30T08:55:02+01:00",
"dateUpdate": "2026-10-30T08:55:02+01:00",
"status": 0,
"role": [
"ROLE_USER"
],
"username": "DocsTester",
"email": "[email protected]",
"city": "Paris",
"area": null,
"country": null,
"timezone": null,
"birthday": null,
"origin": 0,
"bio": null,
"source": "site",
"relation": null,
"title": null,
"site": 2,
"oldIDVDM": null,
"oldIDFML": null,
"avatar": null,
"metrics": null,
"signature": null
},
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"data": "You must be authenticated in order to access this function.",
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/memberAPI key only
Returns the member (public fields, except for yourself and admins), their three avatars, their profile visibility and their metrics. With X-VDM-Uniqid, the visit is counted. 404 if the member doesn't exist.
useridrequiredin the pathformat \d+badges:
status: 0 => progress | 1 => acquired
category: 1 => bronze | 2 => silver | 3 => goldcurl "https://www.fmylife.com/api/v2/user/{userid}/member" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": {
"user": {
"id": 1079692805,
"dateEntry": "2026-10-30T08:55:02+01:00",
"status": 0,
"username": "DocsTester",
"city": "Paris",
"country": null,
"bio": null,
"relation": null,
"title": null,
"site": 2,
"avatar": null,
"metrics": null,
"signature": null
},
"avatar_1": null,
"avatar_2": null,
"avatar_3": null,
"profile_visibility": false,
"number_of_visits": 3,
"number_of_likes": 0,
"number_of_friends": 0,
"number_of_followers": 0,
"number_of_comment": 0,
"number_of_favorite": 0,
"number_of_article": 0,
"number_of_badge": 3
},
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
GET/user/{userid}/profileMember token required
Requires a user token. Like /user/{userid}/member, plus the number of visits, likes and friends; the visit is counted for the signed-in member. 404 if the member doesn't exist.
useridrequiredin the pathformat \d+badges:
status: 0 => progress | 1 => acquired
category: 1 => bronze | 2 => silver | 3 => goldcurl "https://www.fmylife.com/api/v2/user/{userid}/profile" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": {
"user": {
"id": 1079692805,
"fbid": 0,
"twid": 0,
"dateEntry": "2026-10-30T08:55:02+01:00",
"dateUpdate": "2026-10-30T08:55:02+01:00",
"status": 0,
"role": [
"ROLE_USER"
],
"username": "DocsTester",
"email": "[email protected]",
"city": "Paris",
"area": null,
"country": null,
"timezone": null,
"birthday": null,
"origin": 0,
"bio": null,
"source": "site",
"relation": null,
"title": null,
"site": 2,
"oldIDVDM": null,
"oldIDFML": null,
"avatar": null,
"metrics": null,
"signature": null
},
"avatar_1": null,
"avatar_2": null,
"avatar_3": null,
"profile_visibility": false,
"number_of_visits": 3,
"number_of_likes": 0,
"number_of_friends": 0,
"number_of_followers": 0,
"number_of_comment": 0,
"number_of_favorite": 0,
"number_of_article": 0,
"number_of_badge": 3,
"metrics": {
"isFollowed": false,
"isBlocked": false,
"isLike": false
}
},
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"data": "You must be authenticated in order to access this function.",
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/visitsAPI key only
Paginated: meta gives page, per_page, page_count and total_count. Most recent visits first by default.
useridrequiredin the pathformat \d+pageoptionalpage[number] (page number, default 1) and page[bypage] (items per page, default 30)orderbyoptionalorderby[date]=DESC — sort order, as orderby[field]=ASC|DESCcurl "https://www.fmylife.com/api/v2/user/{userid}/visits" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": [],
"meta": {
"page": 1,
"per_page": 30,
"page_count": 0,
"total_count": 0
},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
GET/user/{userid}/likesAPI key only
Paginated: meta gives page, per_page, page_count and total_count. Most recent likes first by default.
useridrequiredin the pathformat \d+pageoptionalpage[number] (page number, default 1) and page[bypage] (items per page, default 30)orderbyoptionalorderby[date]=DESC — sort order, as orderby[field]=ASC|DESCcurl "https://www.fmylife.com/api/v2/user/{userid}/likes" \
-H "X-VDM-Api-Key: $API_KEY"{
"data": [],
"meta": {
"page": 1,
"per_page": 30,
"page_count": 0,
"total_count": 0
},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
DELETE/user/avatar/{userid}/{imageid}Member token required
Returns 200 on success, 404 if the member or image doesn't exist. Only for your own account (admins can act on any account), 403 otherwise.
useridrequiredin the pathformat \d+imageidrequiredin the pathformat \d+{imageid}) — id of the image to deletecurl -X DELETE "https://www.fmylife.com/api/v2/user/avatar/{userid}/{imageid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": "User's avatar has been deleted",
"meta": {}
}
With attribute /all
{
"data": "All user's avatar has been deleted",
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}404
{
"error": "10 - This user not found."
}404
{
"error": "27 - Image not found."
}DELETE/user/avatar/{userid}/allMember token required
Returns 200 on success. Only for your own account (admins can act on any account), 403 otherwise.
useridrequiredin the pathformat \d+curl -X DELETE "https://www.fmylife.com/api/v2/user/avatar/{userid}/all" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": "All user's avatar has been deleted",
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}404
{
"error": "10 - This user not found."
}404
{
"error": "27 - Image not found."
}PATCH/user/avatar/{userid}Member token required
Send the image ids in the order you want them displayed. Returns 200. Only for your own account (admins can act on any account), 403 otherwise.
useridrequiredin the pathformat \d+img_1requiredimg_2requiredimg_3requiredcurl -X PATCH "https://www.fmylife.com/api/v2/user/avatar/{userid}" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN" \
--data-urlencode "img_1=…" \
--data-urlencode "img_2=…" \
--data-urlencode "img_3=…"{
"data": "User's avatar have been updated",
"meta": {}
}Example from the original docs: values are made up and some fields may have changed.
401
{
"error": "102 - Invalid API key."
}401
{
"error": "104 - Invalid or expired API token."
}401
{
"error": "100 - You must be authenticated in order to access this function."
}404
{
"error": "10 - This user not found."
}GET/user/{userid}/badgesMember token required
Requires a user token. Returns 404 if the member doesn't exist.
useridrequiredin the pathformat \d+status: 0 => progress | 1 => acquired
category: 1 => bronze | 2 => silver | 3 => goldcurl "https://www.fmylife.com/api/v2/user/{userid}/badges" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": [
{
"user": 1079692805,
"id": 31,
"status": 1,
"progression": 1,
"data": "",
"stamp": "2026-10-30T08:56:01+01:00",
"site": null,
"name": "Invader",
"description": "You were outside of France when you submitted this FML",
"hidden": "0",
"goal": 1,
"limited": "0",
"category": 2,
"total": 58801,
"illustration": "31.gif"
},
{
"user": 1079692805,
"id": 17,
"status": 1,
"progression": 1,
"data": "",
"stamp": "2026-10-30T08:56:01+01:00",
"site": null,
"name": "Perfectionist",
"description": "Editing your comments can help you avoid embarrassment, and it might make you seem smarter.",
"hidden": "0",
"goal": 1,
"limited": "0",
"category": 1,
"total": 33966,
"illustration": "17.gif"
}
],
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"data": [
"You must be authenticated in order to access this function."
],
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/articlesMember token required
Requires a user token. For your own account, your stories in every status except deleted (including pending and refused ones); for another member, their published stories only. With keywords, metrics, images, paragraphs and videos. Not paginated.
useridrequiredin the pathformat \d+status: 0 => new | 1 => rejected | 2 => promoted | 3 => refused | 4 => validated | 5 => private | 6 => autopilot | 7 => deleted | 8 => scheduled | 9 => tocheck
type: 1 => classic | 3 => photo | 4 => histo | 5 => world | 6 => confession | 7 => illustrated | 9 => news | 10 => video
genders: 1 => male | 2 => female
layout: 1 => teaching | 2 => layout2 | 3 => layout3
flag: 1 => popular | 2 => coupdecoeur
usermetrics:
smiley: 1 => amusing | 2 => funny | 3 => weird | 4 => hilariouscurl "https://www.fmylife.com/api/v2/user/{userid}/articles" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": [
{
"id": 518674,
"status": 11,
"type": 1,
"spicy": false,
"optin": false,
"socialTruncate": false,
"title": null,
"content": "Today, I tested the API for an hour before noticing I had swapped my key and my token. FML",
"content_hidden": "Today, I tested the API for an hour before noticing I had swapped my key and my token. FML",
"created": "2026-10-30T08:56:41+01:00",
"updated": "2026-10-30T08:56:41+01:00",
"published": "2026-10-30T08:56:41+01:00",
"user": 1079692805,
"author": "DocsTester",
"gender": null,
"layout": 0,
"flag": 0,
"origin": "api",
"apikey": "{{apikey}}",
"vote": 1,
"site": 2,
"siteorig": null,
"slug": "today-i-tested-the-api-for-an-hour-before-noticing-i-had-swapped-my-key-and-my-token-fml",
"bitly": null,
"metrics": {
"article": 518674,
"comment": 0,
"favorite": 0,
"reports": 1,
"mod_positive": 0,
"mod_negative": 0,
"votes_up": 0,
"votes_down": 0,
"smiley_amusing": 0,
"smiley_funny": 0,
"smiley_weird": 0,
"smiley_hilarious": 0
},
"usermetrics": {
"favorite": false,
"smiley": null,
"votes": null
},
"keywords": [],
"images": [],
"videos": [],
"openview": 0,
"url": null,
"suggested": null,
"paragraphs": []
},
{
"id": 518673,
"status": 0,
"type": 1,
"spicy": false,
"optin": false,
"socialTruncate": false,
"title": null,
"content": "Today, I tested the API for an hour before noticing I had swapped my key and my token. FML",
"content_hidden": "Today, I tested the API for an hour before noticing I had swapped my key and my token. FML",
"created": "2026-10-30T08:56:01+01:00",
"updated": "2026-10-30T08:56:09+01:00",
"published": "2026-10-30T08:56:01+01:00",
"user": 1079692805,
"author": "DocsTester",
"gender": null,
"layout": 0,
"flag": 0,
"origin": "api",
"apikey": "{{apikey}}",
"vote": 1,
"site": 2,
"siteorig": null,
"slug": "today-i-tested-the-api-for-an-hour-before-noticing-i-had-swapped-my-key-and-my-token-fml",
"bitly": null,
"metrics": {
"article": 518673,
"comment": 0,
"favorite": 0,
"reports": 1,
"mod_positive": 0,
"mod_negative": 0,
"votes_up": 0,
"votes_down": 0,
"smiley_amusing": 0,
"smiley_funny": 0,
"smiley_weird": 0,
"smiley_hilarious": 0
},
"usermetrics": {
"favorite": false,
"smiley": null,
"votes": null
},
"keywords": [],
"images": [],
"videos": [],
"openview": 0,
"url": null,
"suggested": null,
"paragraphs": []
}
],
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"data": [
"You must be authenticated in order to access this function."
],
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/favoritesMember token required
Requires a user token. Paginated (meta). Each story includes your own votes, smileys and favorite status.
useridrequiredin the pathformat \d+pageoptionalpage[number] (page number, default 1) and page[bypage] (items per page, default 30)status: 0 => new | 1 => rejected | 2 => promoted | 3 => refused | 4 => validated | 5 => private | 6 => autopilot | 7 => deleted | 8 => scheduled | 9 => tocheck
type: 1 => classic | 2 => blog | 3 => photo | 4 => histo | 5 => world | 6 => confession | 7 => illustrated | 9 => news | 10 => video
genders: 1 => male | 2 => female
layout: 1 => teaching | 2 => layout2 | 3 => layout3
flag: 1 => popular | 2 => coupdecoeur
usermetrics:
smiley: 1 => amusing | 2 => funny | 3 => weird | 4 => hilariouscurl "https://www.fmylife.com/api/v2/user/{userid}/favorites" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": [],
"meta": {
"page": 1,
"per_page": 30,
"page_count": 0,
"total_count": 0
},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"data": [
"You must be authenticated in order to access this function."
],
"meta": {},
"badge": [],
"badge_display": []
}GET/user/{userid}/commentsMember token required
Requires a user token. Returns the member's top-level comments (not their replies to other comments), each with its replies. Not paginated.
useridrequiredin the pathformat \d+status: 0 => default | 1 => highlighted | 2 => nuked | 3 => confession | 4 => deleted
curl "https://www.fmylife.com/api/v2/user/{userid}/comments" \
-H "X-VDM-Api-Key: $API_KEY" \
-H "X-VDM-Api-Token: $TOKEN"{
"data": [
{
"id": 176,
"date": "2026-10-30T08:56:01+01:00",
"status": 0,
"parent": 0,
"content": "Same thing happened to me last week, you're not alone!",
"article": 6,
"author": {
"id": 1079692805,
"username": "DocsTester",
"avatar": "/images/default-avatar.jpg",
"title": null
},
"thumbup": 0,
"thumbdown": 2,
"userthumbed": 1,
"report": 1,
"isModerator": false,
"replies": null
},
{
"id": 177,
"date": "2026-10-30T08:56:41+01:00",
"status": 0,
"parent": 0,
"content": "Same thing happened to me last week, you're not alone!",
"article": 6,
"author": {
"id": 1079692805,
"username": "DocsTester",
"avatar": "/images/default-avatar.jpg",
"title": null
},
"thumbup": 0,
"thumbdown": 0,
"userthumbed": 0,
"report": 0,
"isModerator": false,
"replies": null
}
],
"meta": {},
"badge": [],
"badge_display": []
}A real API response, on test data. Lists are cut to 2 items.
401
{
"data": [
"You must be authenticated in order to access this function."
],
"meta": {},
"badge": [],
"badge_display": []
}