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
POST
request to/users/self/mfa/setup
. This endpoint will return two important fields,mfa_url
andmfa_qr_code
, which can be used with an authenticator application to add a new service. -
Verify MFA:
POST /users/self/mfa/verify
After 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/validate
with a valid MFA token generated by the authenticator application to mark the tokens as MFA validated. -
Delete MFA:
DELETE /users/self/mfa
endpoint 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
200
Body
{
"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/0c9106f0-a934-11f0-bdea-d5cf17ea076e.jpg",
"profile_image_url": "https://test.cloudfront.net/80a227b2-29a0-11e7-b636-e4a7a08e15d4/0c974880-a934-11f0-bdea-d5cf17ea076e.jpg",
"updated_at": 1760470146.322939,
"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": null,
"current_time": "2:29 PM - Tuesday Oct 14, 2025",
"push_allowed": true,
"agents": [
{
"id": "bf43bcd1-7576-4053-b032-41c9cd97cc18",
"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": 1760470144.218945,
"deleted_at": null,
"created_at": 1760470144.218945,
"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=7E6FWABNGON222FZPIDD756R6MMLRXIL&algorithm=SHA1&digits=6&period=30",
"mfa_qr_code": "data:image/png;base64,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",
"has_password": true
}
}
Verify MFA after setup ¶
Verify MFA after setupPOST/users/self/mfa/verify
Example URI
Body
{
"token": "904334"
}
200
Body
{
"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/0c9106f0-a934-11f0-bdea-d5cf17ea076e.jpg",
"profile_image_url": "https://test.cloudfront.net/80a227b2-29a0-11e7-b636-e4a7a08e15d4/0c974880-a934-11f0-bdea-d5cf17ea076e.jpg",
"updated_at": 1760470146.322939,
"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": null,
"current_time": "2:29 PM - Tuesday Oct 14, 2025",
"push_allowed": true,
"agents": [
{
"id": "bf43bcd1-7576-4053-b032-41c9cd97cc18",
"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": 1760470144.218945,
"deleted_at": null,
"created_at": 1760470144.218945,
"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
}
}