# Transfer Manager module for manually approving transactions between accounts (ManualApprovalTransfer

View Source: [contracts/modules/TransferManager/MATM/ManualApprovalTransferManager.sol](https://github.com/PolymathNetwork/polymath-core/tree/096ba240a927c98e1f1a182d2efee7c4c4c1dfc5/contracts/modules/TransferManager/MATM/ManualApprovalTransferManager.sol)

**↗ Extends:** [**ManualApprovalTransferManagerStorage**](https://github.com/PolymathNetwork/polymath-core/tree/096ba240a927c98e1f1a182d2efee7c4c4c1dfc5/docs/api/ManualApprovalTransferManagerStorage.md)**,** [**TransferManager**](https://github.com/PolymathNetwork/polymath-core/tree/096ba240a927c98e1f1a182d2efee7c4c4c1dfc5/docs/api/TransferManager.md)

**ManualApprovalTransferManager**

**Events**

```javascript
event AddManualApproval(address indexed _from, address indexed _to, uint256  _allowance, uint256  _expiryTime, bytes32  _description, address indexed _addedBy);
event ModifyManualApproval(address indexed _from, address indexed _to, uint256  _expiryTime, uint256  _allowance, bytes32  _description, address indexed _editedBy);
event RevokeManualApproval(address indexed _from, address indexed _to, address indexed _addedBy);
```

## Functions

* [(address \_securityToken, address \_polyToken)](/polymath/api/manualapprovaltransfermanager.md)
* [getInitFunction()](/polymath/api/manualapprovaltransfermanager.md#getinitfunction)
* [executeTransfer(address \_from, address \_to, uint256 \_amount, bytes )](/polymath/api/manualapprovaltransfermanager.md#executetransfer)
* [verifyTransfer(address \_from, address \_to, uint256 \_amount, bytes )](/polymath/api/manualapprovaltransfermanager.md#verifytransfer)
* [\_verifyTransfer(address \_from, address \_to, uint256 \_amount)](/polymath/api/manualapprovaltransfermanager.md#_verifytransfer)
* [addManualApproval(address \_from, address \_to, uint256 \_allowance, uint256 \_expiryTime, bytes32 \_description)](/polymath/api/manualapprovaltransfermanager.md#addmanualapproval)
* [\_addManualApproval(address \_from, address \_to, uint256 \_allowance, uint256 \_expiryTime, bytes32 \_description)](/polymath/api/manualapprovaltransfermanager.md#_addmanualapproval)
* [addManualApprovalMulti(address\[\] \_from, address\[\] \_to, uint256\[\] \_allowances, uint256\[\] \_expiryTimes, bytes32\[\] \_descriptions)](/polymath/api/manualapprovaltransfermanager.md#addmanualapprovalmulti)
* [modifyManualApproval(address \_from, address \_to, uint256 \_expiryTime, uint256 \_changeInAllowance, bytes32 \_description, bool \_increase)](/polymath/api/manualapprovaltransfermanager.md#modifymanualapproval)
* [\_modifyManualApproval(address \_from, address \_to, uint256 \_expiryTime, uint256 \_changeInAllowance, bytes32 \_description, bool \_increase)](/polymath/api/manualapprovaltransfermanager.md#_modifymanualapproval)
* [modifyManualApprovalMulti(address\[\] \_from, address\[\] \_to, uint256\[\] \_expiryTimes, uint256\[\] \_changeInAllowance, bytes32\[\] \_descriptions, bool\[\] \_increase)](/polymath/api/manualapprovaltransfermanager.md#modifymanualapprovalmulti)
* [revokeManualApproval(address \_from, address \_to)](/polymath/api/manualapprovaltransfermanager.md#revokemanualapproval)
* [\_revokeManualApproval(address \_from, address \_to)](/polymath/api/manualapprovaltransfermanager.md#_revokemanualapproval)
* [revokeManualApprovalMulti(address\[\] \_from, address\[\] \_to)](/polymath/api/manualapprovaltransfermanager.md#revokemanualapprovalmulti)
* [\_checkInputLengthArray(address\[\] \_from, address\[\] \_to, uint256\[\] \_expiryTimes, uint256\[\] \_allowances, bytes32\[\] \_descriptions)](/polymath/api/manualapprovaltransfermanager.md#_checkinputlengtharray)
* [getActiveApprovalsToUser(address \_user)](/polymath/api/manualapprovaltransfermanager.md#getactiveapprovalstouser)
* [getApprovalDetails(address \_from, address \_to)](/polymath/api/manualapprovaltransfermanager.md#getapprovaldetails)
* [getTotalApprovalsLength()](/polymath/api/manualapprovaltransfermanager.md#gettotalapprovalslength)
* [getAllApprovals()](/polymath/api/manualapprovaltransfermanager.md#getallapprovals)
* [getPermissions()](/polymath/api/manualapprovaltransfermanager.md#getpermissions)

Constructor

```javascript
function (address _securityToken, address _polyToken) public nonpayable Module
```

**Arguments**

| Name            | Type    | Description                   |
| --------------- | ------- | ----------------------------- |
| \_securityToken | address | Address of the security token |
| \_polyToken     | address |                               |

### getInitFunction

⤾ overrides [IModule.getInitFunction](https://github.com/PolymathNetwork/polymath-core/tree/096ba240a927c98e1f1a182d2efee7c4c4c1dfc5/docs/api/IModule.md#getinitfunction)

This function returns the signature of configure function

```javascript
function getInitFunction() public pure
returns(bytes4)
```

**Arguments**

| Name | Type | Description |
| ---- | ---- | ----------- |

### executeTransfer

⤾ overrides [ITransferManager.executeTransfer](https://github.com/PolymathNetwork/polymath-core/tree/096ba240a927c98e1f1a182d2efee7c4c4c1dfc5/docs/api/ITransferManager.md#executetransfer)

Used to verify the transfer transaction and allow a manually approved transqaction to bypass other restrictions

```javascript
function executeTransfer(address _from, address _to, uint256 _amount, bytes ) external nonpayable onlySecurityToken 
returns(enum ITransferManager.Result)
```

**Arguments**

| Name     | Type    | Description                      |
| -------- | ------- | -------------------------------- |
| \_from   | address | Address of the sender            |
| \_to     | address | Address of the receiver          |
| \_amount | uint256 | The amount of tokens to transfer |
|          | bytes   | \_from Address of the sender     |

### verifyTransfer

⤾ overrides [ITransferManager.verifyTransfer](https://github.com/PolymathNetwork/polymath-core/tree/096ba240a927c98e1f1a182d2efee7c4c4c1dfc5/docs/api/ITransferManager.md#verifytransfer)

Used to verify the transfer transaction and allow a manually approved transqaction to bypass other restrictions

```javascript
function verifyTransfer(address _from, address _to, uint256 _amount, bytes ) public view
returns(enum ITransferManager.Result, bytes32)
```

**Arguments**

| Name     | Type    | Description                      |
| -------- | ------- | -------------------------------- |
| \_from   | address | Address of the sender            |
| \_to     | address | Address of the receiver          |
| \_amount | uint256 | The amount of tokens to transfer |
|          | bytes   | \_from Address of the sender     |

### \_verifyTransfer

```javascript
function _verifyTransfer(address _from, address _to, uint256 _amount) internal view
returns(enum ITransferManager.Result, bytes32)
```

**Arguments**

| Name     | Type    | Description |
| -------- | ------- | ----------- |
| \_from   | address |             |
| \_to     | address |             |
| \_amount | uint256 |             |

### addManualApproval

Adds a pair of addresses to manual approvals

```javascript
function addManualApproval(address _from, address _to, uint256 _allowance, uint256 _expiryTime, bytes32 _description) external nonpayable withPerm
```

**Arguments**

| Name          | Type    | Description                                      |
| ------------- | ------- | ------------------------------------------------ |
| \_from        | address | is the address from which transfers are approved |
| \_to          | address | is the address to which transfers are approved   |
| \_allowance   | uint256 | is the approved amount of tokens                 |
| \_expiryTime  | uint256 | is the time until which the transfer is allowed  |
| \_description | bytes32 | Description about the manual approval            |

### \_addManualApproval

```javascript
function _addManualApproval(address _from, address _to, uint256 _allowance, uint256 _expiryTime, bytes32 _description) internal nonpayable
```

**Arguments**

| Name          | Type    | Description |
| ------------- | ------- | ----------- |
| \_from        | address |             |
| \_to          | address |             |
| \_allowance   | uint256 |             |
| \_expiryTime  | uint256 |             |
| \_description | bytes32 |             |

### addManualApprovalMulti

Adds mutiple manual approvals in batch

```javascript
function addManualApprovalMulti(address[] _from, address[] _to, uint256[] _allowances, uint256[] _expiryTimes, bytes32[] _descriptions) public nonpayable withPerm
```

**Arguments**

| Name           | Type       | Description                                                    |
| -------------- | ---------- | -------------------------------------------------------------- |
| \_from         | address\[] | is the address array from which transfers are approved         |
| \_to           | address\[] | is the address array to which transfers are approved           |
| \_allowances   | uint256\[] | is the array of approved amounts                               |
| \_expiryTimes  | uint256\[] | is the array of the times until which eath transfer is allowed |
| \_descriptions | bytes32\[] | is the description array for these manual approvals            |

### modifyManualApproval

Modify the existing manual approvals

```javascript
function modifyManualApproval(address _from, address _to, uint256 _expiryTime, uint256 _changeInAllowance, bytes32 _description, bool _increase) external nonpayable withPerm
```

**Arguments**

| Name                | Type    | Description                                                                 |
| ------------------- | ------- | --------------------------------------------------------------------------- |
| \_from              | address | is the address from which transfers are approved                            |
| \_to                | address | is the address to which transfers are approved                              |
| \_expiryTime        | uint256 | is the time until which the transfer is allowed                             |
| \_changeInAllowance | uint256 | is the change in allowance                                                  |
| \_description       | bytes32 | Description about the manual approval                                       |
| \_increase          | bool    | tells whether the allowances will be increased (true) or decreased (false). |

or any value when there is no change in allowances |

### \_modifyManualApproval

```javascript
function _modifyManualApproval(address _from, address _to, uint256 _expiryTime, uint256 _changeInAllowance, bytes32 _description, bool _increase) internal nonpayable
```

**Arguments**

| Name                | Type    | Description |
| ------------------- | ------- | ----------- |
| \_from              | address |             |
| \_to                | address |             |
| \_expiryTime        | uint256 |             |
| \_changeInAllowance | uint256 |             |
| \_description       | bytes32 |             |
| \_increase          | bool    |             |

### modifyManualApprovalMulti

Adds mutiple manual approvals in batch

```javascript
function modifyManualApprovalMulti(address[] _from, address[] _to, uint256[] _expiryTimes, uint256[] _changeInAllowance, bytes32[] _descriptions, bool[] _increase) public nonpayable withPerm
```

**Arguments**

| Name                | Type       | Description                                                                                     |
| ------------------- | ---------- | ----------------------------------------------------------------------------------------------- |
| \_from              | address\[] | is the address array from which transfers are approved                                          |
| \_to                | address\[] | is the address array to which transfers are approved                                            |
| \_expiryTimes       | uint256\[] | is the array of the times until which eath transfer is allowed                                  |
| \_changeInAllowance | uint256\[] | is the array of change in allowances                                                            |
| \_descriptions      | bytes32\[] | is the description array for these manual approvals                                             |
| \_increase          | bool\[]    | Array of bools that tells whether the allowances will be increased (true) or decreased (false). |

or any value when there is no change in allowances |

### revokeManualApproval

Removes a pairs of addresses from manual approvals

```javascript
function revokeManualApproval(address _from, address _to) external nonpayable withPerm
```

**Arguments**

| Name   | Type    | Description                                      |
| ------ | ------- | ------------------------------------------------ |
| \_from | address | is the address from which transfers are approved |
| \_to   | address | is the address to which transfers are approved   |

### \_revokeManualApproval

```javascript
function _revokeManualApproval(address _from, address _to) internal nonpayable
```

**Arguments**

| Name   | Type    | Description |
| ------ | ------- | ----------- |
| \_from | address |             |
| \_to   | address |             |

### revokeManualApprovalMulti

Removes mutiple pairs of addresses from manual approvals

```javascript
function revokeManualApprovalMulti(address[] _from, address[] _to) external nonpayable withPerm
```

**Arguments**

| Name   | Type       | Description                                            |
| ------ | ---------- | ------------------------------------------------------ |
| \_from | address\[] | is the address array from which transfers are approved |
| \_to   | address\[] | is the address array to which transfers are approved   |

### \_checkInputLengthArray

```javascript
function _checkInputLengthArray(address[] _from, address[] _to, uint256[] _expiryTimes, uint256[] _allowances, bytes32[] _descriptions) internal pure
```

**Arguments**

| Name           | Type       | Description |
| -------------- | ---------- | ----------- |
| \_from         | address\[] |             |
| \_to           | address\[] |             |
| \_expiryTimes  | uint256\[] |             |
| \_allowances   | uint256\[] |             |
| \_descriptions | bytes32\[] |             |

### getActiveApprovalsToUser

Returns the all active approvals corresponds to an address

```javascript
function getActiveApprovalsToUser(address _user) external view
returns(address[], address[], uint256[], uint256[], uint256[], bytes32[])
```

**Returns**

address\[] addresses from

**Arguments**

| Name   | Type    | Description                                                        |
| ------ | ------- | ------------------------------------------------------------------ |
| \_user | address | Address of the holder corresponds to whom list of manual approvals |

need to return |

### getApprovalDetails

Get the details of the approval corresponds to \_from & \_to addresses

```javascript
function getApprovalDetails(address _from, address _to) external view
returns(uint256, uint256, uint256, bytes32)
```

**Returns**

uint256 expiryTime of the approval

**Arguments**

| Name   | Type    | Description             |
| ------ | ------- | ----------------------- |
| \_from | address | Address of the sender   |
| \_to   | address | Address of the receiver |

### getTotalApprovalsLength

Returns the current number of active approvals

```javascript
function getTotalApprovalsLength() external view
returns(uint256)
```

**Arguments**

| Name | Type | Description |
| ---- | ---- | ----------- |

### getAllApprovals

Get the details of all approvals

```javascript
function getAllApprovals() external view
returns(address[], address[], uint256[], uint256[], uint256[], bytes32[])
```

**Returns**

address\[] addresses from

**Arguments**

| Name | Type | Description |
| ---- | ---- | ----------- |

### getPermissions

⤾ overrides [IModule.getPermissions](https://github.com/PolymathNetwork/polymath-core/tree/096ba240a927c98e1f1a182d2efee7c4c4c1dfc5/docs/api/IModule.md#getpermissions)

Returns the permissions flag that are associated with ManualApproval transfer manager

```javascript
function getPermissions() public view
returns(bytes32[])
```

**Arguments**

| Name | Type | Description |
| ---- | ---- | ----------- |


---

# Agent Instructions: 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:

```
GET https://developers.polymath.network/polymath/api/manualapprovaltransfermanager.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
