> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sageprotocol.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Fees

> Validates and manages fees related to user actions.

```rust theme={null}
use std::string;
use std::type_name;
use sui::coin;
use sui::event;
use sui::sui;
use sage_admin::admin;
use sage_admin::apps;
```

<Tip>
  Explore this module further in the Mover Registry: @sage/user
</Tip>

## Structs

### `UserFees`

Holds the fee amounts for `User` actions.

```rust theme={null}
public struct UserFees has key
```

<Expandable title="Fields">
  ```rust theme={null}
    id: sui::object::UID,
    app: address,
    custom_coin_type: std::type_name::TypeName,
    create_invite_fee_custom: u64,
    create_invite_fee_sui: u64,
    create_user_fee_custom: u64,
    create_user_fee_sui: u64,
    follow_user_fee_custom: u64,
    follow_user_fee_sui: u64,
    friend_user_fee_custom: u64,
    friend_user_fee_sui: u64,
    post_to_user_fee_custom: u64,
    post_to_user_fee_sui: u64,
    unfollow_user_fee_custom: u64,
    unfollow_user_fee_sui: u64,
    unfriend_user_fee_custom: u64,
    unfriend_user_fee_sui: u64,
    update_user_fee_custom: u64,
    update_user_fee_sui: u64
  ```
</Expandable>

## Events

### `UserFeesCreated`

Emitted when a new `UserFees` is created.

```rust theme={null}
public struct UserFeesCreated has copy, drop
```

<Expandable title="Fields">
  ```rust theme={null}
    app_id: address,
    user_fees_id: address,
    custom_coin_type: std::type_name::TypeName,
    create_invite_fee_custom: u64,
    create_invite_fee_sui: u64,
    create_user_fee_custom: u64,
    create_user_fee_sui: u64,
    follow_user_fee_custom: u64,
    follow_user_fee_sui: u64,
    friend_user_fee_custom: u64,
    friend_user_fee_sui: u64,
    post_to_user_fee_custom: u64,
    post_to_user_fee_sui: u64,
    unfollow_user_fee_custom: u64,
    unfollow_user_fee_sui: u64,
    unfriend_user_fee_custom: u64,
    unfriend_user_fee_sui: u64,
    update_user_fee_custom: u64,
    update_user_fee_sui: u64
  ```
</Expandable>

### `UserFeesUpdated`

Emitted when a `UserFees` is updated.

```rust theme={null}
public struct UserFeesUpdated has copy, drop
```

<Expandable title="Fields">
  ```rust theme={null}
    user_fees_id: address,
    custom_coin_type: std::type_name::TypeName,
    create_invite_fee_custom: u64,
    create_invite_fee_sui: u64,
    create_user_fee_custom: u64,
    create_user_fee_sui: u64,
    follow_user_fee_custom: u64,
    follow_user_fee_sui: u64,
    friend_user_fee_custom: u64,
    friend_user_fee_sui: u64,
    post_to_user_fee_custom: u64,
    post_to_user_fee_sui: u64,
    unfollow_user_fee_custom: u64,
    unfollow_user_fee_sui: u64,
    unfriend_user_fee_custom: u64,
    unfriend_user_fee_sui: u64,
    update_user_fee_custom: u64,
    update_user_fee_sui: u64
  ```
</Expandable>

## Constants

Incorrect coin type passed in for the `custom_coin`.

```rust theme={null}
const EIncorrectCoinType: u64 = 370;
```

Incorrect amount of `custom_coin`.

```rust theme={null}
const EIncorrectCustomPayment: u64 = 371;
```

Incorrect amount of `sui_coin`.

```rust theme={null}
const EIncorrectSuiPayment: u64 = 372;
```
