> For the complete documentation index, see [llms.txt](https://www.aevo.xyz/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.aevo.xyz/docs/aevo-products/aevo-builder-codes/perps-vs-options-fees.md).

# Perpetuals vs Options Fees

Builder fees work on both perpetuals and options, but they are calculated differently. The difference is what the fee rate is applied to.

## Perpetuals

```
builder fee = fee rate × trade price × contracts
```

A straight percentage of the trade's notional. For example, at 3 bps, one ETH-PERP contract traded at $2,700 pays a builder fee of **$0.81**.

The rate can't exceed the protocol cap for perpetuals: **5 bps** (`max_fee_rate_perps` = `0.0005`).

## Options

```
builder fee = min(
  fee rate           × index price × contracts,
  option premium cap × premium     × contracts
)
```

The rate is applied to the **underlying's index notional**, not to the option's premium. That is how options fees are normally quoted, and it is the same way Aevo charges its own options trading fee.

On its own, an index-based fee would be unfair on cheap options: 3 bps on one ETH contract is $0.81 whether the option costs $100 or $1. So the builder fee is also capped at a share of the premium (`option_premium_cap`), and the **smaller** of the two applies.

Options have their own, separate caps: a rate of at most **3 bps** of index notional (`max_fee_rate_options` = `0.0003`), and a fee of at most **5% of the premium** (`option_premium_cap` = `0.05`). Builder fees on options are available only while both option settings are configured.

## Example

ETH index $2,700, 1 contract, builder fee rate 3 bps, option premium cap 5%:

| Premium | Index-based fee | 5% of premium | **Builder fee** | Share of premium |
| ------- | --------------- | ------------- | --------------- | ---------------- |
| $100    | $0.81           | $5.00         | **$0.81**       | 0.8%             |
| $20     | $0.81           | $1.00         | **$0.81**       | 4.1%             |
| $5      | $0.81           | $0.25         | **$0.25**       | 5%               |
| $1      | $0.81           | $0.05         | **$0.05**       | 5%               |

The two limits cross where the premium equals `fee rate × index price ÷ option premium cap`, which is **$16.20** in this example. Above that premium the index-based fee applies; below it, the premium cap applies. On cheap, out-of-the-money options, builders earn well below the headline rate.

## Side by side

|                             | Perpetuals                       | Options                            |
| --------------------------- | -------------------------------- | ---------------------------------- |
| Fee based on                | Trade price × contracts          | Index price × contracts            |
| Protection for cheap trades | Not needed                       | Capped at a share of the premium   |
| Maximum rate                | **5 bps** (`max_fee_rate_perps`) | **3 bps** (`max_fee_rate_options`) |
| Maximum share of premium    | —                                | **5%** (`option_premium_cap`)      |
| Dashboard volume            | Trade price × contracts          | Index price × contracts            |

Current values of every cap are published at [`GET /builder-config`](/docs/api-reference/urls/public-api/getbuilderconfig.md).

## One approval, two limits

A user's approval covers both perpetuals and options, but each order must also fit the cap for its instrument type. If the options cap is lower than the user's approved maximum, option orders are limited by the options cap.

For example, if a user approves the maximum of 5 bps, a builder can charge them up to 5 bps on perpetual orders but at most 3 bps on option orders. An option order above 3 bps is rejected with `BUILDER_FEE_EXCEEDS_AEVO_LIMIT`.

## Sending the rate

Builders send the fee **the same way** for perpetuals and options: the same `builder_id` and `builder_fee_rate` fields, as a decimal string such as `"0.0003"`, signed the same way. Aevo decides how to apply it from the instrument.

On an option order, `builder_fee_rate` is a rate on **index notional**, not on the premium. Send only the rate, never a fee amount; Aevo applies the premium cap on each fill. See [Placing orders](/docs/api-reference/builder-codes/placing-orders.md#perpetuals-vs-options).

## Tips for builders

* **Price options separately.** Your perpetuals rate doesn't carry over to options.
* **Expect lower fees on cheap options.** The premium cap applies below the crossover premium.
* **Option volume looks large next to its fees.** Dashboard volume for options is index notional, the same basis as the fee, not premium.


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://www.aevo.xyz/docs/aevo-products/aevo-builder-codes/perps-vs-options-fees.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
