# Paymaster Endpoint

As per [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337), Paymasters facilitate transaction sponsorship, allowing third-party-designed mechanisms to pay for transactions. Many of these mechanisms _could_ be done by having the paymaster wrap a `UserOperation` with their own, but there are some important fundamental limitations to that approach:

* No possibility for “passive” paymasters (eg. that accept fees in some ERC-20 token at an exchange rate pulled from an on-chain DEX)
* Paymasters run the risk of getting griefed, as users could send ops that appear to pay the paymaster but then change their behavior after a block

### Utilize the following APIs to get paymaster data and signature.

### /getpaymasterdata

## Get the paymaster data, that can be sent in the user operations.

<mark style="color:blue;">`GET`</mark> `https://api.expand.network/aa/getpaymasterdata`

#### Query Parameters

| Name                                                       | Type   | Description                                                                                                                                            |
| ---------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| chainId                                                    | String | Refer to the [Chain ID ](../../important-ids/chain-id)page for details.                                                                                |
| chainSymbol                                                | String | Refer to the [Chain ID ](../../important-ids/chain-id)page for details.                                                                                |
| sender<mark style="color:red;">\*</mark>                   | String | On-chain wallet address.                                                                                                                               |
| rpc                                                        | String | Remote procedural call URL.                                                                                                                            |
| nonce                                                      | String | Anti-replay parameter.                                                                                                                                 |
| initCode                                                   | String | The initCode of the account. (needed if and only if the account is not yet on-chain and needs to be created)                                           |
| preVerificationGas                                         | String | The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata.                                                    |
| verificationGasLimit                                       | String | The amount of gas to allocate for the verification step.                                                                                               |
| gasLimit                                                   | String | Maximum gas limit provided by the sender, for the transaction.                                                                                         |
| callGasLimit                                               | String | The amount of gas to allocate the main execution call.                                                                                                 |
| callData                                                   | String | Encoded data for executing the primary function call or operation within the user's transaction.                                                       |
| maxPriorityFeePerGas                                       | String | Maximum priority fee per gas. (similar to EIP-1559 `max_priority_fee_per_gas`)                                                                         |
| maxFeePerGas                                               | String | The maximum fee per gas to pay for the execution of this operation. (similar to [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) `max_fee_per_gas`) |
| signature                                                  | String | Data passed into the account along with the nonce during the verification step.                                                                        |
| paymasterAndData                                           | String | Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster. (empty for self-sponsored transaction)               |
| paymasterContractAddress<mark style="color:red;">\*</mark> | String | Address of the contract from where, gas is to be paid.                                                                                                 |
| mockValidAfter<mark style="color:red;">\*</mark>           | String | The UserOp is valid only after this time, to be sent in epoch time format.                                                                             |
| mockValidUntil<mark style="color:red;">\*</mark>           | String | The UserOp is valid only up to this time, to be sent in epoch time format.                                                                             |

{% tabs %}
{% tab title="Sample Request" %}
```url
https://api.expand.network/aa/getpaymasterdata?sender=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&chainId=1&paymasterContractAddress=0xba60b04029be2bfd16d76e70290acfad3a8b582c&mockValidUntil=0x00000000deadbeef&mockValidAfter=0x0
```
{% endtab %}

{% tab title="Sample Response" %}
```json
{
    "status": 200,
    "msg": "success",
    "data": {
        "paymasterData": "0xba60b04029be2bfd16d76e70290acfad3a8b582c00000000000000000000000000000000000000000000000000000000deadbeef00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
        "hash": "0x2907ffb2f2320e35a041bd74235caed02f706e3ed4b2308f0a064a1f9e0aac67",
        "mockValidUntil": "0x00000000deadbeef",
        "mockValidAfter": "0x0"
    }
}
```
{% endtab %}
{% endtabs %}
