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/eca9f8a0-25d5-11f1-83ca-c9fd0d26db3c.jpg",
"profile_image_url": "https://test.cloudfront.net/80a227b2-29a0-11e7-b636-e4a7a08e15d4/ecb1e7e0-25d5-11f1-83ca-c9fd0d26db3c.jpg",
"updated_at": 1774173615.462301,
"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": "5:00 AM - Sunday Mar 22, 2026",
"push_allowed": false,
"agents": [
{
"id": "50432add-bd02-447b-829e-8378b03aedf3",
"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": 1774173612.654917,
"deleted_at": null,
"created_at": 1774173612.654917,
"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=L6AE2Q5UJUOOESBGZYAZ3IVTGBQQHJEP&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": "799894"
}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/eca9f8a0-25d5-11f1-83ca-c9fd0d26db3c.jpg",
"profile_image_url": "https://test.cloudfront.net/80a227b2-29a0-11e7-b636-e4a7a08e15d4/ecb1e7e0-25d5-11f1-83ca-c9fd0d26db3c.jpg",
"updated_at": 1774173615.462301,
"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": "5:00 AM - Sunday Mar 22, 2026",
"push_allowed": false,
"agents": [
{
"id": "50432add-bd02-447b-829e-8378b03aedf3",
"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": 1774173612.654917,
"deleted_at": null,
"created_at": 1774173612.654917,
"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
}
}