---
# System prepended metadata

title: User api description

---

# User api description

## User sign up

`POST` API_URL/api/v1/users/signup

**Accepted params:**

|  Parameter | Description  | Required  |
| ------------ | ------------ | ------------ |
| `name` | String, user full name  | `true`  |
| `email` | String, user email  | `true`  |
| `password` | String,  min length 8 | `true` |
| `password_configrmation`| String, should be equal to `password` | `true` |
| `phone` | String, user phone number  | `true`  |
| `info` | String, user information, for example a description of the desired property | `false`  |

```json
{
    "data": {
        "id": "5e77fa6ac3e7c4220e3456de",
        "type": "user",
        "attributes": {
            "name": "Api User",
            "email": "apiuser@test.te",
            "phone": "1234567890",
            "role": "client",
            "info": "I want to buy a big house in Augusta, PS: preferably with an autonomous bunker and prepared for a zombie apocalypse",
            "welcomeSended": false,
            "welcomeStatus": "browsing",
            "photo": {
                "url": null,
                "thumb": {
                    "url": null
                },
                "profile": {
                    "url": null
                }
            }
        }
    }
}
```
**response headers contain authorization token:
**

|  Parameter |  Value |
| ------------ | ------------ |
|  `Authorization` | Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhZDYzZDYzYS0wZTk2LTQxNTctOTM0My05YjUyNTk1YTZiNDYiLCJzdWIiOiI1ZTc3ZmE2YWMzZTdjNDIyMGUzNDU2ZGUiLCJzY3AiOiJ1c2VyIiwiYXVkIjpudWxsLCJpYXQiOjE1ODQ5MjEzNDgsImV4cCI6MTU4NTA5NDE0OH0.EybdEOxEQIztRYdgUt7v2kI0Ypr8r5zV3cx4j4aWA4Y  |

## User sign in

`POST` API_URL/api/v1/users/login

**Accepted params:**

|  Parameter | Description  |
| ------------ | ------------ |
| `email`  | String, user email  |
| `password` | String, user password  |

reponse status** OK 200**,
**response body:**

```json
{
    "data": {
        "id": "5e77fa6ac3e7c4220e3456de",
        "type": "user",
        "attributes": {
            "name": "Api User",
            "email": "apiuser@test.te",
            "phone": "1234567890",
            "role": "client",
            "info": "I want to buy a big house in Augusta, PS: preferably with an autonomous bunker and prepared for a zombie apocalypse",
            "welcomeSended": false,
            "welcomeStatus": "browsing",
            "photo": {
                "url": null,
                "thumb": {
                    "url": null
                },
                "profile": {
                    "url": null
                }
            }
        }
    }
}
```
**response headers contain authorization token:
**

|  Parameter |  Value |
| ------------ | ------------ |
|  `Authorization` | Bearer eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhZDYzZDYzYS0wZTk2LTQxNTctOTM0My05YjUyNTk1YTZiNDYiLCJzdWIiOiI1ZTc3ZmE2YWMzZTdjNDIyMGUzNDU2ZGUiLCJzY3AiOiJ1c2VyIiwiYXVkIjpudWxsLCJpYXQiOjE1ODQ5MjEzNDgsImV4cCI6MTU4NTA5NDE0OH0.EybdEOxEQIztRYdgUt7v2kI0Ypr8r5zV3cx4j4aWA4Y  |

## User logout
*request should contain an authorization token in the header*

`DELETE` API_URL/api/v1/users/logout

response status code **No Content 204**
**response body: nil**

#### Email confirmation

`GET` API_URL/api/v1/users/confirmation

| Parameter  | Value  |
| ------------ | ------------ |
| `confirmation_token`  | o2DCdxM1AY2EhnmyZNNj  |

**response status OK if token valid and email has not been previously confirmed.
In all other cases it retrun stauts code unprocessable_entity 422 without body**

## Update user profile
*request should contain an authorization token in the header*

`POST` API_URL/api/v1/profile

**Accepted params:**

| Parameter  | Description  |
| ------------ | ------------ |
|  `phone` |  String, user phone  |
| `info` | String, user info |

## Update user password

`POST` API_URL/api/v1/profile/update_password

 **Accepted params:**

| Parameter  | Description  |
| ------------ | ------------ |
|  `current_password` |  String, current user password  |
| `new_password` | String, new user password |
| `new_password_confirmation` | String, new user password confirmation |

**response status code OK 200
response body: nil**

## Upload user photo
*request should contain an authorization token in the header*

endpoint accepts **form-data**

`POST` API_URL/api/v1/profile/update_photo

 **Accepted params:**

| Parameter  | Description  |
| ------------ | ------------ |
|  `file` | Image file, supported formats: jpeg, jpg, png |

After uploading, 2 sizes will be created:
  tumb: 267x267px
  profile: 360x500px
  url: otriginal image size

**response status code OK 200**
response body:
```json
{
    "photo": {
        "url": "https://s3.garagelabs.dev/listd-staging/user/photo/5e77fa6ac3e7c4220e3456de/uploads/2.jpeg",
        "thumb": {
            "url": "https://s3.garagelabs.dev/listd-staging/user/photo/5e77fa6ac3e7c4220e3456de/uploads/thumb_2.jpeg"
        },
        "profile": {
            "url": "https://s3.garagelabs.dev/listd-staging/user/photo/5e77fa6ac3e7c4220e3456de/uploads/profile_2.jpeg"
        }
    }
}
```

## Invite new user
*request should contain an authorization token in the header*

  `POST` API_URL/api/v1/users/invite

 **Accepted params:**

| Parameter  | Description  |
| ------------ | ------------ |
|  `name` | String, invitable user name |
|  `email` | String, invitable user email |

**response status code OK 200**
**response body:**

```json
{
    "data": {
        "id": "5e7817f3c3e7c4265ce6450c",
        "type": "user",
        "attributes": {
            "name": "Invited user",
            "email": "email_to_invite@test.te",
            "phone": null,
            "role": null,
            "info": null,
            "welcomeSended": false,
            "welcomeStatus": null,
            "photo": {
                "url": null,
                "thumb": {
                    "url": null
                },
                "profile": {
                    "url": null
                }
            }
        }
    }
}
```

## Set welcome status
*request should contain an authorization token in the header*

*after registering a user, we suggest that client choose his preferred agent (if he already works with one of our agents) or choose another option: My agent is not in list, No, I am not working with anyone right now, Just browsing*

`POST` API_URL/api/v1/profile/set_welcome_status

**Accepted params:**

| Parameter  | Description  |
| ------------ | ------------ |
|  `status` | String, user status key |

| Key  | Status  |
| ------------ | ------------ |
|  `agent_selected` | In case when user set the preferred agent |
|  `not_working` | No, I am not working with anyone right now |
|  `agent_is_not_listed` | My Realtor isn’t on this list |
|  `browsing` | Just browsing |

**response status code OK 200**,
**response body: nil**

## Get list of available users(for conversations, sharings, etc)
*request should contain an authorization token in the header*

`GET` API_URL/api/v1/profile/available_users

**request does not require parameters**

**response status code OK 200**
**response body:**

```json
{
    "data": [
        {
            "id": "5e7815c4c3e7c426dddceca0",
            "type": "user",
            "attributes": {
                "name": "Invite User1",
                "email": "invitetest1@test.te",
                "photoThumb": null
            }
        },
        {
            "id": "5e7816c4c3e7c4265ce6450b",
            "type": "user",
            "attributes": {
                "name": "Invite User2",
                "email": "invitetest2@test.te",
                "photoThumb": null
            }
        },
        {
            "id": "5e7817f3c3e7c4265ce6450c",
            "type": "user",
            "attributes": {
                 "name": "Invite User3",
                "email": "invitetest3@test.te",
                "photoThumb": null
            }
        }
    ]
}
```

## Get available staff (listing agent, mortgage broker, insurance agent, etc)
*request should contain an authorization token in the header*

  `GET` API_URL/api/v1/profile/available_staff

**request does not require parameters**

**response status code OK 200**
**response body:**

```json
{
    "data": [
        {
            "id": "5c6d865822616d52d56c7d92",
            "type": "Listing Agent",
            "attributes": {
                "name": "Sherry Goff",
                "email": "sgoff@vandermorganrealty.com",
                "photoThumb": "https://s3.garagelabs.dev/listd-staging/user/photo/5c6d865822616d52d56c7d92/uploads/thumb_Sherry_Golf.jpg"
            }
        },
        {
            "id": "5c888ae122616d6f397e6b08",
            "type": "Support Agent",
            "attributes": {
                "name": "support agent",
                "email": "support@listd.com",
                "photoThumb": "https://s3.garagelabs.dev/listd-staging/user/photo/5c888ae122616d6f397e6b08//uploads/thumb_logo.png"
            }
        },
        {
            "id": "5c5320eb22616d244976f175",
            "type": "Listing Agent",
            "attributes": {
                "name": "Evgeny Strashko",
                "email": "es@test.te",
                "photoThumb": "https://s3.garagelabs.dev/listd-staging/user/photo/5c5320eb22616d244976f175//uploads/thumb_IMG_0843.jpg"
            }
        }
    ]
}
```


## Set preferred agent
*request should contain an authorization token in the header*

`POST` API_URL/api/v1/profile/preferred_agent

**Accepted params:**

| Parameter  | Description  |
| ------------ | ------------ |
|  `id` | String, agent id, can be founded in `Get available staff` response|

**response status code OK 200**
**response body: nil**
