API Documentation
Multi-factor authentication ¶
Overview
MFA is an opt-in feature, allowing users to set it up in their account settings. Once MFA is activated, MFA will be required when making certain API requests, such as changing the password.
-
Setup MFA: To get started, make a
POSTrequest to/users/self/mfa/setup. This endpoint will return two important fields,mfa_urlandmfa_qr_code, which can be used with an authenticator application to add a new service. -
Verify MFA:
POST /users/self/mfa/verifyAfter setting up MFA, it’s not immediately enabled for the user. We require users to verify it first by providing a token. The verification step enables the MFA for the user and also marks the current access_token/refresh_token pair as MFA validated. -
Validate MFA: If a user with verified MFA needs to sign in again, the new access_token/refresh_token pair won’t be MFA validated by default. This means that every request made with the access token will result in a
401 MFA required error. In such cases, the client must callPOST /users/self/mfa/validatewith a valid MFA token generated by the authenticator application to mark the tokens as MFA validated. -
Delete MFA:
DELETE /users/self/mfaendpoint with a valid MFA token can be used to remove the multi-factor authentication from the user.
Setup MFA ¶
Setup MFAPOST/users/self/mfa/setup
Example URI
200Body
{
"code": "OK",
"data": {
"type": "user",
"username": null,
"first_name": "updated first name",
"last_name": "Test",
"email": "[email protected]",
"phone_number": "+4368120265807",
"created_at": 1493115498.770362,
"id": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
"address_id": null,
"cover_image_url": "https://test.cloudfront.net/80a227b2-29a0-11e7-b636-e4a7a08e15d4/02fa07b0-d3e4-11f0-a2d4-1bcac3894d4e.jpg",
"profile_image_url": "https://test.cloudfront.net/80a227b2-29a0-11e7-b636-e4a7a08e15d4/030181c0-d3e4-11f0-a2d4-1bcac3894d4e.jpg",
"updated_at": 1765163670.502189,
"user_status": "Active",
"profile_image_thumbnail_url": null,
"cover_image_thumbnail_url": null,
"email_confirmed": true,
"timezone": "America/Chicago",
"user_type": "Agent",
"deleted_at": null,
"phone_confirmed": true,
"is_shadow": false,
"personal_room": null,
"brand": null,
"fake_email": false,
"features": [
"Deals"
],
"last_seen_at": null,
"email_signature": "Here is my great signature",
"daily_enabled": true,
"email_quota": 30000,
"website": null,
"instagram": null,
"twitter": null,
"linkedin": null,
"youtube": null,
"facebook": null,
"designation": null,
"tiktok": null,
"mfa_enabled": false,
"xpressdocs_user_id": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
"current_time": "9:14 PM - Sunday Dec 07, 2025",
"push_allowed": true,
"agents": [
{
"id": "f7e5a65a-50b5-4249-8b2e-bea7d2115db5",
"email": "[email protected]",
"mlsid": "00920130",
"fax": "(972) 264-4703",
"full_name": "Gholi Sweet",
"first_name": "Gholi",
"last_name": "Sweet",
"middle_name": null,
"phone_number": "(972) 264-4703",
"nar_number": "797500044",
"office_mui": "15512742",
"status": "Active",
"office_mlsid": "RCHT01X",
"work_phone": "(469) 358-8080",
"generational_name": null,
"matrix_unique_id": "155155530",
"updated_at": 1765163668.498998,
"deleted_at": null,
"created_at": 1765163668.498998,
"mls": "NTREIS",
"license_number": null,
"designation": null,
"nrds": "01053140",
"type": "agent",
"office_id": null,
"secret_questions": [
"(972) XXX-XX03",
"jewellxxxxxxxxxxxxxal.net",
"(469) XXX-XX80"
]
}
],
"last_seen_type": null,
"active_brand": null,
"display_name": "updated first name Test",
"abbreviated_display_name": "updated first name",
"online_state": "Offline",
"mfa_url": "otpauth://totp/Rechat:test%40rechat.com?issuer=Rechat&secret=ZGXS7ERE7J72LHBQTILVFKKYWP6B422K&algorithm=SHA1&digits=6&period=30",
"mfa_qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANQAAADUCAYAAADk3g0YAAAAAklEQVR4AewaftIAAAppSURBVO3BQY7gRpIAQXei/v9l3z7GKQGCWS1pJ8zsD9ZaVzysta55WGtd87DWuuZhrXXNw1rrmoe11jUPa61rHtZa1zysta55WGtd87DWuuZhrXXNw1rrmoe11jUPa61rfvhI5W+qmFSmihOVqeImlaniRGWqOFGZKiaVk4pJZaqYVN6oeENlqphU/qaKLx7WWtc8rLWueVhrXfPDZRU3qZxUTConFScqX1RMKlPFicobKlPFGxUnFZPKFypTxRsVN6nc9LDWuuZhrXXNw1rrmh9+mcobFTdVTCpTxVQxqUwVX6hMFScqU8UbKicV/2Uqb1T8poe11jUPa61rHtZa1/zwH6fyRsWJylRxovKFyknFFxUnKlPFScWkMqlMFScqU8V/2cNa65qHtdY1D2uta374f6biROWkYlL5omJSeUPlb1L5omJS+V/ysNa65mGtdc3DWuuaH35Zxb9ZxU0Vk8obFW+oTBVfqEwVJyqTylTxmyr+TR7WWtc8rLWueVhrXfPDZSr/JipTxaQyVZxUTCpvVEwqJypTxRsqU8WkMlVMKlPFScWkMlVMKlPFicq/2cNa65qHtdY1D2uta374qOK/rOKk4qRiUpkqvqj4omJSmSomlROVNyomlTcq/kse1lrXPKy1rnlYa13zw0cqU8UbKlPFpPKbVKaKE5WpYqqYVN5QuUnljYo3VCaVNyomlZsqTlSmii8e1lrXPKy1rnlYa11jf3CRylRxk8pUMalMFZPKScVNKlPFpDJVnKhMFScqU8UbKlPFFyonFZPKScWJylTxmx7WWtc8rLWueVhrXWN/8IHKVDGpTBUnKm9UvKHyRcWkclLxhcpvqphUpooTlZOKSeWLikllqphUTipuelhrXfOw1rrmYa11zQ9/mcpJxYnK31QxqfwmlZOKSWWqmFSmijdUpoqTijcqJpUTlanipGJSmVSmii8e1lrXPKy1rnlYa13zw2UqU8WkMlWcqHyhMlWcqEwqX6h8UTGpnKh8UfGFyk0VJypTxUnFb3pYa13zsNa65mGtdc0Pl1WcVEwqU8VUMamcqEwVJypTxaRyUjGpTBWTylRxU8WkMqmcVEwqU8UbFScqU8WkMlWcqJxU/KaHtdY1D2utax7WWtf88FHFpDJVTCpvqNyk8kbFicpU8YbKScVJxd+kMlVMKm9UfFExqbyhMlV88bDWuuZhrXXNw1rrGvuDD1SmihOVNypOVKaKN1ROKiaVNyreUPmi4g2VqWJS+aLiROWkYlKZKiaVqeJvelhrXfOw1rrmYa11zQ+XqUwVJxUnKlPFicpUcVIxqUwqb1RMKicVJxUnKpPKVPGGylRxojJVTCpTxVQxqZxU3KQyVXzxsNa65mGtdc3DWusa+4OLVKaK36TyRcVNKlPFicpUcaIyVUwq/2YVk8pUMamcVLyhclLxxcNa65qHtdY1D2uta374SGWqOFGZKiaV31RxojJVTCpTxVTxmypOKiaVk4o3VKaKN1S+qJhU3qj4TQ9rrWse1lrXPKy1rvnho4pJ5aRiUjmpeENlqripYlKZKiaVk4oTlTcqpopJ5URlqjhR+ZtUpopJZaqYVKaKmx7WWtc8rLWueVhrXfPDRypTxU0q/ySVk4qTikllUrlJZap4o+KNiknlC5U3VL5QmSq+eFhrXfOw1rrmYa11zQ+XqXxR8YbKVDGpvFExqUwVk8pJxVQxqUwVb6j8JpWp4qTiDZWp4g2VE5WTipse1lrXPKy1rnlYa13zw0cVk8pNKlPFicpUMalMFZPKVDGpnFRMKlPFGypTxRsqU8WkMlX8JpU3VKaKNyomld/0sNa65mGtdc3DWuuaH/7lKt6o+KLiC5WbKr6omFSmiknlDZWp4qRiUjmpeKPin/Sw1rrmYa11zcNa6xr7gw9UTipOVG6qmFS+qDhROak4UfknVbyh8kXFpPKbKk5UpoovHtZa1zysta55WGtd88NHFZPKpHJSMalMFZPKFxVvqLxRMalMFf8mKicVU8WkclLxRsWkMlV8oTJV3PSw1rrmYa11zcNa65ofPlKZKiaVqWJSOVGZKiaVSWWqOFH5ouKk4o2KSeVvqjhROak4UZkq3lB5o+JvelhrXfOw1rrmYa11zQ+/rOKkYlKZKk4qTlSmipOKSWWqOFGZKm6quEllUvlCZaqYKiaVqeKkYlKZKv5JD2utax7WWtc8rLWu+eEvU5kqTlSmii9UTlROVKaKqeJEZaqYVKaKE5WpYlKZKqaKSeWkYlJ5Q+ULlS8qftPDWuuah7XWNQ9rrWt++KhiUpkqvqiYVKaKSeWkYlJ5o+JE5Q2VqWJSuUnlpOKNiknlpOJE5Y2KSeWk4jc9rLWueVhrXfOw1rrG/uADlS8qJpU3Kt5QmSomlS8qJpWbKiaVLyr+JpWpYlKZKk5UpopJZar4TQ9rrWse1lrXPKy1rvnhsopJZaqYVKaKE5U3VKaKk4pJZao4UZkqblL5omJSOamYVL6omFSmiknlDZUTlanipoe11jUPa61rHtZa19gffKAyVUwqU8WJyknFP0llqvgnqUwVk8pJxRcqU8UXKm9UTCpTxaQyVdz0sNa65mGtdc3DWusa+4OLVKaKm1SmikllqnhDZaqYVN6oOFH5TRWTyhcVb6icVHyh8kXFTQ9rrWse1lrXPKy1rvnhsoo3VKaKSeWNikllqphUpopJ5aRiUplUTiq+UJkqfpPKScVJxaRyUjGpTBWTylTxNz2sta55WGtd87DWusb+4CKVLyq+UHmj4guVqWJSmSpOVKaKL1ROKk5Ubqp4Q2WqmFROKiaVqeKmh7XWNQ9rrWse1lrX/PCRylRxovKGyknFVDGpTBVvqJxUvKHyhsobFV+ovFFxonKi8obKFxW/6WGtdc3DWuuah7XWNfYH/2EqU8VNKlPFpHJScaIyVbyh8kbFpHJTxRsqU8UbKlPFpHJScdPDWuuah7XWNQ9rrWt++Ejlb6r4QuWNipOKN1TeUJkqvlA5qThRmSreUHlDZao4UZkqJpXf9LDWuuZhrXXNw1rrmh8uq7hJ5aTijYo3VE4qJpWp4ouKNyomlZOKE5Wp4g2VLyreqDipmFSmii8e1lrXPKy1rnlYa13zwy9TeaPiDZU3KiaVL1SmiknlDZUvVKaKSeVE5Q2VqWKqmFROVH6Tym96WGtd87DWuuZhrXXND/9xFZPKVHFTxYnKScUbKicVJypfVEwqJypTxVTxhspUMamcqEwVv+lhrXXNw1rrmoe11jU//I9RmSomlaliUpkq/k1UTiomlanipOJE5URlqnhD5Y2Kv+lhrXXNw1rrmoe11jU//LKKf5LKVHFS8YbKVDGpnKhMFW+onFR8ofKFyk0Vk8q/ycNa65qHtdY1D2uta364TOVvUpkqJpUvVKaKNyomlTcqTlROVKaKNypOVL5QmSpOVE5UpooTlanii4e11jUPa61rHtZa19gfrLWueFhrXfOw1rrmYa11zcNa65qHtdY1D2utax7WWtc8rLWueVhrXfOw1rrmYa11zcNa65qHtdY1D2utax7WWtf8H0PEj+O/BKBAAAAAAElFTkSuQmCC",
"has_password": true
}
}Verify MFA after setup ¶
Verify MFA after setupPOST/users/self/mfa/verify
Example URI
Body
{
"token": "218861"
}200Body
{
"code": "OK",
"data": {
"type": "user",
"username": null,
"first_name": "updated first name",
"last_name": "Test",
"email": "[email protected]",
"phone_number": "+4368120265807",
"created_at": 1493115498.770362,
"id": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
"address_id": null,
"cover_image_url": "https://test.cloudfront.net/80a227b2-29a0-11e7-b636-e4a7a08e15d4/02fa07b0-d3e4-11f0-a2d4-1bcac3894d4e.jpg",
"profile_image_url": "https://test.cloudfront.net/80a227b2-29a0-11e7-b636-e4a7a08e15d4/030181c0-d3e4-11f0-a2d4-1bcac3894d4e.jpg",
"updated_at": 1765163670.502189,
"user_status": "Active",
"profile_image_thumbnail_url": null,
"cover_image_thumbnail_url": null,
"email_confirmed": true,
"timezone": "America/Chicago",
"user_type": "Agent",
"deleted_at": null,
"phone_confirmed": true,
"is_shadow": false,
"personal_room": null,
"brand": null,
"fake_email": false,
"features": [
"Deals"
],
"last_seen_at": null,
"email_signature": "Here is my great signature",
"daily_enabled": true,
"email_quota": 30000,
"website": null,
"instagram": null,
"twitter": null,
"linkedin": null,
"youtube": null,
"facebook": null,
"designation": null,
"tiktok": null,
"mfa_enabled": true,
"xpressdocs_user_id": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
"current_time": "9:14 PM - Sunday Dec 07, 2025",
"push_allowed": true,
"agents": [
{
"id": "f7e5a65a-50b5-4249-8b2e-bea7d2115db5",
"email": "[email protected]",
"mlsid": "00920130",
"fax": "(972) 264-4703",
"full_name": "Gholi Sweet",
"first_name": "Gholi",
"last_name": "Sweet",
"middle_name": null,
"phone_number": "(972) 264-4703",
"nar_number": "797500044",
"office_mui": "15512742",
"status": "Active",
"office_mlsid": "RCHT01X",
"work_phone": "(469) 358-8080",
"generational_name": null,
"matrix_unique_id": "155155530",
"updated_at": 1765163668.498998,
"deleted_at": null,
"created_at": 1765163668.498998,
"mls": "NTREIS",
"license_number": null,
"designation": null,
"nrds": "01053140",
"type": "agent",
"office_id": null,
"secret_questions": [
"(972) XXX-XX03",
"jewellxxxxxxxxxxxxxal.net",
"(469) XXX-XX80"
]
}
],
"last_seen_type": null,
"active_brand": null,
"display_name": "updated first name Test",
"abbreviated_display_name": "updated first name",
"online_state": "Offline",
"has_password": true
}
}