> For the complete documentation index, see [llms.txt](https://docs.veendhq.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.veendhq.com/employees-payroll-and-teams.md).

# Employees, Payroll And Teams

The Veend Expense Product is designed for Companies to manage employees, teams and payroll on VeendHQ.

{% hint style="info" %}
**ORG\_BASE\_URL**

The BASE\_URL for all Team and Employee request on **Test Environment** is [**https://stipendstagingapi.veendhq.com**](https://stipendstagingapi.veendhq.com)  and on **Live Environment** - [**https://api.stipend.co**](https://api.stipend.co)
{% endhint %}

## Employees

Create and employees on Veend Platform with the Employees API.

### Add Employee

To add an employee to your Veend Business Account, the employee must have a user account registered as an **employee** type.

## Registers a new user as an Employee

<mark style="color:green;">`POST`</mark> `{{BASE_URL}}/register`

#### Request Body

| Name                                   | Type     | Description                       |
| -------------------------------------- | -------- | --------------------------------- |
| type<mark style="color:red;">\*</mark> | employee | Sets the account type to employee |

If you already have the employee user account, you can add the employee to your business.&#x20;

<mark style="color:green;">`POST`</mark> `{{ORG_BASE_URL}}/register`

#### Request Body

| Name                                       | Type     | Description                                                    |
| ------------------------------------------ | -------- | -------------------------------------------------------------- |
| \_id<mark style="color:red;">\*</mark>     | String   | Employee Id return in the response data above                  |
| employer<mark style="color:red;">\*</mark> | String   | Veend Business User Id                                         |
| role<mark style="color:red;">\*</mark>     | employee | one of these values **approver, disburser, employee or admin** |
| roles                                      | employee | must be same value as the **role** field                       |
| type<mark style="color:red;">\*</mark>     | employee | Sets the account type to employee                              |

### Get All Employees

## Get all employees

<mark style="color:blue;">`GET`</mark> `{{ORG_BASE_URL}}/myEmployees/users?populate=addressBooks`

#### Query Parameters

| Name     | Type         | Description |
| -------- | ------------ | ----------- |
| populate | addressBooks |             |

{% tabs %}
{% tab title="200: OK " %}

```json
{
    "status": "success",
    "data": [
        {
            "payrollSettings": {
                "basic": 60,
                "housing": 24.6,
                "transport": 9,
                "leave": 3,
                "meal": 1.2,
                "utility": 2.2
            },
            "employeeDetails": {
                "banking": {
                    "bankName": "wema",
                    "bankCode": "",
                    "nuban": "2012099330"
                },
                "contractType": "fulltime",
                "staffNo": "0124",
                "grossSalary": 1000000
            },
            "twoFactor": false,
            "accounts": [
                "63c12da4c60bbf0013ff396a"
            ],
            "addressBooks": [
                {
                    "validated": false,
                    "tags": [
                        "phonenumber",
                        "0988999008",
                        "63c12da4c60bbf0013ff3960"
                    ],
                    "_id": "63c12da4c60bbf0013ff3962",
                    "type": "phonenumber",
                    "value": "0988999008",
                    "user": "63c12da4c60bbf0013ff3960",
                    "validationCode": 882286,
                    "createdAt": "2023-01-13T10:08:36.305Z",
                    "model": "Addressbooks",
                    "__v": 0,
                    "updatedAt": "2023-01-13T10:08:36.317Z"
                },
                {
                    "validated": false,
                    "tags": [
                        "email",
                        "adewaleonamader7898949@gmail.com",
                        "63c12da4c60bbf0013ff3960"
                    ],
                    "_id": "63c12da4c60bbf0013ff3966",
                    "type": "email",
                    "value": "adewaleonamader7898949@gmail.com",
                    "user": "63c12da4c60bbf0013ff3960",
                    "validationCode": 689774,
                    "createdAt": "2023-01-13T10:08:36.312Z",
                    "model": "Addressbooks",
                    "__v": 0,
                    "updatedAt": "2023-01-13T10:08:36.328Z"
                }
            ],
            "authentications": [
                "63c12da4c60bbf0013ff3a4b"
            ],
            "kycVerificationStatus": "not_verified",
            "isBlocked": false,
            "roles": [
                "63c12da4c60bbf0013ff396f",
                "623b45b9463b7a0013d29738"
            ],
            "cards": [],
            "emailVerify": true,
            "completeProfile": true,
            "type": "employee",
            "approver": [],
            "disburser": [],
            "expenses": [],
            "bulkExpenses": [],
            "tags": [],
            "_id": "63c12da4c60bbf0013ff3960",
            "firstName": "jordan",
            "lastName": "Elumelu",
            "referralCode": "DWuoJZxY0a",
            "validationCode": "709896",
            "createdAt": "2023-01-13T10:08:36.299Z",
            "model": "Users",
            "__v": 3,
            "clientId": "426",
            "updatedAt": "2023-01-13T10:10:04.904Z",
            "createdBy": "62bffdf5270d0600135de473",
            "owner": "62bffdf5270d0600135de473",
            "stipendBearerToken": "++oT2WV+hgn4Xr0FReIy/WdZV1Fg8utxKjTPeYVZGM0=",
            "auth": "63c12dfcecd88200134a4fb6",
            "employer": "63bfcc902f650e001389f3ec",
            "role": "63a59d92bf77970014e32d51"
        }
    ]
}
```

{% endtab %}
{% endtabs %}

### Get Employee

## Get an employee detail

<mark style="color:blue;">`GET`</mark> `{{ORG_BASE_URL}}/users/{{USER_ID}}?populate=addressBooks`

#### Query Parameters

| Name     | Type         | Description |
| -------- | ------------ | ----------- |
| populate | addressBooks |             |

### Update Employee Detail

## Update an Employee Detail

<mark style="color:purple;">`PATCH`</mark> `{{ORG_BASE_URL}}/updateProfile/users/{{employeeId}}`

#### Request Body

| Name            | Type   | Description |
| --------------- | ------ | ----------- |
| firstName       | String |             |
| lastName        | String |             |
| phoneNumber     | String |             |
| employeeDetails |        |             |
| dateOfBirth     | String |             |
| address         | String |             |
| addressState    | String |             |
| picture         | String |             |
| email           | String |             |

{% hint style="info" %}
**Employee Details on Payload**

```json
{
   "banking":{
    "bankName":"ACCESS BANK NIGERIA",
    "bankCode":"044",
    "nuban":"0690000010"
   },
   "staffNo": "003",
   "grossSalary": 1500000,
   "contractType": "fulltime",
   "netSalary": 200000
}
```

{% endhint %}

## Payroll

Create and manage payrolls to schedule and disburse salary

### Create Payroll

## Create Payroll

<mark style="color:green;">`POST`</mark> `{{ORG_BASE_URL}}/payrolls`

### Get Payrolls

<mark style="color:blue;">`GET`</mark> `{{ORG_BASE_URL}}/payrolls`

### Disburse Payroll

<mark style="color:purple;">`PATCH`</mark> `{{BASE_URL}}/payrolls/{{PAYROLL_ID}}`

### Deduct Salary

Deduct amount from salary for a list of employees.

<mark style="color:purple;">`PATCH`</mark> `{{BASE_URL}}/deduct/payrolls/{{PAYROLL_ID}}`

## Teams

Create teams, assign your employees to teams on Veend Platform with the Teams API.

### Create a Team

## Create a Team

<mark style="color:green;">`POST`</mark> `{{ORG_BASE_URL}}/teams?accountId={{ACCOUNT_ID}}`

#### Request Body

| Name                                   | Type   | Description      |
| -------------------------------------- | ------ | ---------------- |
| name<mark style="color:red;">\*</mark> | Design | Name of the team |

{% tabs %}
{% tab title="200: OK Success Response for created team" %}

```json
{
    "status": "success",
    "data": {
        "team": {
            "tags": [],
            "_id": "63c3de9184279a0017155d3f",
            "name": "Design",
            "companyId": "63c3ba986d30f000147aad51",
            "createdAt": "2023-01-15T11:08:01.816Z",
            "model": "Teams",
            "__v": 0
        }
    }
}
```

{% endtab %}

{% tab title="400: Bad Request Error response for already existing team name" %}

```json
{
    "status": "error",
    "data": {
        "statusCode": 400,
        "message": "team with the name 'Design' already exists"
    },
    "message": "team with the name 'Design' already exists"
}
```

{% endtab %}
{% endtabs %}

### Delete a Team

## Delete a Team

<mark style="color:red;">`DELETE`</mark> `{{ORG_BASE_URL}}/teams/{{TEAM_ID}}?accountId={{ACCOUNT_ID}}`

#### Request Body

| Name                                   | Type   | Description                    |
| -------------------------------------- | ------ | ------------------------------ |
| name<mark style="color:red;">\*</mark> | Design | The name of the team to delete |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    // Response
}
```

{% endtab %}
{% endtabs %}

### Assign Employee to a Team

## Assign an employee to a team

<mark style="color:green;">`POST`</mark> `{{BASE_URL}}/teams/{{TEAM_ID}}/assignEmployeeToTeam?accountId={{ACCOUNT_ID}}`

#### Request Body

| Name                                         | Type   | Description   |
| -------------------------------------------- | ------ | ------------- |
| teamId<mark style="color:red;">\*</mark>     |        | Team \_id     |
| employeeId<mark style="color:red;">\*</mark> | String | Employee \_id |

{% tabs %}
{% tab title="200: OK " %}

```json

{
    "status": "success",
    "data": {
        "user": "Lola Asa",
        "team": "Design",
        "message": "Employee assigned to team successfully"
    }
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.veendhq.com/employees-payroll-and-teams.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
